Merge branch 'pandora-27-omap1' into rev2
[pandora-kernel.git] / arch / arm / mach-omap2 / board-omap3pandora-input.c
1 /*
2  * board-omap3pandora-input.c
3  *
4  * Input mapping for Pandora handheld console
5  * Author: Grazvydas Ignotas <notasas@gmail.com>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * version 2 as published by the Free Software Foundation.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19  * 02110-1301 USA
20  *
21  */
22
23 #include <linux/platform_device.h>
24 #include <linux/input.h>
25 #include <linux/gpio_keys.h>
26
27 #include <mach/hardware.h>
28 #include <mach/keypad.h>
29 #include <mach/gpio.h>
30
31 /* hardware debounce, (value + 1) * 31us */
32 #define GPIO_DEBOUNCE_TIME 0x7f
33
34 static int omap3pandora_keymap[] = {
35         /* col, row, code */
36         KEY(0, 0, KEY_9),
37         KEY(0, 1, KEY_0),
38         KEY(0, 2, KEY_BACKSPACE),
39         KEY(0, 3, KEY_O),
40         KEY(0, 4, KEY_P),
41         KEY(0, 5, KEY_K),
42         KEY(0, 6, KEY_L),
43         KEY(0, 7, KEY_ENTER),
44         KEY(1, 0, KEY_8),
45         KEY(1, 1, KEY_7),
46         KEY(1, 2, KEY_6),
47         KEY(1, 3, KEY_5),
48         KEY(1, 4, KEY_4),
49         KEY(1, 5, KEY_3),
50         KEY(1, 6, KEY_2),
51         KEY(1, 7, KEY_1),
52         KEY(2, 0, KEY_I),
53         KEY(2, 1, KEY_U),
54         KEY(2, 2, KEY_Y),
55         KEY(2, 3, KEY_T),
56         KEY(2, 4, KEY_R),
57         KEY(2, 5, KEY_E),
58         KEY(2, 6, KEY_W),
59         KEY(2, 7, KEY_Q),
60         KEY(3, 0, KEY_J),
61         KEY(3, 1, KEY_H),
62         KEY(3, 2, KEY_G),
63         KEY(3, 3, KEY_F),
64         KEY(3, 4, KEY_D),
65         KEY(3, 5, KEY_S),
66         KEY(3, 6, KEY_A),
67         KEY(3, 7, KEY_LEFTSHIFT),
68         KEY(4, 0, KEY_N),
69         KEY(4, 1, KEY_B),
70         KEY(4, 2, KEY_V),
71         KEY(4, 3, KEY_C),
72         KEY(4, 4, KEY_X),
73         KEY(4, 5, KEY_Z),
74         KEY(4, 6, KEY_DOT),
75         KEY(4, 7, KEY_COMMA),
76         KEY(5, 0, KEY_M),
77         KEY(5, 1, KEY_SPACE),
78         KEY(5, 2, KEY_SPACE),
79         KEY(5, 3, KEY_FN),
80 };
81
82 struct twl4030_keypad_data omap3pandora_kp_data = {
83         .rows           = 8,
84         .cols           = 6,
85         .keymap         = omap3pandora_keymap,
86         .keymapsize     = ARRAY_SIZE(omap3pandora_keymap),
87         .rep            = 1,
88         .irq            = TWL4030_MODIRQ_KEYPAD,
89 };
90
91 static struct gpio_keys_button gpio_buttons[] = {
92         {
93                 .code                   = KEY_UP,
94                 .gpio                   = 110,
95                 .active_low             = 1,
96                 .desc                   = "dpad up",
97         }, {
98                 .code                   = KEY_DOWN,
99                 .gpio                   = 103,
100                 .active_low             = 1,
101                 .desc                   = "dpad down",
102         }, {
103                 .code                   = KEY_LEFT,
104                 .gpio                   = 96,
105                 .active_low             = 1,
106                 .desc                   = "dpad left",
107         }, {
108                 .code                   = KEY_RIGHT,
109                 .gpio                   = 98,
110                 .active_low             = 1,
111                 .desc                   = "dpad right",
112         }, {
113                 .code                   = KEY_KP2,
114                 .gpio                   = 111,
115                 .active_low             = 1,
116                 .desc                   = "game 2",
117         }, {
118                 .code                   = KEY_KP3,
119                 .gpio                   = 106,
120                 .active_low             = 1,
121                 .desc                   = "game 3",
122         }, {
123                 .code                   = KEY_KP1,
124                 .gpio                   = 109,
125                 .active_low             = 1,
126                 .desc                   = "game 1",
127         }, {
128                 .code                   = KEY_KP4,
129                 .gpio                   = 101,
130                 .active_low             = 1,
131                 .desc                   = "game 4",
132         }, {
133                 .code                   = BTN_TL,
134                 .gpio                   = 102,
135                 .active_low             = 1,
136                 .desc                   = "shoulder l",
137         }, {
138                 .code                   = BTN_TL2,
139                 .gpio                   = 97,
140                 .active_low             = 1,
141                 .desc                   = "shoulder l2",
142         }, {
143                 .code                   = BTN_TR,
144                 .gpio                   = 105,
145                 .active_low             = 1,
146                 .desc                   = "shoulder r",
147         }, {
148                 .code                   = BTN_TR2,
149                 .gpio                   = 107,
150                 .active_low             = 1,
151                 .desc                   = "shoulder r2",
152         }, {
153                 .code                   = KEY_LEFTALT,
154                 .gpio                   = 100,
155                 .active_low             = 1,
156                 .desc                   = "start",
157         }, {
158                 .code                   = KEY_LEFTCTRL,
159                 .gpio                   = 104,
160                 .active_low             = 1,
161                 .desc                   = "select",
162         }, {
163                 .code                   = KEY_MENU,
164                 .gpio                   = 99,
165                 .active_low             = 1,
166                 .desc                   = "menu",
167         }, {
168                 .code                   = KEY_COFFEE,
169                 .gpio                   = 176,
170                 .active_low             = 1,
171                 .desc                   = "hold",
172         }, {
173                 .type                   = EV_SW,
174                 .code                   = SW_LID,
175                 .gpio                   = 108,
176                 .active_low             = 1,
177                 .desc                   = "lid switch",
178         },
179 };
180
181 static struct gpio_keys_platform_data gpio_key_info = {
182         .buttons        = gpio_buttons,
183         .nbuttons       = ARRAY_SIZE(gpio_buttons),
184 };
185
186 static struct platform_device omap3pandora_keys_gpio = {
187         .name   = "gpio-keys",
188         .id     = -1,
189         .dev    = {
190                 .platform_data  = &gpio_key_info,
191         },
192 };
193
194 void __init omap3pandora_input_init(void)
195 {
196         int i, ret;
197
198         for (i = 0; i < ARRAY_SIZE(gpio_buttons); i++)
199                 omap_set_gpio_debounce(gpio_buttons[i].gpio, 1);
200
201         /* set debounce time for banks 4 and 6 */
202         omap_set_gpio_debounce_time(32 * 3, GPIO_DEBOUNCE_TIME);
203         omap_set_gpio_debounce_time(32 * 5, GPIO_DEBOUNCE_TIME);
204
205         ret = platform_device_register(&omap3pandora_keys_gpio);
206         if (ret != 0)
207                 printk(KERN_ERR "Failed to register gpio-keys\n");
208 }
209