blob: adcb10eb234721eb9d4d84c16507ebe41255daba [file] [log] [blame]
Chandan Uddarajubedca152010-06-02 23:05:15 -07001/*
Subbaraman Narayanamurthy8f0b0452011-03-11 18:30:10 -08002 * Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
Chandan Uddarajubedca152010-06-02 23:05:15 -07003 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above copyright
9 * notice, this list of conditions and the following disclaimer in the
10 * documentation and/or other materials provided with the distribution.
11 * * Neither the name of Code Aurora nor
12 * the names of its contributors may be used to endorse or promote
13 * products derived from this software without specific prior written
14 * permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30#include <dev/keys.h>
31#include <dev/gpio_keypad.h>
32
Subbaraman Narayanamurthy8f0b0452011-03-11 18:30:10 -080033#define LINUX_MACHTYPE_8660_QT 3298
Chandan Uddarajubedca152010-06-02 23:05:15 -070034#define BITS_IN_ELEMENT(x) (sizeof(x)[0] * 8)
Subbaraman Narayanamurthy8f0b0452011-03-11 18:30:10 -080035#define KEYMAP_INDEX(row, col) (row)* BITS_IN_ELEMENT(qwerty_keys_new) + (col)
Chandan Uddarajubedca152010-06-02 23:05:15 -070036
37static unsigned char qwerty_keys_old[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
38static unsigned char qwerty_keys_new[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
39
Subbaraman Narayanamurthy8f0b0452011-03-11 18:30:10 -080040static unsigned int qt_keymap[] = {
41 [KEYMAP_INDEX(0, 3)] = KEY_BACK, /* Volume down key */
42 [KEYMAP_INDEX(1, 3)] = KEY_HOME, /* Volume up key */
43};
44
45static struct qwerty_keypad_info qt_keypad = {
46 .keymap = qt_keymap,
47 .old_keys = qwerty_keys_old,
48 .rec_keys = qwerty_keys_new,
49 .rows = 3,
50 .columns = 1,
51 .num_of_reads = 3,
52 .rd_func = &pa1_ssbi2_read_bytes,
53 .wr_func = &pa1_ssbi2_write_bytes,
54 .settle_time = 32 /* msec */,
55 .poll_time = 10 /* msec */,
56};
Chandan Uddarajubedca152010-06-02 23:05:15 -070057
58static unsigned int qwerty_keymap[] = {
59 [KEYMAP_INDEX(1, 3)] = KEY_BACK, /* Volume down key */
Shashank Mittal5ff3dd22011-01-07 18:54:16 -080060 [KEYMAP_INDEX(0, 3)] = KEY_HOME, /* Volume up key */
Chandan Uddarajubedca152010-06-02 23:05:15 -070061};
62
63static struct qwerty_keypad_info qwerty_keypad = {
64 .keymap = qwerty_keymap,
65 .old_keys = qwerty_keys_old,
66 .rec_keys = qwerty_keys_new,
67 .rows = 6,
68 .columns = 5,
69 .num_of_reads = 6,
70 .rd_func = &pa1_ssbi2_read_bytes,
71 .wr_func = &pa1_ssbi2_write_bytes,
72 .settle_time = 5 /* msec */,
73 .poll_time = 20 /* msec */,
74};
75
76void keypad_init(void)
77{
Subbaraman Narayanamurthy8f0b0452011-03-11 18:30:10 -080078 unsigned int mach_id;
79
80 mach_id = board_machtype();
81
82 if(mach_id == LINUX_MACHTYPE_8660_QT)
83 ssbi_keypad_init(&qt_keypad);
84 else
85 ssbi_keypad_init(&qwerty_keypad);
Chandan Uddarajubedca152010-06-02 23:05:15 -070086}