* [PATCH] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-17 22:32 ` Janusz Krzysztofik 0 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-17 22:32 UTC (permalink / raw) To: linux-omap, linux-input; +Cc: Tony Lindgren, Dmitry Torokhov, linux-arm-kernel Most keypad drivers make use of the <linux/input/matrix_keypad.h> defined macros, structures and inline functions. Convert omap-keypad driver to use those as well, as suggested by a compile time warning, hardcoded into the OMAP <palt/keypad.h>. Created against linux-2.6.37-rc5. Tested on Amstrad Delta. Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to board-h4. Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> --- arch/arm/mach-omap1/board-ams-delta.c | 128 +++++++++++++++---------------- arch/arm/mach-omap1/board-fsample.c | 65 ++++++++------- arch/arm/mach-omap1/board-h2.c | 69 ++++++++-------- arch/arm/mach-omap1/board-h3.c | 69 ++++++++-------- arch/arm/mach-omap1/board-htcherald.c | 90 +++++++++++---------- arch/arm/mach-omap1/board-innovator.c | 19 ++-- arch/arm/mach-omap1/board-nokia770.c | 27 +++--- arch/arm/mach-omap1/board-osk.c | 19 ++-- arch/arm/mach-omap1/board-palmte.c | 24 +++-- arch/arm/mach-omap1/board-palmtt.c | 26 +++--- arch/arm/mach-omap1/board-palmz71.c | 26 +++--- arch/arm/mach-omap1/board-perseus2.c | 65 ++++++++------- arch/arm/mach-omap1/board-sx1.c | 55 +++++++------ arch/arm/mach-omap2/board-h4.c | 59 +++++++------- arch/arm/plat-omap/include/plat/keypad.h | 31 ++++--- drivers/input/keyboard/omap-keypad.c | 36 ++++---- include/linux/input/matrix_keypad.h | 2 17 files changed, 429 insertions(+), 381 deletions(-) --- linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h.orig 2010-12-09 23:07:38.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h 2010-12-16 21:11:46.000000000 +0100 @@ -10,13 +10,15 @@ #ifndef ASMARM_ARCH_KEYPAD_H #define ASMARM_ARCH_KEYPAD_H -#warning: Please update the board to use matrix_keypad.h instead +#ifndef CONFIG_ARCH_OMAP1 +#warning Please update the board to use matrix-keypad driver +#endif +#include <linux/input/matrix_keypad.h> struct omap_kp_platform_data { int rows; int cols; - int *keymap; - unsigned int keymapsize; + const struct matrix_keymap_data *keymap_data; unsigned int rep:1; unsigned long delay; unsigned int dbounce:1; @@ -28,18 +30,21 @@ struct omap_kp_platform_data { /* Group (0..3) -- when multiple keys are pressed, only the * keys pressed in the same group are considered as pressed. This is * in order to workaround certain crappy HW designs that produce ghost - * keypresses. */ -#define GROUP_0 (0 << 16) -#define GROUP_1 (1 << 16) -#define GROUP_2 (2 << 16) -#define GROUP_3 (3 << 16) + * keypresses. Two free bits, not used by neither row/col nor keynum, + * must be available for use as group bits. The below GROUP_SHIFT + * macro definition is based on some prior knowledge of the + * matrix_keypad defined KEY() macro internals. + */ +#define GROUP_SHIFT 14 +#define GROUP_0 (0 << GROUP_SHIFT) +#define GROUP_1 (1 << GROUP_SHIFT) +#define GROUP_2 (2 << GROUP_SHIFT) +#define GROUP_3 (3 << GROUP_SHIFT) #define GROUP_MASK GROUP_3 +#if KEY_MAX & GROUP_MASK +#error Group bits in conflict with keynum bits +#endif -#define KEY_PERSISTENT 0x00800000 -#define KEYNUM_MASK 0x00EFFFFF -#define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val)) -#define PERSISTENT_KEY(col, row) (((col) << 28) | ((row) << 24) | \ - KEY_PERSISTENT) #endif --- linux-2.6.37-rc5/include/linux/input/matrix_keypad.h.orig 2010-12-09 23:09:05.000000000 +0100 +++ linux-2.6.37-rc5/include/linux/input/matrix_keypad.h 2010-12-17 03:13:28.000000000 +0100 @@ -9,7 +9,7 @@ #define KEY(row, col, val) ((((row) & (MATRIX_MAX_ROWS - 1)) << 24) |\ (((col) & (MATRIX_MAX_COLS - 1)) << 16) |\ - (val & 0xffff)) + ((val) & 0xffff)) #define KEY_ROW(k) (((k) >> 24) & 0xff) #define KEY_COL(k) (((k) >> 16) & 0xff) --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12-09 23:08:09.000000000 +0100 +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-16 21:04:07.000000000 +0100 @@ -65,7 +65,6 @@ struct omap_kp { static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); -static int *keymap; static unsigned int *row_gpios; static unsigned int *col_gpios; @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o } } -static inline int omap_kp_find_key(int col, int row) -{ - int i, key; - - key = KEY(col, row, 0); - for (i = 0; keymap[i] != 0; i++) - if ((keymap[i] & 0xff000000) == key) - return keymap[i] & 0x00ffffff; - return -1; -} - static void omap_kp_tasklet(unsigned long data) { struct omap_kp *omap_kp_data = (struct omap_kp *) data; + unsigned short *keycodes = omap_kp_data->input->keycode; + unsigned int row_shift = get_count_order(omap_kp_data->cols); unsigned char new_state[8], changed, key_down = 0; int col, row; int spurious = 0; @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon row, (new_state[col] & (1 << row)) ? "pressed" : "released"); #else - key = omap_kp_find_key(col, row); + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; if (key < 0) { printk(KERN_WARNING "omap-keypad: Spurious key event %d-%d\n", @@ -298,16 +288,22 @@ static int __devinit omap_kp_probe(struc struct input_dev *input_dev; struct omap_kp_platform_data *pdata = pdev->dev.platform_data; int i, col_idx, row_idx, irq_idx, ret; + unsigned short *keycodes; + unsigned int row_shift; - if (!pdata->rows || !pdata->cols || !pdata->keymap) { - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); return -EINVAL; } omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); + row_shift = get_count_order(pdata->cols); + keycodes = kzalloc((pdata->rows << row_shift) * sizeof(*keycodes), + GFP_KERNEL); input_dev = input_allocate_device(); - if (!omap_kp || !input_dev) { + if (!omap_kp || !keycodes || !input_dev) { kfree(omap_kp); + kfree(keycodes); input_free_device(input_dev); return -ENOMEM; } @@ -320,7 +316,9 @@ static int __devinit omap_kp_probe(struc if (!cpu_is_omap24xx()) omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); - keymap = pdata->keymap; + input_dev->keycode = keycodes; + input_dev->keycodesize = sizeof(*keycodes); + input_dev->keycodemax = pdata->rows << row_shift; if (pdata->rep) __set_bit(EV_REP, input_dev->evbit); @@ -374,8 +372,8 @@ static int __devinit omap_kp_probe(struc /* setup input device */ __set_bit(EV_KEY, input_dev->evbit); - for (i = 0; keymap[i] != 0; i++) - __set_bit(keymap[i] & KEY_MAX, input_dev->keybit); + matrix_keypad_build_keymap(pdata->keymap_data, row_shift, + input_dev->keycode, input_dev->keybit); input_dev->name = "omap-keypad"; input_dev->phys = "omap-keypad/input0"; input_dev->dev.parent = &pdev->dev; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-16 23:06:41.000000000 +0100 @@ -46,81 +46,79 @@ static u16 ams_delta_latch2_reg; static int ams_delta_keymap[] = { KEY(0, 0, KEY_F1), /* Advert */ - KEY(3, 0, KEY_COFFEE), /* Games */ - KEY(2, 0, KEY_QUESTION), /* Directory */ - KEY(3, 2, KEY_CONNECT), /* Internet */ - KEY(2, 1, KEY_SHOP), /* Services */ + KEY(0, 3, KEY_COFFEE), /* Games */ + KEY(0, 2, KEY_QUESTION), /* Directory */ + KEY(2, 3, KEY_CONNECT), /* Internet */ + KEY(1, 2, KEY_SHOP), /* Services */ KEY(1, 1, KEY_PHONE), /* VoiceMail */ - KEY(1, 0, KEY_DELETE), /* Delete */ + KEY(0, 1, KEY_DELETE), /* Delete */ KEY(2, 2, KEY_PLAY), /* Play */ - KEY(0, 1, KEY_PAGEUP), /* Up */ - KEY(3, 1, KEY_PAGEDOWN), /* Down */ - KEY(0, 2, KEY_EMAIL), /* ReadEmail */ - KEY(1, 2, KEY_STOP), /* Stop */ + KEY(1, 0, KEY_PAGEUP), /* Up */ + KEY(1, 3, KEY_PAGEDOWN), /* Down */ + KEY(2, 0, KEY_EMAIL), /* ReadEmail */ + KEY(2, 1, KEY_STOP), /* Stop */ /* Numeric keypad portion */ - KEY(7, 0, KEY_KP1), - KEY(6, 0, KEY_KP2), - KEY(5, 0, KEY_KP3), - KEY(7, 1, KEY_KP4), - KEY(6, 1, KEY_KP5), - KEY(5, 1, KEY_KP6), - KEY(7, 2, KEY_KP7), - KEY(6, 2, KEY_KP8), - KEY(5, 2, KEY_KP9), - KEY(6, 3, KEY_KP0), - KEY(7, 3, KEY_KPASTERISK), - KEY(5, 3, KEY_KPDOT), /* # key */ - KEY(2, 7, KEY_NUMLOCK), /* Mute */ - KEY(1, 7, KEY_KPMINUS), /* Recall */ - KEY(1, 6, KEY_KPPLUS), /* Redial */ - KEY(6, 7, KEY_KPSLASH), /* Handsfree */ - KEY(0, 6, KEY_ENTER), /* Video */ - - KEY(4, 7, KEY_CAMERA), /* Photo */ - - KEY(4, 0, KEY_F2), /* Home */ - KEY(4, 1, KEY_F3), /* Office */ - KEY(4, 2, KEY_F4), /* Mobile */ + KEY(0, 7, KEY_KP1), + KEY(0, 6, KEY_KP2), + KEY(0, 5, KEY_KP3), + KEY(1, 7, KEY_KP4), + KEY(1, 6, KEY_KP5), + KEY(1, 5, KEY_KP6), + KEY(2, 7, KEY_KP7), + KEY(2, 6, KEY_KP8), + KEY(2, 5, KEY_KP9), + KEY(3, 6, KEY_KP0), + KEY(3, 7, KEY_KPASTERISK), + KEY(3, 5, KEY_KPDOT), /* # key */ + KEY(7, 2, KEY_NUMLOCK), /* Mute */ + KEY(7, 1, KEY_KPMINUS), /* Recall */ + KEY(6, 1, KEY_KPPLUS), /* Redial */ + KEY(7, 6, KEY_KPSLASH), /* Handsfree */ + KEY(6, 0, KEY_ENTER), /* Video */ + + KEY(7, 4, KEY_CAMERA), /* Photo */ + + KEY(0, 4, KEY_F2), /* Home */ + KEY(1, 4, KEY_F3), /* Office */ + KEY(2, 4, KEY_F4), /* Mobile */ KEY(7, 7, KEY_F5), /* SMS */ - KEY(5, 7, KEY_F6), /* Email */ + KEY(7, 5, KEY_F6), /* Email */ /* QWERTY portion of keypad */ - KEY(4, 3, KEY_Q), + KEY(3, 4, KEY_Q), KEY(3, 3, KEY_W), - KEY(2, 3, KEY_E), - KEY(1, 3, KEY_R), - KEY(0, 3, KEY_T), - KEY(7, 4, KEY_Y), - KEY(6, 4, KEY_U), - KEY(5, 4, KEY_I), + KEY(3, 2, KEY_E), + KEY(3, 1, KEY_R), + KEY(3, 0, KEY_T), + KEY(4, 7, KEY_Y), + KEY(4, 6, KEY_U), + KEY(4, 5, KEY_I), KEY(4, 4, KEY_O), - KEY(3, 4, KEY_P), + KEY(4, 3, KEY_P), - KEY(2, 4, KEY_A), - KEY(1, 4, KEY_S), - KEY(0, 4, KEY_D), - KEY(7, 5, KEY_F), - KEY(6, 5, KEY_G), + KEY(4, 2, KEY_A), + KEY(4, 1, KEY_S), + KEY(4, 0, KEY_D), + KEY(5, 7, KEY_F), + KEY(5, 6, KEY_G), KEY(5, 5, KEY_H), - KEY(4, 5, KEY_J), - KEY(3, 5, KEY_K), - KEY(2, 5, KEY_L), - - KEY(1, 5, KEY_Z), - KEY(0, 5, KEY_X), - KEY(7, 6, KEY_C), + KEY(5, 4, KEY_J), + KEY(5, 3, KEY_K), + KEY(5, 2, KEY_L), + + KEY(5, 1, KEY_Z), + KEY(5, 0, KEY_X), + KEY(6, 7, KEY_C), KEY(6, 6, KEY_V), - KEY(5, 6, KEY_B), - KEY(4, 6, KEY_N), - KEY(3, 6, KEY_M), - KEY(2, 6, KEY_SPACE), + KEY(6, 5, KEY_B), + KEY(6, 4, KEY_N), + KEY(6, 3, KEY_M), + KEY(6, 2, KEY_SPACE), - KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */ - KEY(3, 7, KEY_LEFTCTRL), /* Vol down */ - - 0 + KEY(7, 0, KEY_LEFTSHIFT), /* Vol up */ + KEY(7, 3, KEY_LEFTCTRL), /* Vol down */ }; void ams_delta_latch1_write(u8 mask, u8 value) @@ -189,11 +187,15 @@ static struct resource ams_delta_kp_reso }, }; +static const struct matrix_keymap_data ams_delta_keymap_data = { + .keymap = ams_delta_keymap, + .keymap_size = ARRAY_SIZE(ams_delta_keymap), +}; + static struct omap_kp_platform_data ams_delta_kp_data = { .rows = 8, .cols = 8, - .keymap = ams_delta_keymap, - .keymapsize = ARRAY_SIZE(ams_delta_keymap), + .keymap_data = &ams_delta_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c 2010-12-16 22:58:59.000000000 +0100 @@ -70,35 +70,34 @@ fsample_cpld_write(0xf0 | ((bit) & 15), FSAMPLE_CPLD_SET_CLR) static int fsample_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -253,11 +252,15 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data fsample_keymap_data = { + .keymap = fsample_keymap, + .keymap_size = ARRAY_SIZE(fsample_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = fsample_keymap, - .keymapsize = ARRAY_SIZE(fsample_keymap), + .keymap_data = &fsample_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c 2010-12-16 22:55:41.000000000 +0100 @@ -54,41 +54,40 @@ static int h2_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; static struct mtd_partition h2_nor_partitions[] = { @@ -270,11 +269,15 @@ static struct resource h2_kp_resources[] }, }; +static const struct matrix_keymap_data h2_keymap_data = { + .keymap = h2_keymap, + .keymap_size = ARRAY_SIZE(h2_keymap), +}; + static struct omap_kp_platform_data h2_kp_data = { .rows = 8, .cols = 8, - .keymap = h2_keymap, - .keymapsize = ARRAY_SIZE(h2_keymap), + .keymap_data = &h2_keymap_data, .rep = 1, .delay = 9, .dbounce = 1, --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c 2010-12-16 22:55:50.000000000 +0100 @@ -58,41 +58,40 @@ static int h3_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; @@ -305,11 +304,15 @@ static struct resource h3_kp_resources[] }, }; +static const struct matrix_keymap_data h3_keymap_data = { + .keymap = h3_keymap, + .keymap_size = ARRAY_SIZE(h3_keymap), +}; + static struct omap_kp_platform_data h3_kp_data = { .rows = 8, .cols = 8, - .keymap = h3_keymap, - .keymapsize = ARRAY_SIZE(h3_keymap), + .keymap_data = &h3_keymap_data, .rep = 1, .delay = 9, .dbounce = 1, --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c 2010-12-16 22:55:55.000000000 +0100 @@ -182,54 +182,58 @@ static int htc_herald_keymap[] = { KEY(0, 0, KEY_RECORD), /* Mail button */ - KEY(0, 1, KEY_CAMERA), /* Camera */ - KEY(0, 2, KEY_PHONE), /* Send key */ - KEY(0, 3, KEY_VOLUMEUP), /* Volume up */ - KEY(0, 4, KEY_F2), /* Right bar (landscape) */ - KEY(0, 5, KEY_MAIL), /* Win key (portrait) */ - KEY(0, 6, KEY_DIRECTORY), /* Right bar (protrait) */ - KEY(1, 0, KEY_LEFTCTRL), /* Windows key */ + KEY(1, 0, KEY_CAMERA), /* Camera */ + KEY(2, 0, KEY_PHONE), /* Send key */ + KEY(3, 0, KEY_VOLUMEUP), /* Volume up */ + KEY(4, 0, KEY_F2), /* Right bar (landscape) */ + KEY(5, 0, KEY_MAIL), /* Win key (portrait) */ + KEY(6, 0, KEY_DIRECTORY), /* Right bar (protrait) */ + KEY(0, 1, KEY_LEFTCTRL), /* Windows key */ KEY(1, 1, KEY_COMMA), - KEY(1, 2, KEY_M), - KEY(1, 3, KEY_K), - KEY(1, 4, KEY_SLASH), /* OK key */ - KEY(1, 5, KEY_I), - KEY(1, 6, KEY_U), - KEY(2, 0, KEY_LEFTALT), - KEY(2, 1, KEY_TAB), + KEY(2, 1, KEY_M), + KEY(3, 1, KEY_K), + KEY(4, 1, KEY_SLASH), /* OK key */ + KEY(5, 1, KEY_I), + KEY(6, 1, KEY_U), + KEY(0, 2, KEY_LEFTALT), + KEY(1, 2, KEY_TAB), KEY(2, 2, KEY_N), - KEY(2, 3, KEY_J), - KEY(2, 4, KEY_ENTER), - KEY(2, 5, KEY_H), - KEY(2, 6, KEY_Y), - KEY(3, 0, KEY_SPACE), - KEY(3, 1, KEY_L), - KEY(3, 2, KEY_B), + KEY(3, 2, KEY_J), + KEY(4, 2, KEY_ENTER), + KEY(5, 2, KEY_H), + KEY(6, 2, KEY_Y), + KEY(0, 3, KEY_SPACE), + KEY(1, 3, KEY_L), + KEY(2, 3, KEY_B), KEY(3, 3, KEY_V), - KEY(3, 4, KEY_BACKSPACE), - KEY(3, 5, KEY_G), - KEY(3, 6, KEY_T), - KEY(4, 0, KEY_CAPSLOCK), /* Shift */ - KEY(4, 1, KEY_C), - KEY(4, 2, KEY_F), - KEY(4, 3, KEY_R), + KEY(4, 3, KEY_BACKSPACE), + KEY(5, 3, KEY_G), + KEY(6, 3, KEY_T), + KEY(0, 4, KEY_CAPSLOCK), /* Shift */ + KEY(1, 4, KEY_C), + KEY(2, 4, KEY_F), + KEY(3, 4, KEY_R), KEY(4, 4, KEY_O), - KEY(4, 5, KEY_E), - KEY(4, 6, KEY_D), - KEY(5, 0, KEY_X), - KEY(5, 1, KEY_Z), - KEY(5, 2, KEY_S), - KEY(5, 3, KEY_W), - KEY(5, 4, KEY_P), + KEY(5, 4, KEY_E), + KEY(6, 4, KEY_D), + KEY(0, 5, KEY_X), + KEY(1, 5, KEY_Z), + KEY(2, 5, KEY_S), + KEY(3, 5, KEY_W), + KEY(4, 5, KEY_P), KEY(5, 5, KEY_Q), - KEY(5, 6, KEY_A), - KEY(6, 0, KEY_CONNECT), /* Voice button */ - KEY(6, 2, KEY_CANCEL), /* End key */ - KEY(6, 3, KEY_VOLUMEDOWN), /* Volume down */ - KEY(6, 4, KEY_F1), /* Left bar (landscape) */ - KEY(6, 5, KEY_WWW), /* OK button (portrait) */ + KEY(6, 5, KEY_A), + KEY(0, 6, KEY_CONNECT), /* Voice button */ + KEY(2, 6, KEY_CANCEL), /* End key */ + KEY(3, 6, KEY_VOLUMEDOWN), /* Volume down */ + KEY(4, 6, KEY_F1), /* Left bar (landscape) */ + KEY(5, 6, KEY_WWW), /* OK button (portrait) */ KEY(6, 6, KEY_CALENDAR), /* Left bar (portrait) */ - 0 +}; + +static const struct matrix_keymap_data htc_herald_keymap_data = { + .keymap = htc_herald_keymap, + .keymap_size = ARRAY_SIZE(htc_herald_keymap), }; struct omap_kp_platform_data htcherald_kp_data = { @@ -237,7 +241,7 @@ struct omap_kp_platform_data htcherald_k .cols = 7, .delay = 20, .rep = 1, - .keymap = htc_herald_keymap, + .keymap_data = &htc_herald_keymap_data, }; static struct resource kp_resources[] = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c 2010-12-16 23:03:03.000000000 +0100 @@ -46,15 +46,14 @@ static int innovator_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 3, KEY_DOWN), + KEY(3, 0, KEY_DOWN), KEY(1, 1, KEY_F2), - KEY(1, 2, KEY_RIGHT), - KEY(2, 0, KEY_F3), - KEY(2, 1, KEY_F4), + KEY(2, 1, KEY_RIGHT), + KEY(0, 2, KEY_F3), + KEY(1, 2, KEY_F4), KEY(2, 2, KEY_UP), - KEY(3, 2, KEY_ENTER), + KEY(2, 3, KEY_ENTER), KEY(3, 3, KEY_LEFT), - 0 }; static struct mtd_partition innovator_partitions[] = { @@ -126,11 +125,15 @@ static struct resource innovator_kp_reso }, }; +static const struct matrix_keymap_data innovator_keymap_data = { + .keymap = innovator_keymap, + .keymap_size = ARRAY_SIZE(innovator_keymap), +}; + static struct omap_kp_platform_data innovator_kp_data = { .rows = 8, .cols = 8, - .keymap = innovator_keymap, - .keymapsize = ARRAY_SIZE(innovator_keymap), + .keymap_data = &innovator_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c 2010-12-16 22:56:06.000000000 +0100 @@ -57,18 +57,17 @@ static void __init omap_nokia770_init_ir } static int nokia770_keymap[] = { - KEY(0, 1, GROUP_0 | KEY_UP), - KEY(0, 2, GROUP_1 | KEY_F5), - KEY(1, 0, GROUP_0 | KEY_LEFT), + KEY(1, 0, GROUP_0 | KEY_UP), + KEY(2, 0, GROUP_1 | KEY_F5), + KEY(0, 1, GROUP_0 | KEY_LEFT), KEY(1, 1, GROUP_0 | KEY_ENTER), - KEY(1, 2, GROUP_0 | KEY_RIGHT), - KEY(2, 0, GROUP_1 | KEY_ESC), - KEY(2, 1, GROUP_0 | KEY_DOWN), + KEY(2, 1, GROUP_0 | KEY_RIGHT), + KEY(0, 2, GROUP_1 | KEY_ESC), + KEY(1, 2, GROUP_0 | KEY_DOWN), KEY(2, 2, GROUP_1 | KEY_F4), - KEY(3, 0, GROUP_2 | KEY_F7), - KEY(3, 1, GROUP_2 | KEY_F8), - KEY(3, 2, GROUP_2 | KEY_F6), - 0 + KEY(0, 3, GROUP_2 | KEY_F7), + KEY(1, 3, GROUP_2 | KEY_F8), + KEY(2, 3, GROUP_2 | KEY_F6), }; static struct resource nokia770_kp_resources[] = { @@ -79,11 +78,15 @@ static struct resource nokia770_kp_resou }, }; +static const struct matrix_keymap_data nokia770_keymap_data = { + .keymap = nokia770_keymap, + .keymap_size = ARRAY_SIZE(nokia770_keymap), +}; + static struct omap_kp_platform_data nokia770_kp_data = { .rows = 8, .cols = 8, - .keymap = nokia770_keymap, - .keymapsize = ARRAY_SIZE(nokia770_keymap), + .keymap_data = &nokia770_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c 2010-12-16 22:56:11.000000000 +0100 @@ -341,22 +341,25 @@ static struct i2c_board_info __initdata static const int osk_keymap[] = { /* KEY(col, row, code) */ KEY(0, 0, KEY_F1), /* SW4 */ - KEY(0, 3, KEY_UP), /* (sw2/up) */ + KEY(3, 0, KEY_UP), /* (sw2/up) */ KEY(1, 1, KEY_LEFTCTRL), /* SW5 */ - KEY(1, 2, KEY_LEFT), /* (sw2/left) */ - KEY(2, 0, KEY_SPACE), /* SW3 */ - KEY(2, 1, KEY_ESC), /* SW6 */ + KEY(2, 1, KEY_LEFT), /* (sw2/left) */ + KEY(0, 2, KEY_SPACE), /* SW3 */ + KEY(1, 2, KEY_ESC), /* SW6 */ KEY(2, 2, KEY_DOWN), /* (sw2/down) */ - KEY(3, 2, KEY_ENTER), /* (sw2/select) */ + KEY(2, 3, KEY_ENTER), /* (sw2/select) */ KEY(3, 3, KEY_RIGHT), /* (sw2/right) */ - 0 +}; + +static const struct matrix_keymap_data osk_keymap_data = { + .keymap = osk_keymap, + .keymap_size = ARRAY_SIZE(osk_keymap), }; static struct omap_kp_platform_data osk_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) osk_keymap, - .keymapsize = ARRAY_SIZE(osk_keymap), + .keymap_data = &osk_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c 2010-12-16 22:56:18.000000000 +0100 @@ -67,22 +67,26 @@ static void __init omap_palmte_init_irq( static const int palmte_keymap[] = { KEY(0, 0, KEY_F1), /* Calendar */ - KEY(0, 1, KEY_F2), /* Contacts */ - KEY(0, 2, KEY_F3), /* Tasks List */ - KEY(0, 3, KEY_F4), /* Note Pad */ - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), /* Contacts */ + KEY(2, 0, KEY_F3), /* Tasks List */ + KEY(3, 0, KEY_F4), /* Note Pad */ + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), +}; + +static const struct matrix_keymap_data palmte_keymap_data = { + .keymap = palmte_keymap, + .keymap_size = ARRAY_SIZE(palmte_keymap), }; static struct omap_kp_platform_data palmte_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) palmte_keymap, + .keymap_data = &palmte_keymap_data, .rep = 1, .delay = 12, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c 2010-12-16 22:56:23.000000000 +0100 @@ -53,17 +53,16 @@ static int palmtt_keymap[] = { KEY(0, 0, KEY_ESC), - KEY(0, 1, KEY_SPACE), - KEY(0, 2, KEY_LEFTCTRL), - KEY(0, 3, KEY_TAB), - KEY(0, 4, KEY_ENTER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_SPACE), + KEY(2, 0, KEY_LEFTCTRL), + KEY(3, 0, KEY_TAB), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(2, 0, KEY_SLEEP), - KEY(2, 4, KEY_Y), - 0 + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(0, 2, KEY_SLEEP), + KEY(4, 2, KEY_Y), }; static struct mtd_partition palmtt_partitions[] = { @@ -136,10 +135,15 @@ static struct resource palmtt_kp_resourc }, }; +static const struct matrix_keymap_data palmtt_keymap_data = { + .keymap = palmtt_keymap, + .keymap_size = ARRAY_SIZE(palmtt_keymap), +}; + static struct omap_kp_platform_data palmtt_kp_data = { .rows = 6, .cols = 3, - .keymap = palmtt_keymap, + .keymap_data = &palmtt_keymap_data, }; static struct platform_device palmtt_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c 2010-12-16 22:56:28.000000000 +0100 @@ -66,23 +66,27 @@ omap_palmz71_init_irq(void) static int palmz71_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 1, KEY_F2), - KEY(0, 2, KEY_F3), - KEY(0, 3, KEY_F4), - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), + KEY(2, 0, KEY_F3), + KEY(3, 0, KEY_F4), + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - KEY(2, 0, KEY_CAMERA), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), + KEY(0, 2, KEY_CAMERA), +}; + +static const struct matrix_keymap_data palmz71_keymap_data = { + .keymap = palmz71_keymap, + .keymap_size = ARRAY_SIZE(palmz71_keymap), }; static struct omap_kp_platform_data palmz71_kp_data = { .rows = 8, .cols = 8, - .keymap = palmz71_keymap, + .keymap_data = &palmz71_keymap_data, .rep = 1, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c 2010-12-16 22:59:39.000000000 +0100 @@ -37,35 +37,34 @@ #include <plat/board.h> static int p2_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -211,11 +210,15 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data p2_keymap_data = { + .keymap = p2_keymap, + .keymap_size = ARRAY_SIZE(p2_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = p2_keymap, - .keymapsize = ARRAY_SIZE(p2_keymap), + .keymap_data = &p2_keymap_data, .delay = 4, .dbounce = 1, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c 2010-12-16 23:04:25.000000000 +0100 @@ -165,35 +165,34 @@ EXPORT_SYMBOL(sx1_setusbpower); /*----------- Keypad -------------------------*/ static int sx1_keymap[] = { - KEY(5, 3, GROUP_0 | 117), /* camera Qt::Key_F17 */ - KEY(0, 4, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ - KEY(1, 4, GROUP_2 | 114), /* voice memo */ - KEY(2, 4, GROUP_3 | 114), /* voice memo */ + KEY(3, 5, GROUP_0 | 117), /* camera Qt::Key_F17 */ + KEY(4, 0, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ + KEY(4, 1, GROUP_2 | 114), /* voice memo */ + KEY(4, 2, GROUP_3 | 114), /* voice memo */ KEY(0, 0, GROUP_1 | KEY_F12), /* red button Qt::Key_Hangup */ - KEY(4, 3, GROUP_1 | KEY_LEFT), - KEY(2, 3, GROUP_1 | KEY_DOWN), - KEY(1, 3, GROUP_1 | KEY_RIGHT), - KEY(0, 3, GROUP_1 | KEY_UP), + KEY(3, 4, GROUP_1 | KEY_LEFT), + KEY(3, 2, GROUP_1 | KEY_DOWN), + KEY(3, 1, GROUP_1 | KEY_RIGHT), + KEY(3, 0, GROUP_1 | KEY_UP), KEY(3, 3, GROUP_1 | KEY_POWER), /* joystick press or Qt::Key_Select */ - KEY(5, 0, GROUP_1 | KEY_1), - KEY(4, 0, GROUP_1 | KEY_2), - KEY(3, 0, GROUP_1 | KEY_3), - KEY(3, 4, GROUP_1 | KEY_4), + KEY(0, 5, GROUP_1 | KEY_1), + KEY(0, 4, GROUP_1 | KEY_2), + KEY(0, 3, GROUP_1 | KEY_3), + KEY(4, 3, GROUP_1 | KEY_4), KEY(4, 4, GROUP_1 | KEY_5), - KEY(5, 4, GROUP_1 | KEY_KPASTERISK),/* "*" */ - KEY(4, 1, GROUP_1 | KEY_6), - KEY(5, 1, GROUP_1 | KEY_7), - KEY(3, 1, GROUP_1 | KEY_8), - KEY(3, 2, GROUP_1 | KEY_9), - KEY(5, 2, GROUP_1 | KEY_0), - KEY(4, 2, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ - KEY(0, 1, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ - KEY(1, 2, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ + KEY(4, 5, GROUP_1 | KEY_KPASTERISK),/* "*" */ + KEY(1, 4, GROUP_1 | KEY_6), + KEY(1, 5, GROUP_1 | KEY_7), + KEY(1, 3, GROUP_1 | KEY_8), + KEY(2, 3, GROUP_1 | KEY_9), + KEY(2, 5, GROUP_1 | KEY_0), + KEY(2, 4, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ + KEY(1, 0, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ + KEY(2, 1, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ KEY(2, 2, GROUP_1 | KEY_F8), /* right soft Qt::Key_Back */ - KEY(2, 1, GROUP_1 | KEY_LEFTSHIFT), /* shift */ + KEY(1, 2, GROUP_1 | KEY_LEFTSHIFT), /* shift */ KEY(1, 1, GROUP_1 | KEY_BACKSPACE), /* C (clear) */ - KEY(0, 2, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ - 0 + KEY(2, 0, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ }; static struct resource sx1_kp_resources[] = { @@ -204,11 +203,15 @@ static struct resource sx1_kp_resources[ }, }; +static const struct matrix_keymap_data sx1_keymap_data = { + .keymap = sx1_keymap, + .keymap_size = ARRAY_SIZE(sx1_keymap), +}; + static struct omap_kp_platform_data sx1_kp_data = { .rows = 6, .cols = 6, - .keymap = sx1_keymap, - .keymapsize = ARRAY_SIZE(sx1_keymap), + .keymap_data = &sx1_keymap_data, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c 2010-12-17 03:49:04.000000000 +0100 @@ -53,36 +53,35 @@ static unsigned int col_gpios[7] = { 90, static int h4_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_A), - KEY(0, 3, KEY_B), - KEY(0, 4, KEY_C), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_A), + KEY(3, 0, KEY_B), + KEY(4, 0, KEY_C), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_E), - KEY(1, 3, KEY_F), - KEY(1, 4, KEY_G), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_I), + KEY(2, 1, KEY_E), + KEY(3, 1, KEY_F), + KEY(4, 1, KEY_G), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_I), KEY(2, 2, KEY_J), - KEY(2, 3, KEY_K), - KEY(2, 4, KEY_3), - KEY(3, 0, KEY_M), - KEY(3, 1, KEY_N), - KEY(3, 2, KEY_O), + KEY(3, 2, KEY_K), + KEY(4, 2, KEY_3), + KEY(0, 3, KEY_M), + KEY(1, 3, KEY_N), + KEY(2, 3, KEY_O), KEY(3, 3, KEY_P), - KEY(3, 4, KEY_Q), - KEY(4, 0, KEY_R), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_T), - KEY(4, 3, KEY_U), + KEY(4, 3, KEY_Q), + KEY(0, 4, KEY_R), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_T), + KEY(3, 4, KEY_U), KEY(4, 4, KEY_ENTER), - KEY(5, 0, KEY_V), - KEY(5, 1, KEY_W), - KEY(5, 2, KEY_L), - KEY(5, 3, KEY_S), - KEY(5, 4, KEY_ENTER), - 0 + KEY(0, 5, KEY_V), + KEY(1, 5, KEY_W), + KEY(2, 5, KEY_L), + KEY(3, 5, KEY_S), + KEY(4, 5, KEY_ENTER), }; static struct mtd_partition h4_partitions[] = { @@ -136,11 +135,15 @@ static struct platform_device h4_flash_d .resource = &h4_flash_resource, }; +static const struct matrix_keymap_data h4_keymap_data = { + .keymap = h4_keymap, + .keymap_size = ARRAY_SIZE(h4_keymap), +}; + static struct omap_kp_platform_data h4_kp_data = { .rows = 6, .cols = 7, - .keymap = h4_keymap, - .keymapsize = ARRAY_SIZE(h4_keymap), + .keymap_data = &h4_keymap_data, .rep = 1, .row_gpios = row_gpios, .col_gpios = col_gpios, ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-17 22:32 ` Janusz Krzysztofik 0 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-17 22:32 UTC (permalink / raw) To: linux-arm-kernel Most keypad drivers make use of the <linux/input/matrix_keypad.h> defined macros, structures and inline functions. Convert omap-keypad driver to use those as well, as suggested by a compile time warning, hardcoded into the OMAP <palt/keypad.h>. Created against linux-2.6.37-rc5. Tested on Amstrad Delta. Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to board-h4. Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> --- arch/arm/mach-omap1/board-ams-delta.c | 128 +++++++++++++++---------------- arch/arm/mach-omap1/board-fsample.c | 65 ++++++++------- arch/arm/mach-omap1/board-h2.c | 69 ++++++++-------- arch/arm/mach-omap1/board-h3.c | 69 ++++++++-------- arch/arm/mach-omap1/board-htcherald.c | 90 +++++++++++---------- arch/arm/mach-omap1/board-innovator.c | 19 ++-- arch/arm/mach-omap1/board-nokia770.c | 27 +++--- arch/arm/mach-omap1/board-osk.c | 19 ++-- arch/arm/mach-omap1/board-palmte.c | 24 +++-- arch/arm/mach-omap1/board-palmtt.c | 26 +++--- arch/arm/mach-omap1/board-palmz71.c | 26 +++--- arch/arm/mach-omap1/board-perseus2.c | 65 ++++++++------- arch/arm/mach-omap1/board-sx1.c | 55 +++++++------ arch/arm/mach-omap2/board-h4.c | 59 +++++++------- arch/arm/plat-omap/include/plat/keypad.h | 31 ++++--- drivers/input/keyboard/omap-keypad.c | 36 ++++---- include/linux/input/matrix_keypad.h | 2 17 files changed, 429 insertions(+), 381 deletions(-) --- linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h.orig 2010-12-09 23:07:38.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h 2010-12-16 21:11:46.000000000 +0100 @@ -10,13 +10,15 @@ #ifndef ASMARM_ARCH_KEYPAD_H #define ASMARM_ARCH_KEYPAD_H -#warning: Please update the board to use matrix_keypad.h instead +#ifndef CONFIG_ARCH_OMAP1 +#warning Please update the board to use matrix-keypad driver +#endif +#include <linux/input/matrix_keypad.h> struct omap_kp_platform_data { int rows; int cols; - int *keymap; - unsigned int keymapsize; + const struct matrix_keymap_data *keymap_data; unsigned int rep:1; unsigned long delay; unsigned int dbounce:1; @@ -28,18 +30,21 @@ struct omap_kp_platform_data { /* Group (0..3) -- when multiple keys are pressed, only the * keys pressed in the same group are considered as pressed. This is * in order to workaround certain crappy HW designs that produce ghost - * keypresses. */ -#define GROUP_0 (0 << 16) -#define GROUP_1 (1 << 16) -#define GROUP_2 (2 << 16) -#define GROUP_3 (3 << 16) + * keypresses. Two free bits, not used by neither row/col nor keynum, + * must be available for use as group bits. The below GROUP_SHIFT + * macro definition is based on some prior knowledge of the + * matrix_keypad defined KEY() macro internals. + */ +#define GROUP_SHIFT 14 +#define GROUP_0 (0 << GROUP_SHIFT) +#define GROUP_1 (1 << GROUP_SHIFT) +#define GROUP_2 (2 << GROUP_SHIFT) +#define GROUP_3 (3 << GROUP_SHIFT) #define GROUP_MASK GROUP_3 +#if KEY_MAX & GROUP_MASK +#error Group bits in conflict with keynum bits +#endif -#define KEY_PERSISTENT 0x00800000 -#define KEYNUM_MASK 0x00EFFFFF -#define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val)) -#define PERSISTENT_KEY(col, row) (((col) << 28) | ((row) << 24) | \ - KEY_PERSISTENT) #endif --- linux-2.6.37-rc5/include/linux/input/matrix_keypad.h.orig 2010-12-09 23:09:05.000000000 +0100 +++ linux-2.6.37-rc5/include/linux/input/matrix_keypad.h 2010-12-17 03:13:28.000000000 +0100 @@ -9,7 +9,7 @@ #define KEY(row, col, val) ((((row) & (MATRIX_MAX_ROWS - 1)) << 24) |\ (((col) & (MATRIX_MAX_COLS - 1)) << 16) |\ - (val & 0xffff)) + ((val) & 0xffff)) #define KEY_ROW(k) (((k) >> 24) & 0xff) #define KEY_COL(k) (((k) >> 16) & 0xff) --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12-09 23:08:09.000000000 +0100 +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-16 21:04:07.000000000 +0100 @@ -65,7 +65,6 @@ struct omap_kp { static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); -static int *keymap; static unsigned int *row_gpios; static unsigned int *col_gpios; @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o } } -static inline int omap_kp_find_key(int col, int row) -{ - int i, key; - - key = KEY(col, row, 0); - for (i = 0; keymap[i] != 0; i++) - if ((keymap[i] & 0xff000000) == key) - return keymap[i] & 0x00ffffff; - return -1; -} - static void omap_kp_tasklet(unsigned long data) { struct omap_kp *omap_kp_data = (struct omap_kp *) data; + unsigned short *keycodes = omap_kp_data->input->keycode; + unsigned int row_shift = get_count_order(omap_kp_data->cols); unsigned char new_state[8], changed, key_down = 0; int col, row; int spurious = 0; @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon row, (new_state[col] & (1 << row)) ? "pressed" : "released"); #else - key = omap_kp_find_key(col, row); + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; if (key < 0) { printk(KERN_WARNING "omap-keypad: Spurious key event %d-%d\n", @@ -298,16 +288,22 @@ static int __devinit omap_kp_probe(struc struct input_dev *input_dev; struct omap_kp_platform_data *pdata = pdev->dev.platform_data; int i, col_idx, row_idx, irq_idx, ret; + unsigned short *keycodes; + unsigned int row_shift; - if (!pdata->rows || !pdata->cols || !pdata->keymap) { - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); return -EINVAL; } omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); + row_shift = get_count_order(pdata->cols); + keycodes = kzalloc((pdata->rows << row_shift) * sizeof(*keycodes), + GFP_KERNEL); input_dev = input_allocate_device(); - if (!omap_kp || !input_dev) { + if (!omap_kp || !keycodes || !input_dev) { kfree(omap_kp); + kfree(keycodes); input_free_device(input_dev); return -ENOMEM; } @@ -320,7 +316,9 @@ static int __devinit omap_kp_probe(struc if (!cpu_is_omap24xx()) omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); - keymap = pdata->keymap; + input_dev->keycode = keycodes; + input_dev->keycodesize = sizeof(*keycodes); + input_dev->keycodemax = pdata->rows << row_shift; if (pdata->rep) __set_bit(EV_REP, input_dev->evbit); @@ -374,8 +372,8 @@ static int __devinit omap_kp_probe(struc /* setup input device */ __set_bit(EV_KEY, input_dev->evbit); - for (i = 0; keymap[i] != 0; i++) - __set_bit(keymap[i] & KEY_MAX, input_dev->keybit); + matrix_keypad_build_keymap(pdata->keymap_data, row_shift, + input_dev->keycode, input_dev->keybit); input_dev->name = "omap-keypad"; input_dev->phys = "omap-keypad/input0"; input_dev->dev.parent = &pdev->dev; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-16 23:06:41.000000000 +0100 @@ -46,81 +46,79 @@ static u16 ams_delta_latch2_reg; static int ams_delta_keymap[] = { KEY(0, 0, KEY_F1), /* Advert */ - KEY(3, 0, KEY_COFFEE), /* Games */ - KEY(2, 0, KEY_QUESTION), /* Directory */ - KEY(3, 2, KEY_CONNECT), /* Internet */ - KEY(2, 1, KEY_SHOP), /* Services */ + KEY(0, 3, KEY_COFFEE), /* Games */ + KEY(0, 2, KEY_QUESTION), /* Directory */ + KEY(2, 3, KEY_CONNECT), /* Internet */ + KEY(1, 2, KEY_SHOP), /* Services */ KEY(1, 1, KEY_PHONE), /* VoiceMail */ - KEY(1, 0, KEY_DELETE), /* Delete */ + KEY(0, 1, KEY_DELETE), /* Delete */ KEY(2, 2, KEY_PLAY), /* Play */ - KEY(0, 1, KEY_PAGEUP), /* Up */ - KEY(3, 1, KEY_PAGEDOWN), /* Down */ - KEY(0, 2, KEY_EMAIL), /* ReadEmail */ - KEY(1, 2, KEY_STOP), /* Stop */ + KEY(1, 0, KEY_PAGEUP), /* Up */ + KEY(1, 3, KEY_PAGEDOWN), /* Down */ + KEY(2, 0, KEY_EMAIL), /* ReadEmail */ + KEY(2, 1, KEY_STOP), /* Stop */ /* Numeric keypad portion */ - KEY(7, 0, KEY_KP1), - KEY(6, 0, KEY_KP2), - KEY(5, 0, KEY_KP3), - KEY(7, 1, KEY_KP4), - KEY(6, 1, KEY_KP5), - KEY(5, 1, KEY_KP6), - KEY(7, 2, KEY_KP7), - KEY(6, 2, KEY_KP8), - KEY(5, 2, KEY_KP9), - KEY(6, 3, KEY_KP0), - KEY(7, 3, KEY_KPASTERISK), - KEY(5, 3, KEY_KPDOT), /* # key */ - KEY(2, 7, KEY_NUMLOCK), /* Mute */ - KEY(1, 7, KEY_KPMINUS), /* Recall */ - KEY(1, 6, KEY_KPPLUS), /* Redial */ - KEY(6, 7, KEY_KPSLASH), /* Handsfree */ - KEY(0, 6, KEY_ENTER), /* Video */ - - KEY(4, 7, KEY_CAMERA), /* Photo */ - - KEY(4, 0, KEY_F2), /* Home */ - KEY(4, 1, KEY_F3), /* Office */ - KEY(4, 2, KEY_F4), /* Mobile */ + KEY(0, 7, KEY_KP1), + KEY(0, 6, KEY_KP2), + KEY(0, 5, KEY_KP3), + KEY(1, 7, KEY_KP4), + KEY(1, 6, KEY_KP5), + KEY(1, 5, KEY_KP6), + KEY(2, 7, KEY_KP7), + KEY(2, 6, KEY_KP8), + KEY(2, 5, KEY_KP9), + KEY(3, 6, KEY_KP0), + KEY(3, 7, KEY_KPASTERISK), + KEY(3, 5, KEY_KPDOT), /* # key */ + KEY(7, 2, KEY_NUMLOCK), /* Mute */ + KEY(7, 1, KEY_KPMINUS), /* Recall */ + KEY(6, 1, KEY_KPPLUS), /* Redial */ + KEY(7, 6, KEY_KPSLASH), /* Handsfree */ + KEY(6, 0, KEY_ENTER), /* Video */ + + KEY(7, 4, KEY_CAMERA), /* Photo */ + + KEY(0, 4, KEY_F2), /* Home */ + KEY(1, 4, KEY_F3), /* Office */ + KEY(2, 4, KEY_F4), /* Mobile */ KEY(7, 7, KEY_F5), /* SMS */ - KEY(5, 7, KEY_F6), /* Email */ + KEY(7, 5, KEY_F6), /* Email */ /* QWERTY portion of keypad */ - KEY(4, 3, KEY_Q), + KEY(3, 4, KEY_Q), KEY(3, 3, KEY_W), - KEY(2, 3, KEY_E), - KEY(1, 3, KEY_R), - KEY(0, 3, KEY_T), - KEY(7, 4, KEY_Y), - KEY(6, 4, KEY_U), - KEY(5, 4, KEY_I), + KEY(3, 2, KEY_E), + KEY(3, 1, KEY_R), + KEY(3, 0, KEY_T), + KEY(4, 7, KEY_Y), + KEY(4, 6, KEY_U), + KEY(4, 5, KEY_I), KEY(4, 4, KEY_O), - KEY(3, 4, KEY_P), + KEY(4, 3, KEY_P), - KEY(2, 4, KEY_A), - KEY(1, 4, KEY_S), - KEY(0, 4, KEY_D), - KEY(7, 5, KEY_F), - KEY(6, 5, KEY_G), + KEY(4, 2, KEY_A), + KEY(4, 1, KEY_S), + KEY(4, 0, KEY_D), + KEY(5, 7, KEY_F), + KEY(5, 6, KEY_G), KEY(5, 5, KEY_H), - KEY(4, 5, KEY_J), - KEY(3, 5, KEY_K), - KEY(2, 5, KEY_L), - - KEY(1, 5, KEY_Z), - KEY(0, 5, KEY_X), - KEY(7, 6, KEY_C), + KEY(5, 4, KEY_J), + KEY(5, 3, KEY_K), + KEY(5, 2, KEY_L), + + KEY(5, 1, KEY_Z), + KEY(5, 0, KEY_X), + KEY(6, 7, KEY_C), KEY(6, 6, KEY_V), - KEY(5, 6, KEY_B), - KEY(4, 6, KEY_N), - KEY(3, 6, KEY_M), - KEY(2, 6, KEY_SPACE), + KEY(6, 5, KEY_B), + KEY(6, 4, KEY_N), + KEY(6, 3, KEY_M), + KEY(6, 2, KEY_SPACE), - KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */ - KEY(3, 7, KEY_LEFTCTRL), /* Vol down */ - - 0 + KEY(7, 0, KEY_LEFTSHIFT), /* Vol up */ + KEY(7, 3, KEY_LEFTCTRL), /* Vol down */ }; void ams_delta_latch1_write(u8 mask, u8 value) @@ -189,11 +187,15 @@ static struct resource ams_delta_kp_reso }, }; +static const struct matrix_keymap_data ams_delta_keymap_data = { + .keymap = ams_delta_keymap, + .keymap_size = ARRAY_SIZE(ams_delta_keymap), +}; + static struct omap_kp_platform_data ams_delta_kp_data = { .rows = 8, .cols = 8, - .keymap = ams_delta_keymap, - .keymapsize = ARRAY_SIZE(ams_delta_keymap), + .keymap_data = &ams_delta_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c 2010-12-16 22:58:59.000000000 +0100 @@ -70,35 +70,34 @@ fsample_cpld_write(0xf0 | ((bit) & 15), FSAMPLE_CPLD_SET_CLR) static int fsample_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -253,11 +252,15 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data fsample_keymap_data = { + .keymap = fsample_keymap, + .keymap_size = ARRAY_SIZE(fsample_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = fsample_keymap, - .keymapsize = ARRAY_SIZE(fsample_keymap), + .keymap_data = &fsample_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c 2010-12-16 22:55:41.000000000 +0100 @@ -54,41 +54,40 @@ static int h2_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; static struct mtd_partition h2_nor_partitions[] = { @@ -270,11 +269,15 @@ static struct resource h2_kp_resources[] }, }; +static const struct matrix_keymap_data h2_keymap_data = { + .keymap = h2_keymap, + .keymap_size = ARRAY_SIZE(h2_keymap), +}; + static struct omap_kp_platform_data h2_kp_data = { .rows = 8, .cols = 8, - .keymap = h2_keymap, - .keymapsize = ARRAY_SIZE(h2_keymap), + .keymap_data = &h2_keymap_data, .rep = 1, .delay = 9, .dbounce = 1, --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c 2010-12-16 22:55:50.000000000 +0100 @@ -58,41 +58,40 @@ static int h3_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; @@ -305,11 +304,15 @@ static struct resource h3_kp_resources[] }, }; +static const struct matrix_keymap_data h3_keymap_data = { + .keymap = h3_keymap, + .keymap_size = ARRAY_SIZE(h3_keymap), +}; + static struct omap_kp_platform_data h3_kp_data = { .rows = 8, .cols = 8, - .keymap = h3_keymap, - .keymapsize = ARRAY_SIZE(h3_keymap), + .keymap_data = &h3_keymap_data, .rep = 1, .delay = 9, .dbounce = 1, --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c 2010-12-16 22:55:55.000000000 +0100 @@ -182,54 +182,58 @@ static int htc_herald_keymap[] = { KEY(0, 0, KEY_RECORD), /* Mail button */ - KEY(0, 1, KEY_CAMERA), /* Camera */ - KEY(0, 2, KEY_PHONE), /* Send key */ - KEY(0, 3, KEY_VOLUMEUP), /* Volume up */ - KEY(0, 4, KEY_F2), /* Right bar (landscape) */ - KEY(0, 5, KEY_MAIL), /* Win key (portrait) */ - KEY(0, 6, KEY_DIRECTORY), /* Right bar (protrait) */ - KEY(1, 0, KEY_LEFTCTRL), /* Windows key */ + KEY(1, 0, KEY_CAMERA), /* Camera */ + KEY(2, 0, KEY_PHONE), /* Send key */ + KEY(3, 0, KEY_VOLUMEUP), /* Volume up */ + KEY(4, 0, KEY_F2), /* Right bar (landscape) */ + KEY(5, 0, KEY_MAIL), /* Win key (portrait) */ + KEY(6, 0, KEY_DIRECTORY), /* Right bar (protrait) */ + KEY(0, 1, KEY_LEFTCTRL), /* Windows key */ KEY(1, 1, KEY_COMMA), - KEY(1, 2, KEY_M), - KEY(1, 3, KEY_K), - KEY(1, 4, KEY_SLASH), /* OK key */ - KEY(1, 5, KEY_I), - KEY(1, 6, KEY_U), - KEY(2, 0, KEY_LEFTALT), - KEY(2, 1, KEY_TAB), + KEY(2, 1, KEY_M), + KEY(3, 1, KEY_K), + KEY(4, 1, KEY_SLASH), /* OK key */ + KEY(5, 1, KEY_I), + KEY(6, 1, KEY_U), + KEY(0, 2, KEY_LEFTALT), + KEY(1, 2, KEY_TAB), KEY(2, 2, KEY_N), - KEY(2, 3, KEY_J), - KEY(2, 4, KEY_ENTER), - KEY(2, 5, KEY_H), - KEY(2, 6, KEY_Y), - KEY(3, 0, KEY_SPACE), - KEY(3, 1, KEY_L), - KEY(3, 2, KEY_B), + KEY(3, 2, KEY_J), + KEY(4, 2, KEY_ENTER), + KEY(5, 2, KEY_H), + KEY(6, 2, KEY_Y), + KEY(0, 3, KEY_SPACE), + KEY(1, 3, KEY_L), + KEY(2, 3, KEY_B), KEY(3, 3, KEY_V), - KEY(3, 4, KEY_BACKSPACE), - KEY(3, 5, KEY_G), - KEY(3, 6, KEY_T), - KEY(4, 0, KEY_CAPSLOCK), /* Shift */ - KEY(4, 1, KEY_C), - KEY(4, 2, KEY_F), - KEY(4, 3, KEY_R), + KEY(4, 3, KEY_BACKSPACE), + KEY(5, 3, KEY_G), + KEY(6, 3, KEY_T), + KEY(0, 4, KEY_CAPSLOCK), /* Shift */ + KEY(1, 4, KEY_C), + KEY(2, 4, KEY_F), + KEY(3, 4, KEY_R), KEY(4, 4, KEY_O), - KEY(4, 5, KEY_E), - KEY(4, 6, KEY_D), - KEY(5, 0, KEY_X), - KEY(5, 1, KEY_Z), - KEY(5, 2, KEY_S), - KEY(5, 3, KEY_W), - KEY(5, 4, KEY_P), + KEY(5, 4, KEY_E), + KEY(6, 4, KEY_D), + KEY(0, 5, KEY_X), + KEY(1, 5, KEY_Z), + KEY(2, 5, KEY_S), + KEY(3, 5, KEY_W), + KEY(4, 5, KEY_P), KEY(5, 5, KEY_Q), - KEY(5, 6, KEY_A), - KEY(6, 0, KEY_CONNECT), /* Voice button */ - KEY(6, 2, KEY_CANCEL), /* End key */ - KEY(6, 3, KEY_VOLUMEDOWN), /* Volume down */ - KEY(6, 4, KEY_F1), /* Left bar (landscape) */ - KEY(6, 5, KEY_WWW), /* OK button (portrait) */ + KEY(6, 5, KEY_A), + KEY(0, 6, KEY_CONNECT), /* Voice button */ + KEY(2, 6, KEY_CANCEL), /* End key */ + KEY(3, 6, KEY_VOLUMEDOWN), /* Volume down */ + KEY(4, 6, KEY_F1), /* Left bar (landscape) */ + KEY(5, 6, KEY_WWW), /* OK button (portrait) */ KEY(6, 6, KEY_CALENDAR), /* Left bar (portrait) */ - 0 +}; + +static const struct matrix_keymap_data htc_herald_keymap_data = { + .keymap = htc_herald_keymap, + .keymap_size = ARRAY_SIZE(htc_herald_keymap), }; struct omap_kp_platform_data htcherald_kp_data = { @@ -237,7 +241,7 @@ struct omap_kp_platform_data htcherald_k .cols = 7, .delay = 20, .rep = 1, - .keymap = htc_herald_keymap, + .keymap_data = &htc_herald_keymap_data, }; static struct resource kp_resources[] = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c 2010-12-16 23:03:03.000000000 +0100 @@ -46,15 +46,14 @@ static int innovator_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 3, KEY_DOWN), + KEY(3, 0, KEY_DOWN), KEY(1, 1, KEY_F2), - KEY(1, 2, KEY_RIGHT), - KEY(2, 0, KEY_F3), - KEY(2, 1, KEY_F4), + KEY(2, 1, KEY_RIGHT), + KEY(0, 2, KEY_F3), + KEY(1, 2, KEY_F4), KEY(2, 2, KEY_UP), - KEY(3, 2, KEY_ENTER), + KEY(2, 3, KEY_ENTER), KEY(3, 3, KEY_LEFT), - 0 }; static struct mtd_partition innovator_partitions[] = { @@ -126,11 +125,15 @@ static struct resource innovator_kp_reso }, }; +static const struct matrix_keymap_data innovator_keymap_data = { + .keymap = innovator_keymap, + .keymap_size = ARRAY_SIZE(innovator_keymap), +}; + static struct omap_kp_platform_data innovator_kp_data = { .rows = 8, .cols = 8, - .keymap = innovator_keymap, - .keymapsize = ARRAY_SIZE(innovator_keymap), + .keymap_data = &innovator_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c 2010-12-16 22:56:06.000000000 +0100 @@ -57,18 +57,17 @@ static void __init omap_nokia770_init_ir } static int nokia770_keymap[] = { - KEY(0, 1, GROUP_0 | KEY_UP), - KEY(0, 2, GROUP_1 | KEY_F5), - KEY(1, 0, GROUP_0 | KEY_LEFT), + KEY(1, 0, GROUP_0 | KEY_UP), + KEY(2, 0, GROUP_1 | KEY_F5), + KEY(0, 1, GROUP_0 | KEY_LEFT), KEY(1, 1, GROUP_0 | KEY_ENTER), - KEY(1, 2, GROUP_0 | KEY_RIGHT), - KEY(2, 0, GROUP_1 | KEY_ESC), - KEY(2, 1, GROUP_0 | KEY_DOWN), + KEY(2, 1, GROUP_0 | KEY_RIGHT), + KEY(0, 2, GROUP_1 | KEY_ESC), + KEY(1, 2, GROUP_0 | KEY_DOWN), KEY(2, 2, GROUP_1 | KEY_F4), - KEY(3, 0, GROUP_2 | KEY_F7), - KEY(3, 1, GROUP_2 | KEY_F8), - KEY(3, 2, GROUP_2 | KEY_F6), - 0 + KEY(0, 3, GROUP_2 | KEY_F7), + KEY(1, 3, GROUP_2 | KEY_F8), + KEY(2, 3, GROUP_2 | KEY_F6), }; static struct resource nokia770_kp_resources[] = { @@ -79,11 +78,15 @@ static struct resource nokia770_kp_resou }, }; +static const struct matrix_keymap_data nokia770_keymap_data = { + .keymap = nokia770_keymap, + .keymap_size = ARRAY_SIZE(nokia770_keymap), +}; + static struct omap_kp_platform_data nokia770_kp_data = { .rows = 8, .cols = 8, - .keymap = nokia770_keymap, - .keymapsize = ARRAY_SIZE(nokia770_keymap), + .keymap_data = &nokia770_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c 2010-12-16 22:56:11.000000000 +0100 @@ -341,22 +341,25 @@ static struct i2c_board_info __initdata static const int osk_keymap[] = { /* KEY(col, row, code) */ KEY(0, 0, KEY_F1), /* SW4 */ - KEY(0, 3, KEY_UP), /* (sw2/up) */ + KEY(3, 0, KEY_UP), /* (sw2/up) */ KEY(1, 1, KEY_LEFTCTRL), /* SW5 */ - KEY(1, 2, KEY_LEFT), /* (sw2/left) */ - KEY(2, 0, KEY_SPACE), /* SW3 */ - KEY(2, 1, KEY_ESC), /* SW6 */ + KEY(2, 1, KEY_LEFT), /* (sw2/left) */ + KEY(0, 2, KEY_SPACE), /* SW3 */ + KEY(1, 2, KEY_ESC), /* SW6 */ KEY(2, 2, KEY_DOWN), /* (sw2/down) */ - KEY(3, 2, KEY_ENTER), /* (sw2/select) */ + KEY(2, 3, KEY_ENTER), /* (sw2/select) */ KEY(3, 3, KEY_RIGHT), /* (sw2/right) */ - 0 +}; + +static const struct matrix_keymap_data osk_keymap_data = { + .keymap = osk_keymap, + .keymap_size = ARRAY_SIZE(osk_keymap), }; static struct omap_kp_platform_data osk_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) osk_keymap, - .keymapsize = ARRAY_SIZE(osk_keymap), + .keymap_data = &osk_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c 2010-12-16 22:56:18.000000000 +0100 @@ -67,22 +67,26 @@ static void __init omap_palmte_init_irq( static const int palmte_keymap[] = { KEY(0, 0, KEY_F1), /* Calendar */ - KEY(0, 1, KEY_F2), /* Contacts */ - KEY(0, 2, KEY_F3), /* Tasks List */ - KEY(0, 3, KEY_F4), /* Note Pad */ - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), /* Contacts */ + KEY(2, 0, KEY_F3), /* Tasks List */ + KEY(3, 0, KEY_F4), /* Note Pad */ + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), +}; + +static const struct matrix_keymap_data palmte_keymap_data = { + .keymap = palmte_keymap, + .keymap_size = ARRAY_SIZE(palmte_keymap), }; static struct omap_kp_platform_data palmte_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) palmte_keymap, + .keymap_data = &palmte_keymap_data, .rep = 1, .delay = 12, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c 2010-12-16 22:56:23.000000000 +0100 @@ -53,17 +53,16 @@ static int palmtt_keymap[] = { KEY(0, 0, KEY_ESC), - KEY(0, 1, KEY_SPACE), - KEY(0, 2, KEY_LEFTCTRL), - KEY(0, 3, KEY_TAB), - KEY(0, 4, KEY_ENTER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_SPACE), + KEY(2, 0, KEY_LEFTCTRL), + KEY(3, 0, KEY_TAB), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(2, 0, KEY_SLEEP), - KEY(2, 4, KEY_Y), - 0 + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(0, 2, KEY_SLEEP), + KEY(4, 2, KEY_Y), }; static struct mtd_partition palmtt_partitions[] = { @@ -136,10 +135,15 @@ static struct resource palmtt_kp_resourc }, }; +static const struct matrix_keymap_data palmtt_keymap_data = { + .keymap = palmtt_keymap, + .keymap_size = ARRAY_SIZE(palmtt_keymap), +}; + static struct omap_kp_platform_data palmtt_kp_data = { .rows = 6, .cols = 3, - .keymap = palmtt_keymap, + .keymap_data = &palmtt_keymap_data, }; static struct platform_device palmtt_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c 2010-12-16 22:56:28.000000000 +0100 @@ -66,23 +66,27 @@ omap_palmz71_init_irq(void) static int palmz71_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 1, KEY_F2), - KEY(0, 2, KEY_F3), - KEY(0, 3, KEY_F4), - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), + KEY(2, 0, KEY_F3), + KEY(3, 0, KEY_F4), + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - KEY(2, 0, KEY_CAMERA), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), + KEY(0, 2, KEY_CAMERA), +}; + +static const struct matrix_keymap_data palmz71_keymap_data = { + .keymap = palmz71_keymap, + .keymap_size = ARRAY_SIZE(palmz71_keymap), }; static struct omap_kp_platform_data palmz71_kp_data = { .rows = 8, .cols = 8, - .keymap = palmz71_keymap, + .keymap_data = &palmz71_keymap_data, .rep = 1, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c 2010-12-16 22:59:39.000000000 +0100 @@ -37,35 +37,34 @@ #include <plat/board.h> static int p2_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -211,11 +210,15 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data p2_keymap_data = { + .keymap = p2_keymap, + .keymap_size = ARRAY_SIZE(p2_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = p2_keymap, - .keymapsize = ARRAY_SIZE(p2_keymap), + .keymap_data = &p2_keymap_data, .delay = 4, .dbounce = 1, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c 2010-12-16 23:04:25.000000000 +0100 @@ -165,35 +165,34 @@ EXPORT_SYMBOL(sx1_setusbpower); /*----------- Keypad -------------------------*/ static int sx1_keymap[] = { - KEY(5, 3, GROUP_0 | 117), /* camera Qt::Key_F17 */ - KEY(0, 4, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ - KEY(1, 4, GROUP_2 | 114), /* voice memo */ - KEY(2, 4, GROUP_3 | 114), /* voice memo */ + KEY(3, 5, GROUP_0 | 117), /* camera Qt::Key_F17 */ + KEY(4, 0, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ + KEY(4, 1, GROUP_2 | 114), /* voice memo */ + KEY(4, 2, GROUP_3 | 114), /* voice memo */ KEY(0, 0, GROUP_1 | KEY_F12), /* red button Qt::Key_Hangup */ - KEY(4, 3, GROUP_1 | KEY_LEFT), - KEY(2, 3, GROUP_1 | KEY_DOWN), - KEY(1, 3, GROUP_1 | KEY_RIGHT), - KEY(0, 3, GROUP_1 | KEY_UP), + KEY(3, 4, GROUP_1 | KEY_LEFT), + KEY(3, 2, GROUP_1 | KEY_DOWN), + KEY(3, 1, GROUP_1 | KEY_RIGHT), + KEY(3, 0, GROUP_1 | KEY_UP), KEY(3, 3, GROUP_1 | KEY_POWER), /* joystick press or Qt::Key_Select */ - KEY(5, 0, GROUP_1 | KEY_1), - KEY(4, 0, GROUP_1 | KEY_2), - KEY(3, 0, GROUP_1 | KEY_3), - KEY(3, 4, GROUP_1 | KEY_4), + KEY(0, 5, GROUP_1 | KEY_1), + KEY(0, 4, GROUP_1 | KEY_2), + KEY(0, 3, GROUP_1 | KEY_3), + KEY(4, 3, GROUP_1 | KEY_4), KEY(4, 4, GROUP_1 | KEY_5), - KEY(5, 4, GROUP_1 | KEY_KPASTERISK),/* "*" */ - KEY(4, 1, GROUP_1 | KEY_6), - KEY(5, 1, GROUP_1 | KEY_7), - KEY(3, 1, GROUP_1 | KEY_8), - KEY(3, 2, GROUP_1 | KEY_9), - KEY(5, 2, GROUP_1 | KEY_0), - KEY(4, 2, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ - KEY(0, 1, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ - KEY(1, 2, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ + KEY(4, 5, GROUP_1 | KEY_KPASTERISK),/* "*" */ + KEY(1, 4, GROUP_1 | KEY_6), + KEY(1, 5, GROUP_1 | KEY_7), + KEY(1, 3, GROUP_1 | KEY_8), + KEY(2, 3, GROUP_1 | KEY_9), + KEY(2, 5, GROUP_1 | KEY_0), + KEY(2, 4, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ + KEY(1, 0, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ + KEY(2, 1, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ KEY(2, 2, GROUP_1 | KEY_F8), /* right soft Qt::Key_Back */ - KEY(2, 1, GROUP_1 | KEY_LEFTSHIFT), /* shift */ + KEY(1, 2, GROUP_1 | KEY_LEFTSHIFT), /* shift */ KEY(1, 1, GROUP_1 | KEY_BACKSPACE), /* C (clear) */ - KEY(0, 2, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ - 0 + KEY(2, 0, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ }; static struct resource sx1_kp_resources[] = { @@ -204,11 +203,15 @@ static struct resource sx1_kp_resources[ }, }; +static const struct matrix_keymap_data sx1_keymap_data = { + .keymap = sx1_keymap, + .keymap_size = ARRAY_SIZE(sx1_keymap), +}; + static struct omap_kp_platform_data sx1_kp_data = { .rows = 6, .cols = 6, - .keymap = sx1_keymap, - .keymapsize = ARRAY_SIZE(sx1_keymap), + .keymap_data = &sx1_keymap_data, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c 2010-12-17 03:49:04.000000000 +0100 @@ -53,36 +53,35 @@ static unsigned int col_gpios[7] = { 90, static int h4_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_A), - KEY(0, 3, KEY_B), - KEY(0, 4, KEY_C), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_A), + KEY(3, 0, KEY_B), + KEY(4, 0, KEY_C), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_E), - KEY(1, 3, KEY_F), - KEY(1, 4, KEY_G), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_I), + KEY(2, 1, KEY_E), + KEY(3, 1, KEY_F), + KEY(4, 1, KEY_G), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_I), KEY(2, 2, KEY_J), - KEY(2, 3, KEY_K), - KEY(2, 4, KEY_3), - KEY(3, 0, KEY_M), - KEY(3, 1, KEY_N), - KEY(3, 2, KEY_O), + KEY(3, 2, KEY_K), + KEY(4, 2, KEY_3), + KEY(0, 3, KEY_M), + KEY(1, 3, KEY_N), + KEY(2, 3, KEY_O), KEY(3, 3, KEY_P), - KEY(3, 4, KEY_Q), - KEY(4, 0, KEY_R), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_T), - KEY(4, 3, KEY_U), + KEY(4, 3, KEY_Q), + KEY(0, 4, KEY_R), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_T), + KEY(3, 4, KEY_U), KEY(4, 4, KEY_ENTER), - KEY(5, 0, KEY_V), - KEY(5, 1, KEY_W), - KEY(5, 2, KEY_L), - KEY(5, 3, KEY_S), - KEY(5, 4, KEY_ENTER), - 0 + KEY(0, 5, KEY_V), + KEY(1, 5, KEY_W), + KEY(2, 5, KEY_L), + KEY(3, 5, KEY_S), + KEY(4, 5, KEY_ENTER), }; static struct mtd_partition h4_partitions[] = { @@ -136,11 +135,15 @@ static struct platform_device h4_flash_d .resource = &h4_flash_resource, }; +static const struct matrix_keymap_data h4_keymap_data = { + .keymap = h4_keymap, + .keymap_size = ARRAY_SIZE(h4_keymap), +}; + static struct omap_kp_platform_data h4_kp_data = { .rows = 6, .cols = 7, - .keymap = h4_keymap, - .keymapsize = ARRAY_SIZE(h4_keymap), + .keymap_data = &h4_keymap_data, .rep = 1, .row_gpios = row_gpios, .col_gpios = col_gpios, ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-17 22:32 ` Janusz Krzysztofik @ 2010-12-18 3:10 ` Tony Lindgren -1 siblings, 0 replies; 36+ messages in thread From: Tony Lindgren @ 2010-12-18 3:10 UTC (permalink / raw) To: Janusz Krzysztofik Cc: linux-omap, linux-input, Dmitry Torokhov, linux-arm-kernel * Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> [101217 14:33]: > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > defined macros, structures and inline functions. > > Convert omap-keypad driver to use those as well, as suggested by a > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > Created against linux-2.6.37-rc5. > Tested on Amstrad Delta. > Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > board-h4. Great, good to get rid of those annoying warnings! > drivers/input/keyboard/omap-keypad.c | 36 ++++---- > include/linux/input/matrix_keypad.h | 2 We also need Dmitry's ack for these changes. Regards, Tony ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-18 3:10 ` Tony Lindgren 0 siblings, 0 replies; 36+ messages in thread From: Tony Lindgren @ 2010-12-18 3:10 UTC (permalink / raw) To: linux-arm-kernel * Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> [101217 14:33]: > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > defined macros, structures and inline functions. > > Convert omap-keypad driver to use those as well, as suggested by a > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > Created against linux-2.6.37-rc5. > Tested on Amstrad Delta. > Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > board-h4. Great, good to get rid of those annoying warnings! > drivers/input/keyboard/omap-keypad.c | 36 ++++---- > include/linux/input/matrix_keypad.h | 2 We also need Dmitry's ack for these changes. Regards, Tony ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-17 22:32 ` Janusz Krzysztofik @ 2010-12-18 4:29 ` Cory Maccarrone -1 siblings, 0 replies; 36+ messages in thread From: Cory Maccarrone @ 2010-12-18 4:29 UTC (permalink / raw) To: Janusz Krzysztofik Cc: linux-omap, linux-input, Tony Lindgren, Dmitry Torokhov, linux-arm-kernel On Fri, Dec 17, 2010 at 2:32 PM, Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> wrote: > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > defined macros, structures and inline functions. > > Convert omap-keypad driver to use those as well, as suggested by a > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > Created against linux-2.6.37-rc5. > Tested on Amstrad Delta. > Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > board-h4. > > Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> > --- Works perfectly on the herald, and no more warning message. Good work! Tested-by: Cory Maccarrone <darkstar6262@gmail.com> - Cory ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-18 4:29 ` Cory Maccarrone 0 siblings, 0 replies; 36+ messages in thread From: Cory Maccarrone @ 2010-12-18 4:29 UTC (permalink / raw) To: linux-arm-kernel On Fri, Dec 17, 2010 at 2:32 PM, Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> wrote: > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > defined macros, structures and inline functions. > > Convert omap-keypad driver to use those as well, as suggested by a > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > Created against linux-2.6.37-rc5. > Tested on Amstrad Delta. > Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > board-h4. > > Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> > --- Works perfectly on the herald, and no more warning message. Good work! Tested-by: Cory Maccarrone <darkstar6262@gmail.com> - Cory ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-18 4:29 ` Cory Maccarrone @ 2010-12-18 5:29 ` Cory Maccarrone -1 siblings, 0 replies; 36+ messages in thread From: Cory Maccarrone @ 2010-12-18 5:29 UTC (permalink / raw) To: Janusz Krzysztofik Cc: linux-omap, linux-input, Tony Lindgren, Dmitry Torokhov, linux-arm-kernel On Fri, Dec 17, 2010 at 8:29 PM, Cory Maccarrone <darkstar6262@gmail.com> wrote: > On Fri, Dec 17, 2010 at 2:32 PM, Janusz Krzysztofik > <jkrzyszt@tis.icnet.pl> wrote: >> Most keypad drivers make use of the <linux/input/matrix_keypad.h> >> defined macros, structures and inline functions. >> >> Convert omap-keypad driver to use those as well, as suggested by a >> compile time warning, hardcoded into the OMAP <palt/keypad.h>. >> >> Created against linux-2.6.37-rc5. >> Tested on Amstrad Delta. >> Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to >> board-h4. >> >> Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> >> --- > > Works perfectly on the herald, and no more warning message. Good work! > > Tested-by: Cory Maccarrone <darkstar6262@gmail.com> > > - Cory > Hmm, I may have spoken too soon. This works perfectly on the latest Torvalds master branch, but does not seem to work applied to linux-omap/master. There, all my keys report the same KEY_RECORD event. Probably not a problem in this patch, I think -- will try and track it down. Out of curiosity, which branch did you test it on? - Cory -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-18 5:29 ` Cory Maccarrone 0 siblings, 0 replies; 36+ messages in thread From: Cory Maccarrone @ 2010-12-18 5:29 UTC (permalink / raw) To: linux-arm-kernel On Fri, Dec 17, 2010 at 8:29 PM, Cory Maccarrone <darkstar6262@gmail.com> wrote: > On Fri, Dec 17, 2010 at 2:32 PM, Janusz Krzysztofik > <jkrzyszt@tis.icnet.pl> wrote: >> Most keypad drivers make use of the <linux/input/matrix_keypad.h> >> defined macros, structures and inline functions. >> >> Convert omap-keypad driver to use those as well, as suggested by a >> compile time warning, hardcoded into the OMAP <palt/keypad.h>. >> >> Created against linux-2.6.37-rc5. >> Tested on Amstrad Delta. >> Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to >> board-h4. >> >> Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> >> --- > > Works perfectly on the herald, and no more warning message. ?Good work! > > Tested-by: Cory Maccarrone <darkstar6262@gmail.com> > > - Cory > Hmm, I may have spoken too soon. This works perfectly on the latest Torvalds master branch, but does not seem to work applied to linux-omap/master. There, all my keys report the same KEY_RECORD event. Probably not a problem in this patch, I think -- will try and track it down. Out of curiosity, which branch did you test it on? - Cory ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-18 5:29 ` Cory Maccarrone @ 2010-12-18 5:38 ` Cory Maccarrone -1 siblings, 0 replies; 36+ messages in thread From: Cory Maccarrone @ 2010-12-18 5:38 UTC (permalink / raw) To: Janusz Krzysztofik Cc: linux-omap, linux-input, Tony Lindgren, Dmitry Torokhov, linux-arm-kernel On Fri, Dec 17, 2010 at 9:29 PM, Cory Maccarrone <darkstar6262@gmail.com> wrote: > On Fri, Dec 17, 2010 at 8:29 PM, Cory Maccarrone <darkstar6262@gmail.com> wrote: >> On Fri, Dec 17, 2010 at 2:32 PM, Janusz Krzysztofik >> <jkrzyszt@tis.icnet.pl> wrote: >>> Most keypad drivers make use of the <linux/input/matrix_keypad.h> >>> defined macros, structures and inline functions. >>> >>> Convert omap-keypad driver to use those as well, as suggested by a >>> compile time warning, hardcoded into the OMAP <palt/keypad.h>. >>> >>> Created against linux-2.6.37-rc5. >>> Tested on Amstrad Delta. >>> Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to >>> board-h4. >>> >>> Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> >>> --- >> >> Works perfectly on the herald, and no more warning message. Good work! >> >> Tested-by: Cory Maccarrone <darkstar6262@gmail.com> >> >> - Cory >> > > Hmm, I may have spoken too soon. This works perfectly on the latest > Torvalds master branch, but does not seem to work applied to > linux-omap/master. There, all my keys report the same KEY_RECORD > event. > > Probably not a problem in this patch, I think -- will try and track it > down. Out of curiosity, which branch did you test it on? > > - Cory > OK, looks like it definitely isn't this patch, something else on linux-omap/master broke it. I'll bisect and see if I can figure it out. - Cory -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-18 5:38 ` Cory Maccarrone 0 siblings, 0 replies; 36+ messages in thread From: Cory Maccarrone @ 2010-12-18 5:38 UTC (permalink / raw) To: linux-arm-kernel On Fri, Dec 17, 2010 at 9:29 PM, Cory Maccarrone <darkstar6262@gmail.com> wrote: > On Fri, Dec 17, 2010 at 8:29 PM, Cory Maccarrone <darkstar6262@gmail.com> wrote: >> On Fri, Dec 17, 2010 at 2:32 PM, Janusz Krzysztofik >> <jkrzyszt@tis.icnet.pl> wrote: >>> Most keypad drivers make use of the <linux/input/matrix_keypad.h> >>> defined macros, structures and inline functions. >>> >>> Convert omap-keypad driver to use those as well, as suggested by a >>> compile time warning, hardcoded into the OMAP <palt/keypad.h>. >>> >>> Created against linux-2.6.37-rc5. >>> Tested on Amstrad Delta. >>> Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to >>> board-h4. >>> >>> Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> >>> --- >> >> Works perfectly on the herald, and no more warning message. ?Good work! >> >> Tested-by: Cory Maccarrone <darkstar6262@gmail.com> >> >> - Cory >> > > Hmm, I may have spoken too soon. ?This works perfectly on the latest > Torvalds master branch, but does not seem to work applied to > linux-omap/master. ?There, all my keys report the same KEY_RECORD > event. > > Probably not a problem in this patch, I think -- will try and track it > down. ?Out of curiosity, which branch did you test it on? > > - Cory > OK, looks like it definitely isn't this patch, something else on linux-omap/master broke it. I'll bisect and see if I can figure it out. - Cory ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-17 22:32 ` Janusz Krzysztofik @ 2010-12-18 6:01 ` Dmitry Torokhov -1 siblings, 0 replies; 36+ messages in thread From: Dmitry Torokhov @ 2010-12-18 6:01 UTC (permalink / raw) To: Janusz Krzysztofik Cc: linux-omap, linux-input, Tony Lindgren, linux-arm-kernel Hi Janusz, On Fri, Dec 17, 2010 at 11:32:04PM +0100, Janusz Krzysztofik wrote: > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > defined macros, structures and inline functions. > > Convert omap-keypad driver to use those as well, as suggested by a > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > Looks nice, couple of comments. > > struct omap_kp_platform_data { > int rows; > int cols; > - int *keymap; > - unsigned int keymapsize; > + const struct matrix_keymap_data *keymap_data; > unsigned int rep:1; > unsigned long delay; > unsigned int dbounce:1; Since you are updating all boards maybe also change rep and dbounce to bool? > --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12-09 23:08:09.000000000 +0100 > +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-16 21:04:07.000000000 +0100 > @@ -65,7 +65,6 @@ struct omap_kp { > > static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); > > -static int *keymap; > static unsigned int *row_gpios; > static unsigned int *col_gpios; > > @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o > } > } > > -static inline int omap_kp_find_key(int col, int row) > -{ > - int i, key; > - > - key = KEY(col, row, 0); > - for (i = 0; keymap[i] != 0; i++) > - if ((keymap[i] & 0xff000000) == key) > - return keymap[i] & 0x00ffffff; > - return -1; > -} > - > static void omap_kp_tasklet(unsigned long data) > { > struct omap_kp *omap_kp_data = (struct omap_kp *) data; > + unsigned short *keycodes = omap_kp_data->input->keycode; > + unsigned int row_shift = get_count_order(omap_kp_data->cols); > unsigned char new_state[8], changed, key_down = 0; > int col, row; > int spurious = 0; > @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon > row, (new_state[col] & (1 << row)) ? > "pressed" : "released"); > #else > - key = omap_kp_find_key(col, row); > + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; > if (key < 0) { > printk(KERN_WARNING > "omap-keypad: Spurious key event %d-%d\n", > @@ -298,16 +288,22 @@ static int __devinit omap_kp_probe(struc > struct input_dev *input_dev; > struct omap_kp_platform_data *pdata = pdev->dev.platform_data; > int i, col_idx, row_idx, irq_idx, ret; > + unsigned short *keycodes; > + unsigned int row_shift; > > - if (!pdata->rows || !pdata->cols || !pdata->keymap) { > - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); > + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { > + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); > return -EINVAL; > } > > omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); > + row_shift = get_count_order(pdata->cols); > + keycodes = kzalloc((pdata->rows << row_shift) * sizeof(*keycodes), > + GFP_KERNEL); > input_dev = input_allocate_device(); > - if (!omap_kp || !input_dev) { > + if (!omap_kp || !keycodes || !input_dev) { > kfree(omap_kp); > + kfree(keycodes); I do not see where you freeing keycodes in case something else fails nor in omap_kp_remove(). But why don't you put keycodes at the end of struct omap_kp and allocate it in one shot? Thanks. -- Dmitry ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-18 6:01 ` Dmitry Torokhov 0 siblings, 0 replies; 36+ messages in thread From: Dmitry Torokhov @ 2010-12-18 6:01 UTC (permalink / raw) To: linux-arm-kernel Hi Janusz, On Fri, Dec 17, 2010 at 11:32:04PM +0100, Janusz Krzysztofik wrote: > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > defined macros, structures and inline functions. > > Convert omap-keypad driver to use those as well, as suggested by a > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > Looks nice, couple of comments. > > struct omap_kp_platform_data { > int rows; > int cols; > - int *keymap; > - unsigned int keymapsize; > + const struct matrix_keymap_data *keymap_data; > unsigned int rep:1; > unsigned long delay; > unsigned int dbounce:1; Since you are updating all boards maybe also change rep and dbounce to bool? > --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12-09 23:08:09.000000000 +0100 > +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-16 21:04:07.000000000 +0100 > @@ -65,7 +65,6 @@ struct omap_kp { > > static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); > > -static int *keymap; > static unsigned int *row_gpios; > static unsigned int *col_gpios; > > @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o > } > } > > -static inline int omap_kp_find_key(int col, int row) > -{ > - int i, key; > - > - key = KEY(col, row, 0); > - for (i = 0; keymap[i] != 0; i++) > - if ((keymap[i] & 0xff000000) == key) > - return keymap[i] & 0x00ffffff; > - return -1; > -} > - > static void omap_kp_tasklet(unsigned long data) > { > struct omap_kp *omap_kp_data = (struct omap_kp *) data; > + unsigned short *keycodes = omap_kp_data->input->keycode; > + unsigned int row_shift = get_count_order(omap_kp_data->cols); > unsigned char new_state[8], changed, key_down = 0; > int col, row; > int spurious = 0; > @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon > row, (new_state[col] & (1 << row)) ? > "pressed" : "released"); > #else > - key = omap_kp_find_key(col, row); > + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; > if (key < 0) { > printk(KERN_WARNING > "omap-keypad: Spurious key event %d-%d\n", > @@ -298,16 +288,22 @@ static int __devinit omap_kp_probe(struc > struct input_dev *input_dev; > struct omap_kp_platform_data *pdata = pdev->dev.platform_data; > int i, col_idx, row_idx, irq_idx, ret; > + unsigned short *keycodes; > + unsigned int row_shift; > > - if (!pdata->rows || !pdata->cols || !pdata->keymap) { > - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); > + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { > + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); > return -EINVAL; > } > > omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); > + row_shift = get_count_order(pdata->cols); > + keycodes = kzalloc((pdata->rows << row_shift) * sizeof(*keycodes), > + GFP_KERNEL); > input_dev = input_allocate_device(); > - if (!omap_kp || !input_dev) { > + if (!omap_kp || !keycodes || !input_dev) { > kfree(omap_kp); > + kfree(keycodes); I do not see where you freeing keycodes in case something else fails nor in omap_kp_remove(). But why don't you put keycodes at the end of struct omap_kp and allocate it in one shot? Thanks. -- Dmitry ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-18 6:01 ` Dmitry Torokhov @ 2010-12-18 11:31 ` Janusz Krzysztofik -1 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-18 11:31 UTC (permalink / raw) To: Dmitry Torokhov; +Cc: linux-omap, linux-input, Tony Lindgren, linux-arm-kernel Saturday 18 December 2010 07:01:04 Dmitry Torokhov napisał(a): > Hi Janusz, > > On Fri, Dec 17, 2010 at 11:32:04PM +0100, Janusz Krzysztofik wrote: > > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > > defined macros, structures and inline functions. > > > > Convert omap-keypad driver to use those as well, as suggested by a > > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > Looks nice, couple of comments. > > > struct omap_kp_platform_data { > > int rows; > > int cols; > > - int *keymap; > > - unsigned int keymapsize; > > + const struct matrix_keymap_data *keymap_data; > > unsigned int rep:1; > > unsigned long delay; > > unsigned int dbounce:1; > > Since you are updating all boards maybe also change rep and dbounce > to bool? OK. > > --- > > linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12- > >09 23:08:09.000000000 +0100 +++ > > linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-16 > > 21:04:07.000000000 +0100 @@ -65,7 +65,6 @@ struct omap_kp { > > > > static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); > > > > -static int *keymap; > > static unsigned int *row_gpios; > > static unsigned int *col_gpios; > > > > @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o > > } > > } > > > > -static inline int omap_kp_find_key(int col, int row) > > -{ > > - int i, key; > > - > > - key = KEY(col, row, 0); > > - for (i = 0; keymap[i] != 0; i++) > > - if ((keymap[i] & 0xff000000) == key) > > - return keymap[i] & 0x00ffffff; > > - return -1; > > -} > > - > > static void omap_kp_tasklet(unsigned long data) > > { > > struct omap_kp *omap_kp_data = (struct omap_kp *) data; > > + unsigned short *keycodes = omap_kp_data->input->keycode; > > + unsigned int row_shift = get_count_order(omap_kp_data->cols); > > unsigned char new_state[8], changed, key_down = 0; > > int col, row; > > int spurious = 0; > > @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon > > row, (new_state[col] & (1 << row)) ? > > "pressed" : "released"); > > #else > > - key = omap_kp_find_key(col, row); > > + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; > > if (key < 0) { > > printk(KERN_WARNING > > "omap-keypad: Spurious key event %d-%d\n", > > @@ -298,16 +288,22 @@ static int __devinit omap_kp_probe(struc > > struct input_dev *input_dev; > > struct omap_kp_platform_data *pdata = pdev->dev.platform_data; > > int i, col_idx, row_idx, irq_idx, ret; > > + unsigned short *keycodes; > > + unsigned int row_shift; > > > > - if (!pdata->rows || !pdata->cols || !pdata->keymap) { > > - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); > > + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { > > + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); > > return -EINVAL; > > } > > > > omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); > > + row_shift = get_count_order(pdata->cols); > > + keycodes = kzalloc((pdata->rows << row_shift) * > > sizeof(*keycodes), + GFP_KERNEL); > > input_dev = input_allocate_device(); > > - if (!omap_kp || !input_dev) { > > + if (!omap_kp || !keycodes || !input_dev) { > > kfree(omap_kp); > > + kfree(keycodes); > > I do not see where you freeing keycodes in case something else fails > nor in omap_kp_remove(). Yeah, I missed that, thanks. > But why don't you put keycodes at the end of > struct omap_kp and allocate it in one shot? Perhaps because of blindly following a matrix_keypad.c pattern ;-). I'll do as you suggest, thank you. Janusz -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-18 11:31 ` Janusz Krzysztofik 0 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-18 11:31 UTC (permalink / raw) To: linux-arm-kernel Saturday 18 December 2010 07:01:04 Dmitry Torokhov napisa?(a): > Hi Janusz, > > On Fri, Dec 17, 2010 at 11:32:04PM +0100, Janusz Krzysztofik wrote: > > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > > defined macros, structures and inline functions. > > > > Convert omap-keypad driver to use those as well, as suggested by a > > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > Looks nice, couple of comments. > > > struct omap_kp_platform_data { > > int rows; > > int cols; > > - int *keymap; > > - unsigned int keymapsize; > > + const struct matrix_keymap_data *keymap_data; > > unsigned int rep:1; > > unsigned long delay; > > unsigned int dbounce:1; > > Since you are updating all boards maybe also change rep and dbounce > to bool? OK. > > --- > > linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12- > >09 23:08:09.000000000 +0100 +++ > > linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-16 > > 21:04:07.000000000 +0100 @@ -65,7 +65,6 @@ struct omap_kp { > > > > static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); > > > > -static int *keymap; > > static unsigned int *row_gpios; > > static unsigned int *col_gpios; > > > > @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o > > } > > } > > > > -static inline int omap_kp_find_key(int col, int row) > > -{ > > - int i, key; > > - > > - key = KEY(col, row, 0); > > - for (i = 0; keymap[i] != 0; i++) > > - if ((keymap[i] & 0xff000000) == key) > > - return keymap[i] & 0x00ffffff; > > - return -1; > > -} > > - > > static void omap_kp_tasklet(unsigned long data) > > { > > struct omap_kp *omap_kp_data = (struct omap_kp *) data; > > + unsigned short *keycodes = omap_kp_data->input->keycode; > > + unsigned int row_shift = get_count_order(omap_kp_data->cols); > > unsigned char new_state[8], changed, key_down = 0; > > int col, row; > > int spurious = 0; > > @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon > > row, (new_state[col] & (1 << row)) ? > > "pressed" : "released"); > > #else > > - key = omap_kp_find_key(col, row); > > + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; > > if (key < 0) { > > printk(KERN_WARNING > > "omap-keypad: Spurious key event %d-%d\n", > > @@ -298,16 +288,22 @@ static int __devinit omap_kp_probe(struc > > struct input_dev *input_dev; > > struct omap_kp_platform_data *pdata = pdev->dev.platform_data; > > int i, col_idx, row_idx, irq_idx, ret; > > + unsigned short *keycodes; > > + unsigned int row_shift; > > > > - if (!pdata->rows || !pdata->cols || !pdata->keymap) { > > - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); > > + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { > > + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); > > return -EINVAL; > > } > > > > omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); > > + row_shift = get_count_order(pdata->cols); > > + keycodes = kzalloc((pdata->rows << row_shift) * > > sizeof(*keycodes), + GFP_KERNEL); > > input_dev = input_allocate_device(); > > - if (!omap_kp || !input_dev) { > > + if (!omap_kp || !keycodes || !input_dev) { > > kfree(omap_kp); > > + kfree(keycodes); > > I do not see where you freeing keycodes in case something else fails > nor in omap_kp_remove(). Yeah, I missed that, thanks. > But why don't you put keycodes at the end of > struct omap_kp and allocate it in one shot? Perhaps because of blindly following a matrix_keypad.c pattern ;-). I'll do as you suggest, thank you. Janusz ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-18 6:01 ` Dmitry Torokhov @ 2010-12-18 15:39 ` Janusz Krzysztofik -1 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-18 15:39 UTC (permalink / raw) To: Dmitry Torokhov; +Cc: linux-omap, linux-input, Tony Lindgren, linux-arm-kernel Most keypad drivers make use of the <linux/input/matrix_keypad.h> defined macros, structures and inline functions. Convert omap-keypad driver to use those as well, as suggested by a compile time warning, hardcoded into the OMAP <palt/keypad.h>. Created against linux-2.6.37-rc5. Tested on Amstrad Delta. Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to board-h4. Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> --- v1 -> v2 changes, both requested by Dmitry Torokhov (thanks!): - while updating all boards, change rep and dbounce to bool, - put keycodes at the end of struct omap_kp and allocate it in one shot. arch/arm/mach-omap1/board-ams-delta.c | 128 +++++++++++++++---------------- arch/arm/mach-omap1/board-fsample.c | 65 ++++++++------- arch/arm/mach-omap1/board-h2.c | 73 +++++++++-------- arch/arm/mach-omap1/board-h3.c | 73 +++++++++-------- arch/arm/mach-omap1/board-htcherald.c | 94 +++++++++++----------- arch/arm/mach-omap1/board-innovator.c | 19 ++-- arch/arm/mach-omap1/board-nokia770.c | 27 +++--- arch/arm/mach-omap1/board-osk.c | 19 ++-- arch/arm/mach-omap1/board-palmte.c | 26 +++--- arch/arm/mach-omap1/board-palmtt.c | 26 +++--- arch/arm/mach-omap1/board-palmz71.c | 28 +++--- arch/arm/mach-omap1/board-perseus2.c | 67 ++++++++-------- arch/arm/mach-omap1/board-sx1.c | 55 +++++++------ arch/arm/mach-omap2/board-h4.c | 61 +++++++------- arch/arm/plat-omap/include/plat/keypad.h | 35 ++++---- drivers/input/keyboard/omap-keypad.c | 35 +++----- include/linux/input/matrix_keypad.h | 2 17 files changed, 440 insertions(+), 393 deletions(-) --- linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h.orig 2010-12-09 23:07:38.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h 2010-12-18 13:11:05.000000000 +0100 @@ -10,16 +10,18 @@ #ifndef ASMARM_ARCH_KEYPAD_H #define ASMARM_ARCH_KEYPAD_H -#warning: Please update the board to use matrix_keypad.h instead +#ifndef CONFIG_ARCH_OMAP1 +#warning Please update the board to use matrix-keypad driver +#endif +#include <linux/input/matrix_keypad.h> struct omap_kp_platform_data { int rows; int cols; - int *keymap; - unsigned int keymapsize; - unsigned int rep:1; + const struct matrix_keymap_data *keymap_data; + bool rep; unsigned long delay; - unsigned int dbounce:1; + bool dbounce; /* specific to OMAP242x*/ unsigned int *row_gpios; unsigned int *col_gpios; @@ -28,18 +30,21 @@ struct omap_kp_platform_data { /* Group (0..3) -- when multiple keys are pressed, only the * keys pressed in the same group are considered as pressed. This is * in order to workaround certain crappy HW designs that produce ghost - * keypresses. */ -#define GROUP_0 (0 << 16) -#define GROUP_1 (1 << 16) -#define GROUP_2 (2 << 16) -#define GROUP_3 (3 << 16) + * keypresses. Two free bits, not used by neither row/col nor keynum, + * must be available for use as group bits. The below GROUP_SHIFT + * macro definition is based on some prior knowledge of the + * matrix_keypad defined KEY() macro internals. + */ +#define GROUP_SHIFT 14 +#define GROUP_0 (0 << GROUP_SHIFT) +#define GROUP_1 (1 << GROUP_SHIFT) +#define GROUP_2 (2 << GROUP_SHIFT) +#define GROUP_3 (3 << GROUP_SHIFT) #define GROUP_MASK GROUP_3 +#if KEY_MAX & GROUP_MASK +#error Group bits in conflict with keynum bits +#endif -#define KEY_PERSISTENT 0x00800000 -#define KEYNUM_MASK 0x00EFFFFF -#define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val)) -#define PERSISTENT_KEY(col, row) (((col) << 28) | ((row) << 24) | \ - KEY_PERSISTENT) #endif --- linux-2.6.37-rc5/include/linux/input/matrix_keypad.h.orig 2010-12-09 23:09:05.000000000 +0100 +++ linux-2.6.37-rc5/include/linux/input/matrix_keypad.h 2010-12-18 13:10:05.000000000 +0100 @@ -9,7 +9,7 @@ #define KEY(row, col, val) ((((row) & (MATRIX_MAX_ROWS - 1)) << 24) |\ (((col) & (MATRIX_MAX_COLS - 1)) << 16) |\ - (val & 0xffff)) + ((val) & 0xffff)) #define KEY_ROW(k) (((k) >> 24) & 0xff) #define KEY_COL(k) (((k) >> 16) & 0xff) --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12-09 23:08:09.000000000 +0100 +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-18 13:24:16.000000000 +0100 @@ -65,7 +65,6 @@ struct omap_kp { static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); -static int *keymap; static unsigned int *row_gpios; static unsigned int *col_gpios; @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o } } -static inline int omap_kp_find_key(int col, int row) -{ - int i, key; - - key = KEY(col, row, 0); - for (i = 0; keymap[i] != 0; i++) - if ((keymap[i] & 0xff000000) == key) - return keymap[i] & 0x00ffffff; - return -1; -} - static void omap_kp_tasklet(unsigned long data) { struct omap_kp *omap_kp_data = (struct omap_kp *) data; + unsigned short *keycodes = omap_kp_data->input->keycode; + unsigned int row_shift = get_count_order(omap_kp_data->cols); unsigned char new_state[8], changed, key_down = 0; int col, row; int spurious = 0; @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon row, (new_state[col] & (1 << row)) ? "pressed" : "released"); #else - key = omap_kp_find_key(col, row); + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; if (key < 0) { printk(KERN_WARNING "omap-keypad: Spurious key event %d-%d\n", @@ -298,13 +288,18 @@ static int __devinit omap_kp_probe(struc struct input_dev *input_dev; struct omap_kp_platform_data *pdata = pdev->dev.platform_data; int i, col_idx, row_idx, irq_idx, ret; + unsigned int row_shift, keycodemax; - if (!pdata->rows || !pdata->cols || !pdata->keymap) { - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); return -EINVAL; } - omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); + row_shift = get_count_order(pdata->cols); + keycodemax = pdata->rows << row_shift; + + omap_kp = kzalloc(sizeof(struct omap_kp) + + keycodemax * sizeof(unsigned short), GFP_KERNEL); input_dev = input_allocate_device(); if (!omap_kp || !input_dev) { kfree(omap_kp); @@ -320,7 +315,9 @@ static int __devinit omap_kp_probe(struc if (!cpu_is_omap24xx()) omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); - keymap = pdata->keymap; + input_dev->keycode = &omap_kp[1]; + input_dev->keycodesize = sizeof(unsigned short); + input_dev->keycodemax = keycodemax; if (pdata->rep) __set_bit(EV_REP, input_dev->evbit); @@ -374,8 +371,8 @@ static int __devinit omap_kp_probe(struc /* setup input device */ __set_bit(EV_KEY, input_dev->evbit); - for (i = 0; keymap[i] != 0; i++) - __set_bit(keymap[i] & KEY_MAX, input_dev->keybit); + matrix_keypad_build_keymap(pdata->keymap_data, row_shift, + input_dev->keycode, input_dev->keybit); input_dev->name = "omap-keypad"; input_dev->phys = "omap-keypad/input0"; input_dev->dev.parent = &pdev->dev; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-18 16:23:29.000000000 +0100 @@ -46,81 +46,79 @@ static u16 ams_delta_latch2_reg; static int ams_delta_keymap[] = { KEY(0, 0, KEY_F1), /* Advert */ - KEY(3, 0, KEY_COFFEE), /* Games */ - KEY(2, 0, KEY_QUESTION), /* Directory */ - KEY(3, 2, KEY_CONNECT), /* Internet */ - KEY(2, 1, KEY_SHOP), /* Services */ + KEY(0, 3, KEY_COFFEE), /* Games */ + KEY(0, 2, KEY_QUESTION), /* Directory */ + KEY(2, 3, KEY_CONNECT), /* Internet */ + KEY(1, 2, KEY_SHOP), /* Services */ KEY(1, 1, KEY_PHONE), /* VoiceMail */ - KEY(1, 0, KEY_DELETE), /* Delete */ + KEY(0, 1, KEY_DELETE), /* Delete */ KEY(2, 2, KEY_PLAY), /* Play */ - KEY(0, 1, KEY_PAGEUP), /* Up */ - KEY(3, 1, KEY_PAGEDOWN), /* Down */ - KEY(0, 2, KEY_EMAIL), /* ReadEmail */ - KEY(1, 2, KEY_STOP), /* Stop */ + KEY(1, 0, KEY_PAGEUP), /* Up */ + KEY(1, 3, KEY_PAGEDOWN), /* Down */ + KEY(2, 0, KEY_EMAIL), /* ReadEmail */ + KEY(2, 1, KEY_STOP), /* Stop */ /* Numeric keypad portion */ - KEY(7, 0, KEY_KP1), - KEY(6, 0, KEY_KP2), - KEY(5, 0, KEY_KP3), - KEY(7, 1, KEY_KP4), - KEY(6, 1, KEY_KP5), - KEY(5, 1, KEY_KP6), - KEY(7, 2, KEY_KP7), - KEY(6, 2, KEY_KP8), - KEY(5, 2, KEY_KP9), - KEY(6, 3, KEY_KP0), - KEY(7, 3, KEY_KPASTERISK), - KEY(5, 3, KEY_KPDOT), /* # key */ - KEY(2, 7, KEY_NUMLOCK), /* Mute */ - KEY(1, 7, KEY_KPMINUS), /* Recall */ - KEY(1, 6, KEY_KPPLUS), /* Redial */ - KEY(6, 7, KEY_KPSLASH), /* Handsfree */ - KEY(0, 6, KEY_ENTER), /* Video */ - - KEY(4, 7, KEY_CAMERA), /* Photo */ - - KEY(4, 0, KEY_F2), /* Home */ - KEY(4, 1, KEY_F3), /* Office */ - KEY(4, 2, KEY_F4), /* Mobile */ + KEY(0, 7, KEY_KP1), + KEY(0, 6, KEY_KP2), + KEY(0, 5, KEY_KP3), + KEY(1, 7, KEY_KP4), + KEY(1, 6, KEY_KP5), + KEY(1, 5, KEY_KP6), + KEY(2, 7, KEY_KP7), + KEY(2, 6, KEY_KP8), + KEY(2, 5, KEY_KP9), + KEY(3, 6, KEY_KP0), + KEY(3, 7, KEY_KPASTERISK), + KEY(3, 5, KEY_KPDOT), /* # key */ + KEY(7, 2, KEY_NUMLOCK), /* Mute */ + KEY(7, 1, KEY_KPMINUS), /* Recall */ + KEY(6, 1, KEY_KPPLUS), /* Redial */ + KEY(7, 6, KEY_KPSLASH), /* Handsfree */ + KEY(6, 0, KEY_ENTER), /* Video */ + + KEY(7, 4, KEY_CAMERA), /* Photo */ + + KEY(0, 4, KEY_F2), /* Home */ + KEY(1, 4, KEY_F3), /* Office */ + KEY(2, 4, KEY_F4), /* Mobile */ KEY(7, 7, KEY_F5), /* SMS */ - KEY(5, 7, KEY_F6), /* Email */ + KEY(7, 5, KEY_F6), /* Email */ /* QWERTY portion of keypad */ - KEY(4, 3, KEY_Q), + KEY(3, 4, KEY_Q), KEY(3, 3, KEY_W), - KEY(2, 3, KEY_E), - KEY(1, 3, KEY_R), - KEY(0, 3, KEY_T), - KEY(7, 4, KEY_Y), - KEY(6, 4, KEY_U), - KEY(5, 4, KEY_I), + KEY(3, 2, KEY_E), + KEY(3, 1, KEY_R), + KEY(3, 0, KEY_T), + KEY(4, 7, KEY_Y), + KEY(4, 6, KEY_U), + KEY(4, 5, KEY_I), KEY(4, 4, KEY_O), - KEY(3, 4, KEY_P), + KEY(4, 3, KEY_P), - KEY(2, 4, KEY_A), - KEY(1, 4, KEY_S), - KEY(0, 4, KEY_D), - KEY(7, 5, KEY_F), - KEY(6, 5, KEY_G), + KEY(4, 2, KEY_A), + KEY(4, 1, KEY_S), + KEY(4, 0, KEY_D), + KEY(5, 7, KEY_F), + KEY(5, 6, KEY_G), KEY(5, 5, KEY_H), - KEY(4, 5, KEY_J), - KEY(3, 5, KEY_K), - KEY(2, 5, KEY_L), - - KEY(1, 5, KEY_Z), - KEY(0, 5, KEY_X), - KEY(7, 6, KEY_C), + KEY(5, 4, KEY_J), + KEY(5, 3, KEY_K), + KEY(5, 2, KEY_L), + + KEY(5, 1, KEY_Z), + KEY(5, 0, KEY_X), + KEY(6, 7, KEY_C), KEY(6, 6, KEY_V), - KEY(5, 6, KEY_B), - KEY(4, 6, KEY_N), - KEY(3, 6, KEY_M), - KEY(2, 6, KEY_SPACE), + KEY(6, 5, KEY_B), + KEY(6, 4, KEY_N), + KEY(6, 3, KEY_M), + KEY(6, 2, KEY_SPACE), - KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */ - KEY(3, 7, KEY_LEFTCTRL), /* Vol down */ - - 0 + KEY(7, 0, KEY_LEFTSHIFT), /* Vol up */ + KEY(7, 3, KEY_LEFTCTRL), /* Vol down */ }; void ams_delta_latch1_write(u8 mask, u8 value) @@ -189,11 +187,15 @@ static struct resource ams_delta_kp_reso }, }; +static const struct matrix_keymap_data ams_delta_keymap_data = { + .keymap = ams_delta_keymap, + .keymap_size = ARRAY_SIZE(ams_delta_keymap), +}; + static struct omap_kp_platform_data ams_delta_kp_data = { .rows = 8, .cols = 8, - .keymap = ams_delta_keymap, - .keymapsize = ARRAY_SIZE(ams_delta_keymap), + .keymap_data = &ams_delta_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c 2010-12-18 13:10:05.000000000 +0100 @@ -70,35 +70,34 @@ fsample_cpld_write(0xf0 | ((bit) & 15), FSAMPLE_CPLD_SET_CLR) static int fsample_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -253,11 +252,15 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data fsample_keymap_data = { + .keymap = fsample_keymap, + .keymap_size = ARRAY_SIZE(fsample_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = fsample_keymap, - .keymapsize = ARRAY_SIZE(fsample_keymap), + .keymap_data = &fsample_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c 2010-12-18 16:25:15.000000000 +0100 @@ -54,41 +54,40 @@ static int h2_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; static struct mtd_partition h2_nor_partitions[] = { @@ -270,14 +269,18 @@ static struct resource h2_kp_resources[] }, }; +static const struct matrix_keymap_data h2_keymap_data = { + .keymap = h2_keymap, + .keymap_size = ARRAY_SIZE(h2_keymap), +}; + static struct omap_kp_platform_data h2_kp_data = { .rows = 8, .cols = 8, - .keymap = h2_keymap, - .keymapsize = ARRAY_SIZE(h2_keymap), - .rep = 1, + .keymap_data = &h2_keymap_data, + .rep = true, .delay = 9, - .dbounce = 1, + .dbounce = true, }; static struct platform_device h2_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c 2010-12-18 16:25:26.000000000 +0100 @@ -58,41 +58,40 @@ static int h3_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; @@ -305,14 +304,18 @@ static struct resource h3_kp_resources[] }, }; +static const struct matrix_keymap_data h3_keymap_data = { + .keymap = h3_keymap, + .keymap_size = ARRAY_SIZE(h3_keymap), +}; + static struct omap_kp_platform_data h3_kp_data = { .rows = 8, .cols = 8, - .keymap = h3_keymap, - .keymapsize = ARRAY_SIZE(h3_keymap), - .rep = 1, + .keymap_data = &h3_keymap_data, + .rep = true, .delay = 9, - .dbounce = 1, + .dbounce = true, }; static struct platform_device h3_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c 2010-12-18 16:25:42.000000000 +0100 @@ -182,62 +182,66 @@ static int htc_herald_keymap[] = { KEY(0, 0, KEY_RECORD), /* Mail button */ - KEY(0, 1, KEY_CAMERA), /* Camera */ - KEY(0, 2, KEY_PHONE), /* Send key */ - KEY(0, 3, KEY_VOLUMEUP), /* Volume up */ - KEY(0, 4, KEY_F2), /* Right bar (landscape) */ - KEY(0, 5, KEY_MAIL), /* Win key (portrait) */ - KEY(0, 6, KEY_DIRECTORY), /* Right bar (protrait) */ - KEY(1, 0, KEY_LEFTCTRL), /* Windows key */ + KEY(1, 0, KEY_CAMERA), /* Camera */ + KEY(2, 0, KEY_PHONE), /* Send key */ + KEY(3, 0, KEY_VOLUMEUP), /* Volume up */ + KEY(4, 0, KEY_F2), /* Right bar (landscape) */ + KEY(5, 0, KEY_MAIL), /* Win key (portrait) */ + KEY(6, 0, KEY_DIRECTORY), /* Right bar (protrait) */ + KEY(0, 1, KEY_LEFTCTRL), /* Windows key */ KEY(1, 1, KEY_COMMA), - KEY(1, 2, KEY_M), - KEY(1, 3, KEY_K), - KEY(1, 4, KEY_SLASH), /* OK key */ - KEY(1, 5, KEY_I), - KEY(1, 6, KEY_U), - KEY(2, 0, KEY_LEFTALT), - KEY(2, 1, KEY_TAB), + KEY(2, 1, KEY_M), + KEY(3, 1, KEY_K), + KEY(4, 1, KEY_SLASH), /* OK key */ + KEY(5, 1, KEY_I), + KEY(6, 1, KEY_U), + KEY(0, 2, KEY_LEFTALT), + KEY(1, 2, KEY_TAB), KEY(2, 2, KEY_N), - KEY(2, 3, KEY_J), - KEY(2, 4, KEY_ENTER), - KEY(2, 5, KEY_H), - KEY(2, 6, KEY_Y), - KEY(3, 0, KEY_SPACE), - KEY(3, 1, KEY_L), - KEY(3, 2, KEY_B), + KEY(3, 2, KEY_J), + KEY(4, 2, KEY_ENTER), + KEY(5, 2, KEY_H), + KEY(6, 2, KEY_Y), + KEY(0, 3, KEY_SPACE), + KEY(1, 3, KEY_L), + KEY(2, 3, KEY_B), KEY(3, 3, KEY_V), - KEY(3, 4, KEY_BACKSPACE), - KEY(3, 5, KEY_G), - KEY(3, 6, KEY_T), - KEY(4, 0, KEY_CAPSLOCK), /* Shift */ - KEY(4, 1, KEY_C), - KEY(4, 2, KEY_F), - KEY(4, 3, KEY_R), + KEY(4, 3, KEY_BACKSPACE), + KEY(5, 3, KEY_G), + KEY(6, 3, KEY_T), + KEY(0, 4, KEY_CAPSLOCK), /* Shift */ + KEY(1, 4, KEY_C), + KEY(2, 4, KEY_F), + KEY(3, 4, KEY_R), KEY(4, 4, KEY_O), - KEY(4, 5, KEY_E), - KEY(4, 6, KEY_D), - KEY(5, 0, KEY_X), - KEY(5, 1, KEY_Z), - KEY(5, 2, KEY_S), - KEY(5, 3, KEY_W), - KEY(5, 4, KEY_P), + KEY(5, 4, KEY_E), + KEY(6, 4, KEY_D), + KEY(0, 5, KEY_X), + KEY(1, 5, KEY_Z), + KEY(2, 5, KEY_S), + KEY(3, 5, KEY_W), + KEY(4, 5, KEY_P), KEY(5, 5, KEY_Q), - KEY(5, 6, KEY_A), - KEY(6, 0, KEY_CONNECT), /* Voice button */ - KEY(6, 2, KEY_CANCEL), /* End key */ - KEY(6, 3, KEY_VOLUMEDOWN), /* Volume down */ - KEY(6, 4, KEY_F1), /* Left bar (landscape) */ - KEY(6, 5, KEY_WWW), /* OK button (portrait) */ + KEY(6, 5, KEY_A), + KEY(0, 6, KEY_CONNECT), /* Voice button */ + KEY(2, 6, KEY_CANCEL), /* End key */ + KEY(3, 6, KEY_VOLUMEDOWN), /* Volume down */ + KEY(4, 6, KEY_F1), /* Left bar (landscape) */ + KEY(5, 6, KEY_WWW), /* OK button (portrait) */ KEY(6, 6, KEY_CALENDAR), /* Left bar (portrait) */ - 0 +}; + +static const struct matrix_keymap_data htc_herald_keymap_data = { + .keymap = htc_herald_keymap, + .keymap_size = ARRAY_SIZE(htc_herald_keymap), }; struct omap_kp_platform_data htcherald_kp_data = { .rows = 7, .cols = 7, .delay = 20, - .rep = 1, - .keymap = htc_herald_keymap, + .rep = true, + .keymap_data = &htc_herald_keymap_data, }; static struct resource kp_resources[] = { @@ -278,7 +282,7 @@ static struct gpio_keys_button herald_gp static struct gpio_keys_platform_data herald_gpio_keys_data = { .buttons = herald_gpio_keys_table, .nbuttons = ARRAY_SIZE(herald_gpio_keys_table), - .rep = 1, + .rep = true, }; static struct platform_device herald_gpiokeys_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c 2010-12-18 13:10:05.000000000 +0100 @@ -46,15 +46,14 @@ static int innovator_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 3, KEY_DOWN), + KEY(3, 0, KEY_DOWN), KEY(1, 1, KEY_F2), - KEY(1, 2, KEY_RIGHT), - KEY(2, 0, KEY_F3), - KEY(2, 1, KEY_F4), + KEY(2, 1, KEY_RIGHT), + KEY(0, 2, KEY_F3), + KEY(1, 2, KEY_F4), KEY(2, 2, KEY_UP), - KEY(3, 2, KEY_ENTER), + KEY(2, 3, KEY_ENTER), KEY(3, 3, KEY_LEFT), - 0 }; static struct mtd_partition innovator_partitions[] = { @@ -126,11 +125,15 @@ static struct resource innovator_kp_reso }, }; +static const struct matrix_keymap_data innovator_keymap_data = { + .keymap = innovator_keymap, + .keymap_size = ARRAY_SIZE(innovator_keymap), +}; + static struct omap_kp_platform_data innovator_kp_data = { .rows = 8, .cols = 8, - .keymap = innovator_keymap, - .keymapsize = ARRAY_SIZE(innovator_keymap), + .keymap_data = &innovator_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c 2010-12-18 13:10:05.000000000 +0100 @@ -57,18 +57,17 @@ static void __init omap_nokia770_init_ir } static int nokia770_keymap[] = { - KEY(0, 1, GROUP_0 | KEY_UP), - KEY(0, 2, GROUP_1 | KEY_F5), - KEY(1, 0, GROUP_0 | KEY_LEFT), + KEY(1, 0, GROUP_0 | KEY_UP), + KEY(2, 0, GROUP_1 | KEY_F5), + KEY(0, 1, GROUP_0 | KEY_LEFT), KEY(1, 1, GROUP_0 | KEY_ENTER), - KEY(1, 2, GROUP_0 | KEY_RIGHT), - KEY(2, 0, GROUP_1 | KEY_ESC), - KEY(2, 1, GROUP_0 | KEY_DOWN), + KEY(2, 1, GROUP_0 | KEY_RIGHT), + KEY(0, 2, GROUP_1 | KEY_ESC), + KEY(1, 2, GROUP_0 | KEY_DOWN), KEY(2, 2, GROUP_1 | KEY_F4), - KEY(3, 0, GROUP_2 | KEY_F7), - KEY(3, 1, GROUP_2 | KEY_F8), - KEY(3, 2, GROUP_2 | KEY_F6), - 0 + KEY(0, 3, GROUP_2 | KEY_F7), + KEY(1, 3, GROUP_2 | KEY_F8), + KEY(2, 3, GROUP_2 | KEY_F6), }; static struct resource nokia770_kp_resources[] = { @@ -79,11 +78,15 @@ static struct resource nokia770_kp_resou }, }; +static const struct matrix_keymap_data nokia770_keymap_data = { + .keymap = nokia770_keymap, + .keymap_size = ARRAY_SIZE(nokia770_keymap), +}; + static struct omap_kp_platform_data nokia770_kp_data = { .rows = 8, .cols = 8, - .keymap = nokia770_keymap, - .keymapsize = ARRAY_SIZE(nokia770_keymap), + .keymap_data = &nokia770_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c 2010-12-18 13:10:05.000000000 +0100 @@ -341,22 +341,25 @@ static struct i2c_board_info __initdata static const int osk_keymap[] = { /* KEY(col, row, code) */ KEY(0, 0, KEY_F1), /* SW4 */ - KEY(0, 3, KEY_UP), /* (sw2/up) */ + KEY(3, 0, KEY_UP), /* (sw2/up) */ KEY(1, 1, KEY_LEFTCTRL), /* SW5 */ - KEY(1, 2, KEY_LEFT), /* (sw2/left) */ - KEY(2, 0, KEY_SPACE), /* SW3 */ - KEY(2, 1, KEY_ESC), /* SW6 */ + KEY(2, 1, KEY_LEFT), /* (sw2/left) */ + KEY(0, 2, KEY_SPACE), /* SW3 */ + KEY(1, 2, KEY_ESC), /* SW6 */ KEY(2, 2, KEY_DOWN), /* (sw2/down) */ - KEY(3, 2, KEY_ENTER), /* (sw2/select) */ + KEY(2, 3, KEY_ENTER), /* (sw2/select) */ KEY(3, 3, KEY_RIGHT), /* (sw2/right) */ - 0 +}; + +static const struct matrix_keymap_data osk_keymap_data = { + .keymap = osk_keymap, + .keymap_size = ARRAY_SIZE(osk_keymap), }; static struct omap_kp_platform_data osk_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) osk_keymap, - .keymapsize = ARRAY_SIZE(osk_keymap), + .keymap_data = &osk_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c 2010-12-18 16:26:18.000000000 +0100 @@ -67,23 +67,27 @@ static void __init omap_palmte_init_irq( static const int palmte_keymap[] = { KEY(0, 0, KEY_F1), /* Calendar */ - KEY(0, 1, KEY_F2), /* Contacts */ - KEY(0, 2, KEY_F3), /* Tasks List */ - KEY(0, 3, KEY_F4), /* Note Pad */ - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), /* Contacts */ + KEY(2, 0, KEY_F3), /* Tasks List */ + KEY(3, 0, KEY_F4), /* Note Pad */ + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), +}; + +static const struct matrix_keymap_data palmte_keymap_data = { + .keymap = palmte_keymap, + .keymap_size = ARRAY_SIZE(palmte_keymap), }; static struct omap_kp_platform_data palmte_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) palmte_keymap, - .rep = 1, + .keymap_data = &palmte_keymap_data, + .rep = true, .delay = 12, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c 2010-12-18 13:10:05.000000000 +0100 @@ -53,17 +53,16 @@ static int palmtt_keymap[] = { KEY(0, 0, KEY_ESC), - KEY(0, 1, KEY_SPACE), - KEY(0, 2, KEY_LEFTCTRL), - KEY(0, 3, KEY_TAB), - KEY(0, 4, KEY_ENTER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_SPACE), + KEY(2, 0, KEY_LEFTCTRL), + KEY(3, 0, KEY_TAB), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(2, 0, KEY_SLEEP), - KEY(2, 4, KEY_Y), - 0 + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(0, 2, KEY_SLEEP), + KEY(4, 2, KEY_Y), }; static struct mtd_partition palmtt_partitions[] = { @@ -136,10 +135,15 @@ static struct resource palmtt_kp_resourc }, }; +static const struct matrix_keymap_data palmtt_keymap_data = { + .keymap = palmtt_keymap, + .keymap_size = ARRAY_SIZE(palmtt_keymap), +}; + static struct omap_kp_platform_data palmtt_kp_data = { .rows = 6, .cols = 3, - .keymap = palmtt_keymap, + .keymap_data = &palmtt_keymap_data, }; static struct platform_device palmtt_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c 2010-12-18 16:26:26.000000000 +0100 @@ -66,24 +66,28 @@ omap_palmz71_init_irq(void) static int palmz71_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 1, KEY_F2), - KEY(0, 2, KEY_F3), - KEY(0, 3, KEY_F4), - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), + KEY(2, 0, KEY_F3), + KEY(3, 0, KEY_F4), + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - KEY(2, 0, KEY_CAMERA), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), + KEY(0, 2, KEY_CAMERA), +}; + +static const struct matrix_keymap_data palmz71_keymap_data = { + .keymap = palmz71_keymap, + .keymap_size = ARRAY_SIZE(palmz71_keymap), }; static struct omap_kp_platform_data palmz71_kp_data = { .rows = 8, .cols = 8, - .keymap = palmz71_keymap, - .rep = 1, + .keymap_data = &palmz71_keymap_data, + .rep = true, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c 2010-12-18 16:26:33.000000000 +0100 @@ -37,35 +37,34 @@ #include <plat/board.h> static int p2_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -211,13 +210,17 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data p2_keymap_data = { + .keymap = p2_keymap, + .keymap_size = ARRAY_SIZE(p2_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = p2_keymap, - .keymapsize = ARRAY_SIZE(p2_keymap), + .keymap_data = &p2_keymap_data, .delay = 4, - .dbounce = 1, + .dbounce = true, }; static struct platform_device kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c 2010-12-18 13:10:05.000000000 +0100 @@ -165,35 +165,34 @@ EXPORT_SYMBOL(sx1_setusbpower); /*----------- Keypad -------------------------*/ static int sx1_keymap[] = { - KEY(5, 3, GROUP_0 | 117), /* camera Qt::Key_F17 */ - KEY(0, 4, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ - KEY(1, 4, GROUP_2 | 114), /* voice memo */ - KEY(2, 4, GROUP_3 | 114), /* voice memo */ + KEY(3, 5, GROUP_0 | 117), /* camera Qt::Key_F17 */ + KEY(4, 0, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ + KEY(4, 1, GROUP_2 | 114), /* voice memo */ + KEY(4, 2, GROUP_3 | 114), /* voice memo */ KEY(0, 0, GROUP_1 | KEY_F12), /* red button Qt::Key_Hangup */ - KEY(4, 3, GROUP_1 | KEY_LEFT), - KEY(2, 3, GROUP_1 | KEY_DOWN), - KEY(1, 3, GROUP_1 | KEY_RIGHT), - KEY(0, 3, GROUP_1 | KEY_UP), + KEY(3, 4, GROUP_1 | KEY_LEFT), + KEY(3, 2, GROUP_1 | KEY_DOWN), + KEY(3, 1, GROUP_1 | KEY_RIGHT), + KEY(3, 0, GROUP_1 | KEY_UP), KEY(3, 3, GROUP_1 | KEY_POWER), /* joystick press or Qt::Key_Select */ - KEY(5, 0, GROUP_1 | KEY_1), - KEY(4, 0, GROUP_1 | KEY_2), - KEY(3, 0, GROUP_1 | KEY_3), - KEY(3, 4, GROUP_1 | KEY_4), + KEY(0, 5, GROUP_1 | KEY_1), + KEY(0, 4, GROUP_1 | KEY_2), + KEY(0, 3, GROUP_1 | KEY_3), + KEY(4, 3, GROUP_1 | KEY_4), KEY(4, 4, GROUP_1 | KEY_5), - KEY(5, 4, GROUP_1 | KEY_KPASTERISK),/* "*" */ - KEY(4, 1, GROUP_1 | KEY_6), - KEY(5, 1, GROUP_1 | KEY_7), - KEY(3, 1, GROUP_1 | KEY_8), - KEY(3, 2, GROUP_1 | KEY_9), - KEY(5, 2, GROUP_1 | KEY_0), - KEY(4, 2, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ - KEY(0, 1, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ - KEY(1, 2, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ + KEY(4, 5, GROUP_1 | KEY_KPASTERISK),/* "*" */ + KEY(1, 4, GROUP_1 | KEY_6), + KEY(1, 5, GROUP_1 | KEY_7), + KEY(1, 3, GROUP_1 | KEY_8), + KEY(2, 3, GROUP_1 | KEY_9), + KEY(2, 5, GROUP_1 | KEY_0), + KEY(2, 4, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ + KEY(1, 0, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ + KEY(2, 1, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ KEY(2, 2, GROUP_1 | KEY_F8), /* right soft Qt::Key_Back */ - KEY(2, 1, GROUP_1 | KEY_LEFTSHIFT), /* shift */ + KEY(1, 2, GROUP_1 | KEY_LEFTSHIFT), /* shift */ KEY(1, 1, GROUP_1 | KEY_BACKSPACE), /* C (clear) */ - KEY(0, 2, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ - 0 + KEY(2, 0, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ }; static struct resource sx1_kp_resources[] = { @@ -204,11 +203,15 @@ static struct resource sx1_kp_resources[ }, }; +static const struct matrix_keymap_data sx1_keymap_data = { + .keymap = sx1_keymap, + .keymap_size = ARRAY_SIZE(sx1_keymap), +}; + static struct omap_kp_platform_data sx1_kp_data = { .rows = 6, .cols = 6, - .keymap = sx1_keymap, - .keymapsize = ARRAY_SIZE(sx1_keymap), + .keymap_data = &sx1_keymap_data, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c 2010-12-18 16:26:41.000000000 +0100 @@ -53,36 +53,35 @@ static unsigned int col_gpios[7] = { 90, static int h4_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_A), - KEY(0, 3, KEY_B), - KEY(0, 4, KEY_C), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_A), + KEY(3, 0, KEY_B), + KEY(4, 0, KEY_C), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_E), - KEY(1, 3, KEY_F), - KEY(1, 4, KEY_G), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_I), + KEY(2, 1, KEY_E), + KEY(3, 1, KEY_F), + KEY(4, 1, KEY_G), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_I), KEY(2, 2, KEY_J), - KEY(2, 3, KEY_K), - KEY(2, 4, KEY_3), - KEY(3, 0, KEY_M), - KEY(3, 1, KEY_N), - KEY(3, 2, KEY_O), + KEY(3, 2, KEY_K), + KEY(4, 2, KEY_3), + KEY(0, 3, KEY_M), + KEY(1, 3, KEY_N), + KEY(2, 3, KEY_O), KEY(3, 3, KEY_P), - KEY(3, 4, KEY_Q), - KEY(4, 0, KEY_R), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_T), - KEY(4, 3, KEY_U), + KEY(4, 3, KEY_Q), + KEY(0, 4, KEY_R), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_T), + KEY(3, 4, KEY_U), KEY(4, 4, KEY_ENTER), - KEY(5, 0, KEY_V), - KEY(5, 1, KEY_W), - KEY(5, 2, KEY_L), - KEY(5, 3, KEY_S), - KEY(5, 4, KEY_ENTER), - 0 + KEY(0, 5, KEY_V), + KEY(1, 5, KEY_W), + KEY(2, 5, KEY_L), + KEY(3, 5, KEY_S), + KEY(4, 5, KEY_ENTER), }; static struct mtd_partition h4_partitions[] = { @@ -136,12 +135,16 @@ static struct platform_device h4_flash_d .resource = &h4_flash_resource, }; +static const struct matrix_keymap_data h4_keymap_data = { + .keymap = h4_keymap, + .keymap_size = ARRAY_SIZE(h4_keymap), +}; + static struct omap_kp_platform_data h4_kp_data = { .rows = 6, .cols = 7, - .keymap = h4_keymap, - .keymapsize = ARRAY_SIZE(h4_keymap), - .rep = 1, + .keymap_data = &h4_keymap_data, + .rep = true, .row_gpios = row_gpios, .col_gpios = col_gpios, }; ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-18 15:39 ` Janusz Krzysztofik 0 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-18 15:39 UTC (permalink / raw) To: linux-arm-kernel Most keypad drivers make use of the <linux/input/matrix_keypad.h> defined macros, structures and inline functions. Convert omap-keypad driver to use those as well, as suggested by a compile time warning, hardcoded into the OMAP <palt/keypad.h>. Created against linux-2.6.37-rc5. Tested on Amstrad Delta. Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to board-h4. Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> --- v1 -> v2 changes, both requested by Dmitry Torokhov (thanks!): - while updating all boards, change rep and dbounce to bool, - put keycodes at the end of struct omap_kp and allocate it in one shot. arch/arm/mach-omap1/board-ams-delta.c | 128 +++++++++++++++---------------- arch/arm/mach-omap1/board-fsample.c | 65 ++++++++------- arch/arm/mach-omap1/board-h2.c | 73 +++++++++-------- arch/arm/mach-omap1/board-h3.c | 73 +++++++++-------- arch/arm/mach-omap1/board-htcherald.c | 94 +++++++++++----------- arch/arm/mach-omap1/board-innovator.c | 19 ++-- arch/arm/mach-omap1/board-nokia770.c | 27 +++--- arch/arm/mach-omap1/board-osk.c | 19 ++-- arch/arm/mach-omap1/board-palmte.c | 26 +++--- arch/arm/mach-omap1/board-palmtt.c | 26 +++--- arch/arm/mach-omap1/board-palmz71.c | 28 +++--- arch/arm/mach-omap1/board-perseus2.c | 67 ++++++++-------- arch/arm/mach-omap1/board-sx1.c | 55 +++++++------ arch/arm/mach-omap2/board-h4.c | 61 +++++++------- arch/arm/plat-omap/include/plat/keypad.h | 35 ++++---- drivers/input/keyboard/omap-keypad.c | 35 +++----- include/linux/input/matrix_keypad.h | 2 17 files changed, 440 insertions(+), 393 deletions(-) --- linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h.orig 2010-12-09 23:07:38.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h 2010-12-18 13:11:05.000000000 +0100 @@ -10,16 +10,18 @@ #ifndef ASMARM_ARCH_KEYPAD_H #define ASMARM_ARCH_KEYPAD_H -#warning: Please update the board to use matrix_keypad.h instead +#ifndef CONFIG_ARCH_OMAP1 +#warning Please update the board to use matrix-keypad driver +#endif +#include <linux/input/matrix_keypad.h> struct omap_kp_platform_data { int rows; int cols; - int *keymap; - unsigned int keymapsize; - unsigned int rep:1; + const struct matrix_keymap_data *keymap_data; + bool rep; unsigned long delay; - unsigned int dbounce:1; + bool dbounce; /* specific to OMAP242x*/ unsigned int *row_gpios; unsigned int *col_gpios; @@ -28,18 +30,21 @@ struct omap_kp_platform_data { /* Group (0..3) -- when multiple keys are pressed, only the * keys pressed in the same group are considered as pressed. This is * in order to workaround certain crappy HW designs that produce ghost - * keypresses. */ -#define GROUP_0 (0 << 16) -#define GROUP_1 (1 << 16) -#define GROUP_2 (2 << 16) -#define GROUP_3 (3 << 16) + * keypresses. Two free bits, not used by neither row/col nor keynum, + * must be available for use as group bits. The below GROUP_SHIFT + * macro definition is based on some prior knowledge of the + * matrix_keypad defined KEY() macro internals. + */ +#define GROUP_SHIFT 14 +#define GROUP_0 (0 << GROUP_SHIFT) +#define GROUP_1 (1 << GROUP_SHIFT) +#define GROUP_2 (2 << GROUP_SHIFT) +#define GROUP_3 (3 << GROUP_SHIFT) #define GROUP_MASK GROUP_3 +#if KEY_MAX & GROUP_MASK +#error Group bits in conflict with keynum bits +#endif -#define KEY_PERSISTENT 0x00800000 -#define KEYNUM_MASK 0x00EFFFFF -#define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val)) -#define PERSISTENT_KEY(col, row) (((col) << 28) | ((row) << 24) | \ - KEY_PERSISTENT) #endif --- linux-2.6.37-rc5/include/linux/input/matrix_keypad.h.orig 2010-12-09 23:09:05.000000000 +0100 +++ linux-2.6.37-rc5/include/linux/input/matrix_keypad.h 2010-12-18 13:10:05.000000000 +0100 @@ -9,7 +9,7 @@ #define KEY(row, col, val) ((((row) & (MATRIX_MAX_ROWS - 1)) << 24) |\ (((col) & (MATRIX_MAX_COLS - 1)) << 16) |\ - (val & 0xffff)) + ((val) & 0xffff)) #define KEY_ROW(k) (((k) >> 24) & 0xff) #define KEY_COL(k) (((k) >> 16) & 0xff) --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12-09 23:08:09.000000000 +0100 +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-18 13:24:16.000000000 +0100 @@ -65,7 +65,6 @@ struct omap_kp { static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); -static int *keymap; static unsigned int *row_gpios; static unsigned int *col_gpios; @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o } } -static inline int omap_kp_find_key(int col, int row) -{ - int i, key; - - key = KEY(col, row, 0); - for (i = 0; keymap[i] != 0; i++) - if ((keymap[i] & 0xff000000) == key) - return keymap[i] & 0x00ffffff; - return -1; -} - static void omap_kp_tasklet(unsigned long data) { struct omap_kp *omap_kp_data = (struct omap_kp *) data; + unsigned short *keycodes = omap_kp_data->input->keycode; + unsigned int row_shift = get_count_order(omap_kp_data->cols); unsigned char new_state[8], changed, key_down = 0; int col, row; int spurious = 0; @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon row, (new_state[col] & (1 << row)) ? "pressed" : "released"); #else - key = omap_kp_find_key(col, row); + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; if (key < 0) { printk(KERN_WARNING "omap-keypad: Spurious key event %d-%d\n", @@ -298,13 +288,18 @@ static int __devinit omap_kp_probe(struc struct input_dev *input_dev; struct omap_kp_platform_data *pdata = pdev->dev.platform_data; int i, col_idx, row_idx, irq_idx, ret; + unsigned int row_shift, keycodemax; - if (!pdata->rows || !pdata->cols || !pdata->keymap) { - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); return -EINVAL; } - omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); + row_shift = get_count_order(pdata->cols); + keycodemax = pdata->rows << row_shift; + + omap_kp = kzalloc(sizeof(struct omap_kp) + + keycodemax * sizeof(unsigned short), GFP_KERNEL); input_dev = input_allocate_device(); if (!omap_kp || !input_dev) { kfree(omap_kp); @@ -320,7 +315,9 @@ static int __devinit omap_kp_probe(struc if (!cpu_is_omap24xx()) omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); - keymap = pdata->keymap; + input_dev->keycode = &omap_kp[1]; + input_dev->keycodesize = sizeof(unsigned short); + input_dev->keycodemax = keycodemax; if (pdata->rep) __set_bit(EV_REP, input_dev->evbit); @@ -374,8 +371,8 @@ static int __devinit omap_kp_probe(struc /* setup input device */ __set_bit(EV_KEY, input_dev->evbit); - for (i = 0; keymap[i] != 0; i++) - __set_bit(keymap[i] & KEY_MAX, input_dev->keybit); + matrix_keypad_build_keymap(pdata->keymap_data, row_shift, + input_dev->keycode, input_dev->keybit); input_dev->name = "omap-keypad"; input_dev->phys = "omap-keypad/input0"; input_dev->dev.parent = &pdev->dev; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-18 16:23:29.000000000 +0100 @@ -46,81 +46,79 @@ static u16 ams_delta_latch2_reg; static int ams_delta_keymap[] = { KEY(0, 0, KEY_F1), /* Advert */ - KEY(3, 0, KEY_COFFEE), /* Games */ - KEY(2, 0, KEY_QUESTION), /* Directory */ - KEY(3, 2, KEY_CONNECT), /* Internet */ - KEY(2, 1, KEY_SHOP), /* Services */ + KEY(0, 3, KEY_COFFEE), /* Games */ + KEY(0, 2, KEY_QUESTION), /* Directory */ + KEY(2, 3, KEY_CONNECT), /* Internet */ + KEY(1, 2, KEY_SHOP), /* Services */ KEY(1, 1, KEY_PHONE), /* VoiceMail */ - KEY(1, 0, KEY_DELETE), /* Delete */ + KEY(0, 1, KEY_DELETE), /* Delete */ KEY(2, 2, KEY_PLAY), /* Play */ - KEY(0, 1, KEY_PAGEUP), /* Up */ - KEY(3, 1, KEY_PAGEDOWN), /* Down */ - KEY(0, 2, KEY_EMAIL), /* ReadEmail */ - KEY(1, 2, KEY_STOP), /* Stop */ + KEY(1, 0, KEY_PAGEUP), /* Up */ + KEY(1, 3, KEY_PAGEDOWN), /* Down */ + KEY(2, 0, KEY_EMAIL), /* ReadEmail */ + KEY(2, 1, KEY_STOP), /* Stop */ /* Numeric keypad portion */ - KEY(7, 0, KEY_KP1), - KEY(6, 0, KEY_KP2), - KEY(5, 0, KEY_KP3), - KEY(7, 1, KEY_KP4), - KEY(6, 1, KEY_KP5), - KEY(5, 1, KEY_KP6), - KEY(7, 2, KEY_KP7), - KEY(6, 2, KEY_KP8), - KEY(5, 2, KEY_KP9), - KEY(6, 3, KEY_KP0), - KEY(7, 3, KEY_KPASTERISK), - KEY(5, 3, KEY_KPDOT), /* # key */ - KEY(2, 7, KEY_NUMLOCK), /* Mute */ - KEY(1, 7, KEY_KPMINUS), /* Recall */ - KEY(1, 6, KEY_KPPLUS), /* Redial */ - KEY(6, 7, KEY_KPSLASH), /* Handsfree */ - KEY(0, 6, KEY_ENTER), /* Video */ - - KEY(4, 7, KEY_CAMERA), /* Photo */ - - KEY(4, 0, KEY_F2), /* Home */ - KEY(4, 1, KEY_F3), /* Office */ - KEY(4, 2, KEY_F4), /* Mobile */ + KEY(0, 7, KEY_KP1), + KEY(0, 6, KEY_KP2), + KEY(0, 5, KEY_KP3), + KEY(1, 7, KEY_KP4), + KEY(1, 6, KEY_KP5), + KEY(1, 5, KEY_KP6), + KEY(2, 7, KEY_KP7), + KEY(2, 6, KEY_KP8), + KEY(2, 5, KEY_KP9), + KEY(3, 6, KEY_KP0), + KEY(3, 7, KEY_KPASTERISK), + KEY(3, 5, KEY_KPDOT), /* # key */ + KEY(7, 2, KEY_NUMLOCK), /* Mute */ + KEY(7, 1, KEY_KPMINUS), /* Recall */ + KEY(6, 1, KEY_KPPLUS), /* Redial */ + KEY(7, 6, KEY_KPSLASH), /* Handsfree */ + KEY(6, 0, KEY_ENTER), /* Video */ + + KEY(7, 4, KEY_CAMERA), /* Photo */ + + KEY(0, 4, KEY_F2), /* Home */ + KEY(1, 4, KEY_F3), /* Office */ + KEY(2, 4, KEY_F4), /* Mobile */ KEY(7, 7, KEY_F5), /* SMS */ - KEY(5, 7, KEY_F6), /* Email */ + KEY(7, 5, KEY_F6), /* Email */ /* QWERTY portion of keypad */ - KEY(4, 3, KEY_Q), + KEY(3, 4, KEY_Q), KEY(3, 3, KEY_W), - KEY(2, 3, KEY_E), - KEY(1, 3, KEY_R), - KEY(0, 3, KEY_T), - KEY(7, 4, KEY_Y), - KEY(6, 4, KEY_U), - KEY(5, 4, KEY_I), + KEY(3, 2, KEY_E), + KEY(3, 1, KEY_R), + KEY(3, 0, KEY_T), + KEY(4, 7, KEY_Y), + KEY(4, 6, KEY_U), + KEY(4, 5, KEY_I), KEY(4, 4, KEY_O), - KEY(3, 4, KEY_P), + KEY(4, 3, KEY_P), - KEY(2, 4, KEY_A), - KEY(1, 4, KEY_S), - KEY(0, 4, KEY_D), - KEY(7, 5, KEY_F), - KEY(6, 5, KEY_G), + KEY(4, 2, KEY_A), + KEY(4, 1, KEY_S), + KEY(4, 0, KEY_D), + KEY(5, 7, KEY_F), + KEY(5, 6, KEY_G), KEY(5, 5, KEY_H), - KEY(4, 5, KEY_J), - KEY(3, 5, KEY_K), - KEY(2, 5, KEY_L), - - KEY(1, 5, KEY_Z), - KEY(0, 5, KEY_X), - KEY(7, 6, KEY_C), + KEY(5, 4, KEY_J), + KEY(5, 3, KEY_K), + KEY(5, 2, KEY_L), + + KEY(5, 1, KEY_Z), + KEY(5, 0, KEY_X), + KEY(6, 7, KEY_C), KEY(6, 6, KEY_V), - KEY(5, 6, KEY_B), - KEY(4, 6, KEY_N), - KEY(3, 6, KEY_M), - KEY(2, 6, KEY_SPACE), + KEY(6, 5, KEY_B), + KEY(6, 4, KEY_N), + KEY(6, 3, KEY_M), + KEY(6, 2, KEY_SPACE), - KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */ - KEY(3, 7, KEY_LEFTCTRL), /* Vol down */ - - 0 + KEY(7, 0, KEY_LEFTSHIFT), /* Vol up */ + KEY(7, 3, KEY_LEFTCTRL), /* Vol down */ }; void ams_delta_latch1_write(u8 mask, u8 value) @@ -189,11 +187,15 @@ static struct resource ams_delta_kp_reso }, }; +static const struct matrix_keymap_data ams_delta_keymap_data = { + .keymap = ams_delta_keymap, + .keymap_size = ARRAY_SIZE(ams_delta_keymap), +}; + static struct omap_kp_platform_data ams_delta_kp_data = { .rows = 8, .cols = 8, - .keymap = ams_delta_keymap, - .keymapsize = ARRAY_SIZE(ams_delta_keymap), + .keymap_data = &ams_delta_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c 2010-12-18 13:10:05.000000000 +0100 @@ -70,35 +70,34 @@ fsample_cpld_write(0xf0 | ((bit) & 15), FSAMPLE_CPLD_SET_CLR) static int fsample_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -253,11 +252,15 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data fsample_keymap_data = { + .keymap = fsample_keymap, + .keymap_size = ARRAY_SIZE(fsample_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = fsample_keymap, - .keymapsize = ARRAY_SIZE(fsample_keymap), + .keymap_data = &fsample_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c 2010-12-18 16:25:15.000000000 +0100 @@ -54,41 +54,40 @@ static int h2_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; static struct mtd_partition h2_nor_partitions[] = { @@ -270,14 +269,18 @@ static struct resource h2_kp_resources[] }, }; +static const struct matrix_keymap_data h2_keymap_data = { + .keymap = h2_keymap, + .keymap_size = ARRAY_SIZE(h2_keymap), +}; + static struct omap_kp_platform_data h2_kp_data = { .rows = 8, .cols = 8, - .keymap = h2_keymap, - .keymapsize = ARRAY_SIZE(h2_keymap), - .rep = 1, + .keymap_data = &h2_keymap_data, + .rep = true, .delay = 9, - .dbounce = 1, + .dbounce = true, }; static struct platform_device h2_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c 2010-12-18 16:25:26.000000000 +0100 @@ -58,41 +58,40 @@ static int h3_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; @@ -305,14 +304,18 @@ static struct resource h3_kp_resources[] }, }; +static const struct matrix_keymap_data h3_keymap_data = { + .keymap = h3_keymap, + .keymap_size = ARRAY_SIZE(h3_keymap), +}; + static struct omap_kp_platform_data h3_kp_data = { .rows = 8, .cols = 8, - .keymap = h3_keymap, - .keymapsize = ARRAY_SIZE(h3_keymap), - .rep = 1, + .keymap_data = &h3_keymap_data, + .rep = true, .delay = 9, - .dbounce = 1, + .dbounce = true, }; static struct platform_device h3_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c 2010-12-18 16:25:42.000000000 +0100 @@ -182,62 +182,66 @@ static int htc_herald_keymap[] = { KEY(0, 0, KEY_RECORD), /* Mail button */ - KEY(0, 1, KEY_CAMERA), /* Camera */ - KEY(0, 2, KEY_PHONE), /* Send key */ - KEY(0, 3, KEY_VOLUMEUP), /* Volume up */ - KEY(0, 4, KEY_F2), /* Right bar (landscape) */ - KEY(0, 5, KEY_MAIL), /* Win key (portrait) */ - KEY(0, 6, KEY_DIRECTORY), /* Right bar (protrait) */ - KEY(1, 0, KEY_LEFTCTRL), /* Windows key */ + KEY(1, 0, KEY_CAMERA), /* Camera */ + KEY(2, 0, KEY_PHONE), /* Send key */ + KEY(3, 0, KEY_VOLUMEUP), /* Volume up */ + KEY(4, 0, KEY_F2), /* Right bar (landscape) */ + KEY(5, 0, KEY_MAIL), /* Win key (portrait) */ + KEY(6, 0, KEY_DIRECTORY), /* Right bar (protrait) */ + KEY(0, 1, KEY_LEFTCTRL), /* Windows key */ KEY(1, 1, KEY_COMMA), - KEY(1, 2, KEY_M), - KEY(1, 3, KEY_K), - KEY(1, 4, KEY_SLASH), /* OK key */ - KEY(1, 5, KEY_I), - KEY(1, 6, KEY_U), - KEY(2, 0, KEY_LEFTALT), - KEY(2, 1, KEY_TAB), + KEY(2, 1, KEY_M), + KEY(3, 1, KEY_K), + KEY(4, 1, KEY_SLASH), /* OK key */ + KEY(5, 1, KEY_I), + KEY(6, 1, KEY_U), + KEY(0, 2, KEY_LEFTALT), + KEY(1, 2, KEY_TAB), KEY(2, 2, KEY_N), - KEY(2, 3, KEY_J), - KEY(2, 4, KEY_ENTER), - KEY(2, 5, KEY_H), - KEY(2, 6, KEY_Y), - KEY(3, 0, KEY_SPACE), - KEY(3, 1, KEY_L), - KEY(3, 2, KEY_B), + KEY(3, 2, KEY_J), + KEY(4, 2, KEY_ENTER), + KEY(5, 2, KEY_H), + KEY(6, 2, KEY_Y), + KEY(0, 3, KEY_SPACE), + KEY(1, 3, KEY_L), + KEY(2, 3, KEY_B), KEY(3, 3, KEY_V), - KEY(3, 4, KEY_BACKSPACE), - KEY(3, 5, KEY_G), - KEY(3, 6, KEY_T), - KEY(4, 0, KEY_CAPSLOCK), /* Shift */ - KEY(4, 1, KEY_C), - KEY(4, 2, KEY_F), - KEY(4, 3, KEY_R), + KEY(4, 3, KEY_BACKSPACE), + KEY(5, 3, KEY_G), + KEY(6, 3, KEY_T), + KEY(0, 4, KEY_CAPSLOCK), /* Shift */ + KEY(1, 4, KEY_C), + KEY(2, 4, KEY_F), + KEY(3, 4, KEY_R), KEY(4, 4, KEY_O), - KEY(4, 5, KEY_E), - KEY(4, 6, KEY_D), - KEY(5, 0, KEY_X), - KEY(5, 1, KEY_Z), - KEY(5, 2, KEY_S), - KEY(5, 3, KEY_W), - KEY(5, 4, KEY_P), + KEY(5, 4, KEY_E), + KEY(6, 4, KEY_D), + KEY(0, 5, KEY_X), + KEY(1, 5, KEY_Z), + KEY(2, 5, KEY_S), + KEY(3, 5, KEY_W), + KEY(4, 5, KEY_P), KEY(5, 5, KEY_Q), - KEY(5, 6, KEY_A), - KEY(6, 0, KEY_CONNECT), /* Voice button */ - KEY(6, 2, KEY_CANCEL), /* End key */ - KEY(6, 3, KEY_VOLUMEDOWN), /* Volume down */ - KEY(6, 4, KEY_F1), /* Left bar (landscape) */ - KEY(6, 5, KEY_WWW), /* OK button (portrait) */ + KEY(6, 5, KEY_A), + KEY(0, 6, KEY_CONNECT), /* Voice button */ + KEY(2, 6, KEY_CANCEL), /* End key */ + KEY(3, 6, KEY_VOLUMEDOWN), /* Volume down */ + KEY(4, 6, KEY_F1), /* Left bar (landscape) */ + KEY(5, 6, KEY_WWW), /* OK button (portrait) */ KEY(6, 6, KEY_CALENDAR), /* Left bar (portrait) */ - 0 +}; + +static const struct matrix_keymap_data htc_herald_keymap_data = { + .keymap = htc_herald_keymap, + .keymap_size = ARRAY_SIZE(htc_herald_keymap), }; struct omap_kp_platform_data htcherald_kp_data = { .rows = 7, .cols = 7, .delay = 20, - .rep = 1, - .keymap = htc_herald_keymap, + .rep = true, + .keymap_data = &htc_herald_keymap_data, }; static struct resource kp_resources[] = { @@ -278,7 +282,7 @@ static struct gpio_keys_button herald_gp static struct gpio_keys_platform_data herald_gpio_keys_data = { .buttons = herald_gpio_keys_table, .nbuttons = ARRAY_SIZE(herald_gpio_keys_table), - .rep = 1, + .rep = true, }; static struct platform_device herald_gpiokeys_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c 2010-12-18 13:10:05.000000000 +0100 @@ -46,15 +46,14 @@ static int innovator_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 3, KEY_DOWN), + KEY(3, 0, KEY_DOWN), KEY(1, 1, KEY_F2), - KEY(1, 2, KEY_RIGHT), - KEY(2, 0, KEY_F3), - KEY(2, 1, KEY_F4), + KEY(2, 1, KEY_RIGHT), + KEY(0, 2, KEY_F3), + KEY(1, 2, KEY_F4), KEY(2, 2, KEY_UP), - KEY(3, 2, KEY_ENTER), + KEY(2, 3, KEY_ENTER), KEY(3, 3, KEY_LEFT), - 0 }; static struct mtd_partition innovator_partitions[] = { @@ -126,11 +125,15 @@ static struct resource innovator_kp_reso }, }; +static const struct matrix_keymap_data innovator_keymap_data = { + .keymap = innovator_keymap, + .keymap_size = ARRAY_SIZE(innovator_keymap), +}; + static struct omap_kp_platform_data innovator_kp_data = { .rows = 8, .cols = 8, - .keymap = innovator_keymap, - .keymapsize = ARRAY_SIZE(innovator_keymap), + .keymap_data = &innovator_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c 2010-12-18 13:10:05.000000000 +0100 @@ -57,18 +57,17 @@ static void __init omap_nokia770_init_ir } static int nokia770_keymap[] = { - KEY(0, 1, GROUP_0 | KEY_UP), - KEY(0, 2, GROUP_1 | KEY_F5), - KEY(1, 0, GROUP_0 | KEY_LEFT), + KEY(1, 0, GROUP_0 | KEY_UP), + KEY(2, 0, GROUP_1 | KEY_F5), + KEY(0, 1, GROUP_0 | KEY_LEFT), KEY(1, 1, GROUP_0 | KEY_ENTER), - KEY(1, 2, GROUP_0 | KEY_RIGHT), - KEY(2, 0, GROUP_1 | KEY_ESC), - KEY(2, 1, GROUP_0 | KEY_DOWN), + KEY(2, 1, GROUP_0 | KEY_RIGHT), + KEY(0, 2, GROUP_1 | KEY_ESC), + KEY(1, 2, GROUP_0 | KEY_DOWN), KEY(2, 2, GROUP_1 | KEY_F4), - KEY(3, 0, GROUP_2 | KEY_F7), - KEY(3, 1, GROUP_2 | KEY_F8), - KEY(3, 2, GROUP_2 | KEY_F6), - 0 + KEY(0, 3, GROUP_2 | KEY_F7), + KEY(1, 3, GROUP_2 | KEY_F8), + KEY(2, 3, GROUP_2 | KEY_F6), }; static struct resource nokia770_kp_resources[] = { @@ -79,11 +78,15 @@ static struct resource nokia770_kp_resou }, }; +static const struct matrix_keymap_data nokia770_keymap_data = { + .keymap = nokia770_keymap, + .keymap_size = ARRAY_SIZE(nokia770_keymap), +}; + static struct omap_kp_platform_data nokia770_kp_data = { .rows = 8, .cols = 8, - .keymap = nokia770_keymap, - .keymapsize = ARRAY_SIZE(nokia770_keymap), + .keymap_data = &nokia770_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c 2010-12-18 13:10:05.000000000 +0100 @@ -341,22 +341,25 @@ static struct i2c_board_info __initdata static const int osk_keymap[] = { /* KEY(col, row, code) */ KEY(0, 0, KEY_F1), /* SW4 */ - KEY(0, 3, KEY_UP), /* (sw2/up) */ + KEY(3, 0, KEY_UP), /* (sw2/up) */ KEY(1, 1, KEY_LEFTCTRL), /* SW5 */ - KEY(1, 2, KEY_LEFT), /* (sw2/left) */ - KEY(2, 0, KEY_SPACE), /* SW3 */ - KEY(2, 1, KEY_ESC), /* SW6 */ + KEY(2, 1, KEY_LEFT), /* (sw2/left) */ + KEY(0, 2, KEY_SPACE), /* SW3 */ + KEY(1, 2, KEY_ESC), /* SW6 */ KEY(2, 2, KEY_DOWN), /* (sw2/down) */ - KEY(3, 2, KEY_ENTER), /* (sw2/select) */ + KEY(2, 3, KEY_ENTER), /* (sw2/select) */ KEY(3, 3, KEY_RIGHT), /* (sw2/right) */ - 0 +}; + +static const struct matrix_keymap_data osk_keymap_data = { + .keymap = osk_keymap, + .keymap_size = ARRAY_SIZE(osk_keymap), }; static struct omap_kp_platform_data osk_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) osk_keymap, - .keymapsize = ARRAY_SIZE(osk_keymap), + .keymap_data = &osk_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c 2010-12-18 16:26:18.000000000 +0100 @@ -67,23 +67,27 @@ static void __init omap_palmte_init_irq( static const int palmte_keymap[] = { KEY(0, 0, KEY_F1), /* Calendar */ - KEY(0, 1, KEY_F2), /* Contacts */ - KEY(0, 2, KEY_F3), /* Tasks List */ - KEY(0, 3, KEY_F4), /* Note Pad */ - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), /* Contacts */ + KEY(2, 0, KEY_F3), /* Tasks List */ + KEY(3, 0, KEY_F4), /* Note Pad */ + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), +}; + +static const struct matrix_keymap_data palmte_keymap_data = { + .keymap = palmte_keymap, + .keymap_size = ARRAY_SIZE(palmte_keymap), }; static struct omap_kp_platform_data palmte_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) palmte_keymap, - .rep = 1, + .keymap_data = &palmte_keymap_data, + .rep = true, .delay = 12, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c 2010-12-18 13:10:05.000000000 +0100 @@ -53,17 +53,16 @@ static int palmtt_keymap[] = { KEY(0, 0, KEY_ESC), - KEY(0, 1, KEY_SPACE), - KEY(0, 2, KEY_LEFTCTRL), - KEY(0, 3, KEY_TAB), - KEY(0, 4, KEY_ENTER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_SPACE), + KEY(2, 0, KEY_LEFTCTRL), + KEY(3, 0, KEY_TAB), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(2, 0, KEY_SLEEP), - KEY(2, 4, KEY_Y), - 0 + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(0, 2, KEY_SLEEP), + KEY(4, 2, KEY_Y), }; static struct mtd_partition palmtt_partitions[] = { @@ -136,10 +135,15 @@ static struct resource palmtt_kp_resourc }, }; +static const struct matrix_keymap_data palmtt_keymap_data = { + .keymap = palmtt_keymap, + .keymap_size = ARRAY_SIZE(palmtt_keymap), +}; + static struct omap_kp_platform_data palmtt_kp_data = { .rows = 6, .cols = 3, - .keymap = palmtt_keymap, + .keymap_data = &palmtt_keymap_data, }; static struct platform_device palmtt_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c 2010-12-18 16:26:26.000000000 +0100 @@ -66,24 +66,28 @@ omap_palmz71_init_irq(void) static int palmz71_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 1, KEY_F2), - KEY(0, 2, KEY_F3), - KEY(0, 3, KEY_F4), - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), + KEY(2, 0, KEY_F3), + KEY(3, 0, KEY_F4), + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - KEY(2, 0, KEY_CAMERA), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), + KEY(0, 2, KEY_CAMERA), +}; + +static const struct matrix_keymap_data palmz71_keymap_data = { + .keymap = palmz71_keymap, + .keymap_size = ARRAY_SIZE(palmz71_keymap), }; static struct omap_kp_platform_data palmz71_kp_data = { .rows = 8, .cols = 8, - .keymap = palmz71_keymap, - .rep = 1, + .keymap_data = &palmz71_keymap_data, + .rep = true, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c 2010-12-18 16:26:33.000000000 +0100 @@ -37,35 +37,34 @@ #include <plat/board.h> static int p2_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -211,13 +210,17 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data p2_keymap_data = { + .keymap = p2_keymap, + .keymap_size = ARRAY_SIZE(p2_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = p2_keymap, - .keymapsize = ARRAY_SIZE(p2_keymap), + .keymap_data = &p2_keymap_data, .delay = 4, - .dbounce = 1, + .dbounce = true, }; static struct platform_device kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c 2010-12-18 13:10:05.000000000 +0100 @@ -165,35 +165,34 @@ EXPORT_SYMBOL(sx1_setusbpower); /*----------- Keypad -------------------------*/ static int sx1_keymap[] = { - KEY(5, 3, GROUP_0 | 117), /* camera Qt::Key_F17 */ - KEY(0, 4, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ - KEY(1, 4, GROUP_2 | 114), /* voice memo */ - KEY(2, 4, GROUP_3 | 114), /* voice memo */ + KEY(3, 5, GROUP_0 | 117), /* camera Qt::Key_F17 */ + KEY(4, 0, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ + KEY(4, 1, GROUP_2 | 114), /* voice memo */ + KEY(4, 2, GROUP_3 | 114), /* voice memo */ KEY(0, 0, GROUP_1 | KEY_F12), /* red button Qt::Key_Hangup */ - KEY(4, 3, GROUP_1 | KEY_LEFT), - KEY(2, 3, GROUP_1 | KEY_DOWN), - KEY(1, 3, GROUP_1 | KEY_RIGHT), - KEY(0, 3, GROUP_1 | KEY_UP), + KEY(3, 4, GROUP_1 | KEY_LEFT), + KEY(3, 2, GROUP_1 | KEY_DOWN), + KEY(3, 1, GROUP_1 | KEY_RIGHT), + KEY(3, 0, GROUP_1 | KEY_UP), KEY(3, 3, GROUP_1 | KEY_POWER), /* joystick press or Qt::Key_Select */ - KEY(5, 0, GROUP_1 | KEY_1), - KEY(4, 0, GROUP_1 | KEY_2), - KEY(3, 0, GROUP_1 | KEY_3), - KEY(3, 4, GROUP_1 | KEY_4), + KEY(0, 5, GROUP_1 | KEY_1), + KEY(0, 4, GROUP_1 | KEY_2), + KEY(0, 3, GROUP_1 | KEY_3), + KEY(4, 3, GROUP_1 | KEY_4), KEY(4, 4, GROUP_1 | KEY_5), - KEY(5, 4, GROUP_1 | KEY_KPASTERISK),/* "*" */ - KEY(4, 1, GROUP_1 | KEY_6), - KEY(5, 1, GROUP_1 | KEY_7), - KEY(3, 1, GROUP_1 | KEY_8), - KEY(3, 2, GROUP_1 | KEY_9), - KEY(5, 2, GROUP_1 | KEY_0), - KEY(4, 2, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ - KEY(0, 1, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ - KEY(1, 2, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ + KEY(4, 5, GROUP_1 | KEY_KPASTERISK),/* "*" */ + KEY(1, 4, GROUP_1 | KEY_6), + KEY(1, 5, GROUP_1 | KEY_7), + KEY(1, 3, GROUP_1 | KEY_8), + KEY(2, 3, GROUP_1 | KEY_9), + KEY(2, 5, GROUP_1 | KEY_0), + KEY(2, 4, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ + KEY(1, 0, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ + KEY(2, 1, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ KEY(2, 2, GROUP_1 | KEY_F8), /* right soft Qt::Key_Back */ - KEY(2, 1, GROUP_1 | KEY_LEFTSHIFT), /* shift */ + KEY(1, 2, GROUP_1 | KEY_LEFTSHIFT), /* shift */ KEY(1, 1, GROUP_1 | KEY_BACKSPACE), /* C (clear) */ - KEY(0, 2, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ - 0 + KEY(2, 0, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ }; static struct resource sx1_kp_resources[] = { @@ -204,11 +203,15 @@ static struct resource sx1_kp_resources[ }, }; +static const struct matrix_keymap_data sx1_keymap_data = { + .keymap = sx1_keymap, + .keymap_size = ARRAY_SIZE(sx1_keymap), +}; + static struct omap_kp_platform_data sx1_kp_data = { .rows = 6, .cols = 6, - .keymap = sx1_keymap, - .keymapsize = ARRAY_SIZE(sx1_keymap), + .keymap_data = &sx1_keymap_data, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c 2010-12-18 16:26:41.000000000 +0100 @@ -53,36 +53,35 @@ static unsigned int col_gpios[7] = { 90, static int h4_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_A), - KEY(0, 3, KEY_B), - KEY(0, 4, KEY_C), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_A), + KEY(3, 0, KEY_B), + KEY(4, 0, KEY_C), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_E), - KEY(1, 3, KEY_F), - KEY(1, 4, KEY_G), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_I), + KEY(2, 1, KEY_E), + KEY(3, 1, KEY_F), + KEY(4, 1, KEY_G), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_I), KEY(2, 2, KEY_J), - KEY(2, 3, KEY_K), - KEY(2, 4, KEY_3), - KEY(3, 0, KEY_M), - KEY(3, 1, KEY_N), - KEY(3, 2, KEY_O), + KEY(3, 2, KEY_K), + KEY(4, 2, KEY_3), + KEY(0, 3, KEY_M), + KEY(1, 3, KEY_N), + KEY(2, 3, KEY_O), KEY(3, 3, KEY_P), - KEY(3, 4, KEY_Q), - KEY(4, 0, KEY_R), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_T), - KEY(4, 3, KEY_U), + KEY(4, 3, KEY_Q), + KEY(0, 4, KEY_R), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_T), + KEY(3, 4, KEY_U), KEY(4, 4, KEY_ENTER), - KEY(5, 0, KEY_V), - KEY(5, 1, KEY_W), - KEY(5, 2, KEY_L), - KEY(5, 3, KEY_S), - KEY(5, 4, KEY_ENTER), - 0 + KEY(0, 5, KEY_V), + KEY(1, 5, KEY_W), + KEY(2, 5, KEY_L), + KEY(3, 5, KEY_S), + KEY(4, 5, KEY_ENTER), }; static struct mtd_partition h4_partitions[] = { @@ -136,12 +135,16 @@ static struct platform_device h4_flash_d .resource = &h4_flash_resource, }; +static const struct matrix_keymap_data h4_keymap_data = { + .keymap = h4_keymap, + .keymap_size = ARRAY_SIZE(h4_keymap), +}; + static struct omap_kp_platform_data h4_kp_data = { .rows = 6, .cols = 7, - .keymap = h4_keymap, - .keymapsize = ARRAY_SIZE(h4_keymap), - .rep = 1, + .keymap_data = &h4_keymap_data, + .rep = true, .row_gpios = row_gpios, .col_gpios = col_gpios, }; ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-18 15:39 ` Janusz Krzysztofik @ 2010-12-20 15:29 ` Aaro Koskinen -1 siblings, 0 replies; 36+ messages in thread From: Aaro Koskinen @ 2010-12-20 15:29 UTC (permalink / raw) To: Janusz Krzysztofik Cc: Dmitry Torokhov, linux-omap, linux-input, Tony Lindgren, linux-arm-kernel Hello, On Sat, 18 Dec 2010, Janusz Krzysztofik wrote: > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > defined macros, structures and inline functions. > > Convert omap-keypad driver to use those as well, as suggested by a > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > Created against linux-2.6.37-rc5. > Tested on Amstrad Delta. > Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > board-h4. > > Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> [...] > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-18 16:23:29.000000000 +0100 > @@ -46,81 +46,79 @@ static u16 ams_delta_latch2_reg; > static int ams_delta_keymap[] = { [...] > +static const struct matrix_keymap_data ams_delta_keymap_data = { > + .keymap = ams_delta_keymap, > + .keymap_size = ARRAY_SIZE(ams_delta_keymap), > +}; You should update the ams_delta_keymap type as well, otherwise this patch will introduce the following sparse warning: CHECK arch/arm/mach-omap1/board-ams-delta.c arch/arm/mach-omap1/board-ams-delta.c:191:27: warning: incorrect type in initializer (different signedness) arch/arm/mach-omap1/board-ams-delta.c:191:27: expected unsigned int const [usertype] *keymap arch/arm/mach-omap1/board-ams-delta.c:191:27: got int static [toplevel] *<noident> I only checked E3, so other boards should be checked as well. A. ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-20 15:29 ` Aaro Koskinen 0 siblings, 0 replies; 36+ messages in thread From: Aaro Koskinen @ 2010-12-20 15:29 UTC (permalink / raw) To: linux-arm-kernel Hello, On Sat, 18 Dec 2010, Janusz Krzysztofik wrote: > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > defined macros, structures and inline functions. > > Convert omap-keypad driver to use those as well, as suggested by a > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > Created against linux-2.6.37-rc5. > Tested on Amstrad Delta. > Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > board-h4. > > Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> [...] > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-18 16:23:29.000000000 +0100 > @@ -46,81 +46,79 @@ static u16 ams_delta_latch2_reg; > static int ams_delta_keymap[] = { [...] > +static const struct matrix_keymap_data ams_delta_keymap_data = { > + .keymap = ams_delta_keymap, > + .keymap_size = ARRAY_SIZE(ams_delta_keymap), > +}; You should update the ams_delta_keymap type as well, otherwise this patch will introduce the following sparse warning: CHECK arch/arm/mach-omap1/board-ams-delta.c arch/arm/mach-omap1/board-ams-delta.c:191:27: warning: incorrect type in initializer (different signedness) arch/arm/mach-omap1/board-ams-delta.c:191:27: expected unsigned int const [usertype] *keymap arch/arm/mach-omap1/board-ams-delta.c:191:27: got int static [toplevel] *<noident> I only checked E3, so other boards should be checked as well. A. ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-20 15:29 ` Aaro Koskinen @ 2010-12-20 17:32 ` Janusz Krzysztofik -1 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-20 17:32 UTC (permalink / raw) To: Aaro Koskinen Cc: Dmitry Torokhov, linux-omap, linux-input, Tony Lindgren, linux-arm-kernel Monday 20 December 2010 16:29:32 Aaro Koskinen wrote: > Hello, > > On Sat, 18 Dec 2010, Janusz Krzysztofik wrote: > > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > > defined macros, structures and inline functions. > > > > Convert omap-keypad driver to use those as well, as suggested by a > > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > > > Created against linux-2.6.37-rc5. > > Tested on Amstrad Delta. > > Compile tested with omap1_defconfig and omap2plus_defconfig > > shrinked to board-h4. > > > > Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> > > [...] > > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig > > 2010-12-09 23:07:35.000000000 +0100 +++ > > linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c > > 2010-12-18 16:23:29.000000000 +0100 @@ -46,81 +46,79 @@ static u16 > > ams_delta_latch2_reg; > > static int ams_delta_keymap[] = { > > [...] > > > +static const struct matrix_keymap_data ams_delta_keymap_data = { > > + .keymap = ams_delta_keymap, > > + .keymap_size = ARRAY_SIZE(ams_delta_keymap), > > +}; > > You should update the ams_delta_keymap type as well, otherwise this > patch will introduce the following sparse warning: > > CHECK arch/arm/mach-omap1/board-ams-delta.c > arch/arm/mach-omap1/board-ams-delta.c:191:27: warning: incorrect type in initializer (different signedness) > arch/arm/mach-omap1/board-ams-delta.c:191:27: expected unsigned int const [usertype] *keymap > arch/arm/mach-omap1/board-ams-delta.c:191:27: got int static [toplevel] *<noident> Hi Aaro, How did you get this output? I'm using OpenEmbedded as my development environment. Running make with "C=1" (EXTRA_OEMAKE=" C=1 ") displays a lot but the above. Running sparse by hand breaks with "unable to open 'linux/init.h'". Any advice? Thanks, Janusz ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-20 17:32 ` Janusz Krzysztofik 0 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-20 17:32 UTC (permalink / raw) To: linux-arm-kernel Monday 20 December 2010 16:29:32 Aaro Koskinen wrote: > Hello, > > On Sat, 18 Dec 2010, Janusz Krzysztofik wrote: > > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > > defined macros, structures and inline functions. > > > > Convert omap-keypad driver to use those as well, as suggested by a > > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > > > Created against linux-2.6.37-rc5. > > Tested on Amstrad Delta. > > Compile tested with omap1_defconfig and omap2plus_defconfig > > shrinked to board-h4. > > > > Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> > > [...] > > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig > > 2010-12-09 23:07:35.000000000 +0100 +++ > > linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c > > 2010-12-18 16:23:29.000000000 +0100 @@ -46,81 +46,79 @@ static u16 > > ams_delta_latch2_reg; > > static int ams_delta_keymap[] = { > > [...] > > > +static const struct matrix_keymap_data ams_delta_keymap_data = { > > + .keymap = ams_delta_keymap, > > + .keymap_size = ARRAY_SIZE(ams_delta_keymap), > > +}; > > You should update the ams_delta_keymap type as well, otherwise this > patch will introduce the following sparse warning: > > CHECK arch/arm/mach-omap1/board-ams-delta.c > arch/arm/mach-omap1/board-ams-delta.c:191:27: warning: incorrect type in initializer (different signedness) > arch/arm/mach-omap1/board-ams-delta.c:191:27: expected unsigned int const [usertype] *keymap > arch/arm/mach-omap1/board-ams-delta.c:191:27: got int static [toplevel] *<noident> Hi Aaro, How did you get this output? I'm using OpenEmbedded as my development environment. Running make with "C=1" (EXTRA_OEMAKE=" C=1 ") displays a lot but the above. Running sparse by hand breaks with "unable to open 'linux/init.h'". Any advice? Thanks, Janusz ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-20 17:32 ` Janusz Krzysztofik @ 2010-12-20 18:02 ` Dmitry Torokhov -1 siblings, 0 replies; 36+ messages in thread From: Dmitry Torokhov @ 2010-12-20 18:02 UTC (permalink / raw) To: Janusz Krzysztofik Cc: Aaro Koskinen, linux-omap, linux-input, Tony Lindgren, linux-arm-kernel On Mon, Dec 20, 2010 at 06:32:22PM +0100, Janusz Krzysztofik wrote: > Monday 20 December 2010 16:29:32 Aaro Koskinen wrote: > > Hello, > > > > On Sat, 18 Dec 2010, Janusz Krzysztofik wrote: > > > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > > > defined macros, structures and inline functions. > > > > > > Convert omap-keypad driver to use those as well, as suggested by a > > > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > > > > > Created against linux-2.6.37-rc5. > > > Tested on Amstrad Delta. > > > Compile tested with omap1_defconfig and omap2plus_defconfig > > > shrinked to board-h4. > > > > > > Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> > > > > [...] > > > > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig > > > 2010-12-09 23:07:35.000000000 +0100 +++ > > > linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c > > > 2010-12-18 16:23:29.000000000 +0100 @@ -46,81 +46,79 @@ static u16 > > > ams_delta_latch2_reg; > > > static int ams_delta_keymap[] = { > > > > [...] > > > > > +static const struct matrix_keymap_data ams_delta_keymap_data = { > > > + .keymap = ams_delta_keymap, > > > + .keymap_size = ARRAY_SIZE(ams_delta_keymap), > > > +}; > > > > You should update the ams_delta_keymap type as well, otherwise this > > patch will introduce the following sparse warning: > > > > CHECK arch/arm/mach-omap1/board-ams-delta.c > > arch/arm/mach-omap1/board-ams-delta.c:191:27: warning: incorrect type in initializer (different signedness) > > arch/arm/mach-omap1/board-ams-delta.c:191:27: expected unsigned int const [usertype] *keymap > > arch/arm/mach-omap1/board-ams-delta.c:191:27: got int static [toplevel] *<noident> > > Hi Aaro, > How did you get this output? I'm using OpenEmbedded as my development > environment. Running make with "C=1" (EXTRA_OEMAKE=" C=1 ") displays a > lot but the above. Running sparse by hand breaks with "unable to > open 'linux/init.h'". Any advice? > Not sure why exactly your sparse does not pick it up (too old maybe?) but the following: --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-18 16:23:29.000000000 +0100 @@ -46,81 +46,79 @@ static u16 ams_delta_latch2_reg; static int ams_delta_keymap[] = { KEY(0, 0, KEY_F1), /* Advert */ should be static const unisgned int ams_delta_keymap[] = { Same goes for the rest of keymaps. Thanks. -- Dmitry ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-20 18:02 ` Dmitry Torokhov 0 siblings, 0 replies; 36+ messages in thread From: Dmitry Torokhov @ 2010-12-20 18:02 UTC (permalink / raw) To: linux-arm-kernel On Mon, Dec 20, 2010 at 06:32:22PM +0100, Janusz Krzysztofik wrote: > Monday 20 December 2010 16:29:32 Aaro Koskinen wrote: > > Hello, > > > > On Sat, 18 Dec 2010, Janusz Krzysztofik wrote: > > > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > > > defined macros, structures and inline functions. > > > > > > Convert omap-keypad driver to use those as well, as suggested by a > > > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > > > > > Created against linux-2.6.37-rc5. > > > Tested on Amstrad Delta. > > > Compile tested with omap1_defconfig and omap2plus_defconfig > > > shrinked to board-h4. > > > > > > Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> > > > > [...] > > > > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig > > > 2010-12-09 23:07:35.000000000 +0100 +++ > > > linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c > > > 2010-12-18 16:23:29.000000000 +0100 @@ -46,81 +46,79 @@ static u16 > > > ams_delta_latch2_reg; > > > static int ams_delta_keymap[] = { > > > > [...] > > > > > +static const struct matrix_keymap_data ams_delta_keymap_data = { > > > + .keymap = ams_delta_keymap, > > > + .keymap_size = ARRAY_SIZE(ams_delta_keymap), > > > +}; > > > > You should update the ams_delta_keymap type as well, otherwise this > > patch will introduce the following sparse warning: > > > > CHECK arch/arm/mach-omap1/board-ams-delta.c > > arch/arm/mach-omap1/board-ams-delta.c:191:27: warning: incorrect type in initializer (different signedness) > > arch/arm/mach-omap1/board-ams-delta.c:191:27: expected unsigned int const [usertype] *keymap > > arch/arm/mach-omap1/board-ams-delta.c:191:27: got int static [toplevel] *<noident> > > Hi Aaro, > How did you get this output? I'm using OpenEmbedded as my development > environment. Running make with "C=1" (EXTRA_OEMAKE=" C=1 ") displays a > lot but the above. Running sparse by hand breaks with "unable to > open 'linux/init.h'". Any advice? > Not sure why exactly your sparse does not pick it up (too old maybe?) but the following: --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-18 16:23:29.000000000 +0100 @@ -46,81 +46,79 @@ static u16 ams_delta_latch2_reg; static int ams_delta_keymap[] = { KEY(0, 0, KEY_F1), /* Advert */ should be static const unisgned int ams_delta_keymap[] = { Same goes for the rest of keymaps. Thanks. -- Dmitry ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-20 18:02 ` Dmitry Torokhov @ 2010-12-20 18:49 ` Janusz Krzysztofik -1 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-20 18:49 UTC (permalink / raw) To: Dmitry Torokhov Cc: Aaro Koskinen, linux-omap, linux-input, Tony Lindgren, linux-arm-kernel Monday 20 December 2010 19:02:08 Dmitry Torokhov wrote: > > Not sure why exactly your sparse does not pick it up (too old maybe?) > but the following: > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-18 > 16:23:29.000000000 +0100 > @@ -46,81 +46,79 @@ static u16 ams_delta_latch2_reg; > static int ams_delta_keymap[] = { > KEY(0, 0, KEY_F1), /* Advert */ > > should be > > static const unisgned int ams_delta_keymap[] = { > > Same goes for the rest of keymaps. Sure, thanks. Janusz ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-20 18:49 ` Janusz Krzysztofik 0 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-20 18:49 UTC (permalink / raw) To: linux-arm-kernel Monday 20 December 2010 19:02:08 Dmitry Torokhov wrote: > > Not sure why exactly your sparse does not pick it up (too old maybe?) > but the following: > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-18 > 16:23:29.000000000 +0100 > @@ -46,81 +46,79 @@ static u16 ams_delta_latch2_reg; > static int ams_delta_keymap[] = { > KEY(0, 0, KEY_F1), /* Advert */ > > should be > > static const unisgned int ams_delta_keymap[] = { > > Same goes for the rest of keymaps. Sure, thanks. Janusz ^ permalink raw reply [flat|nested] 36+ messages in thread
* RE: [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-20 17:32 ` Janusz Krzysztofik @ 2010-12-20 19:03 ` aaro.koskinen at nokia.com -1 siblings, 0 replies; 36+ messages in thread From: aaro.koskinen @ 2010-12-20 19:03 UTC (permalink / raw) To: jkrzyszt; +Cc: dmitry.torokhov, linux-omap, linux-input, tony, linux-arm-kernel Hi, From: Janusz Krzysztofik [jkrzyszt@tis.icnet.pl] > Monday 20 December 2010 16:29:32 Aaro Koskinen wrote: > > You should update the ams_delta_keymap type as well, otherwise this > > patch will introduce the following sparse warning: > > > > CHECK arch/arm/mach-omap1/board-ams-delta.c > > arch/arm/mach-omap1/board-ams-delta.c:191:27: warning: incorrect type in initializer (different signedness) > > arch/arm/mach-omap1/board-ams-delta.c:191:27: expected unsigned int const [usertype] *keymap > > arch/arm/mach-omap1/board-ams-delta.c:191:27: got int static [toplevel] *<noident> > > Hi Aaro, > How did you get this output? I'm using OpenEmbedded as my development > environment. Running make with "C=1" (EXTRA_OEMAKE=" C=1 ") displays a > lot but the above. Running sparse by hand breaks with "unable to > open 'linux/init.h'". Any advice? I'm using the latest sparse from: git://git.kernel.org/pub/scm/devel/sparse/sparse.git I don't know about OpenEmbedded, but I've noticed that at least Debian ships with some old version that is missing many checks... A. ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-20 19:03 ` aaro.koskinen at nokia.com 0 siblings, 0 replies; 36+ messages in thread From: aaro.koskinen at nokia.com @ 2010-12-20 19:03 UTC (permalink / raw) To: linux-arm-kernel Hi, From: Janusz Krzysztofik [jkrzyszt at tis.icnet.pl] > Monday 20 December 2010 16:29:32 Aaro Koskinen wrote: > > You should update the ams_delta_keymap type as well, otherwise this > > patch will introduce the following sparse warning: > > > > CHECK arch/arm/mach-omap1/board-ams-delta.c > > arch/arm/mach-omap1/board-ams-delta.c:191:27: warning: incorrect type in initializer (different signedness) > > arch/arm/mach-omap1/board-ams-delta.c:191:27: expected unsigned int const [usertype] *keymap > > arch/arm/mach-omap1/board-ams-delta.c:191:27: got int static [toplevel] *<noident> > > Hi Aaro, > How did you get this output? I'm using OpenEmbedded as my development > environment. Running make with "C=1" (EXTRA_OEMAKE=" C=1 ") displays a > lot but the above. Running sparse by hand breaks with "unable to > open 'linux/init.h'". Any advice? I'm using the latest sparse from: git://git.kernel.org/pub/scm/devel/sparse/sparse.git I don't know about OpenEmbedded, but I've noticed that at least Debian ships with some old version that is missing many checks... A. ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-20 19:03 ` aaro.koskinen at nokia.com @ 2010-12-20 20:21 ` Janusz Krzysztofik -1 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-20 20:21 UTC (permalink / raw) To: aaro.koskinen Cc: dmitry.torokhov, linux-omap, linux-input, tony, linux-arm-kernel Monday 20 December 2010 20:03:58 aaro.koskinen@nokia.com wrote: > > I'm using the latest sparse from: > > git://git.kernel.org/pub/scm/devel/sparse/sparse.git > > I don't know about OpenEmbedded, but I've noticed that at least > Debian ships with some old version that is missing many checks... Aaro, Both you and Dmitry were right: an old sparse version. Once upgraded from 0.4.1 to 0.4.2 (Gentoo ebuild - OpenEmbedded doesn't build its own sparse binary, but uses a host provided one), now I get that issue reported. No more sparse warnings from me, I hope (until my sparse gets too old again ;). Thanks, Janusz ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v2] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-20 20:21 ` Janusz Krzysztofik 0 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-20 20:21 UTC (permalink / raw) To: linux-arm-kernel Monday 20 December 2010 20:03:58 aaro.koskinen at nokia.com wrote: > > I'm using the latest sparse from: > > git://git.kernel.org/pub/scm/devel/sparse/sparse.git > > I don't know about OpenEmbedded, but I've noticed that at least > Debian ships with some old version that is missing many checks... Aaro, Both you and Dmitry were right: an old sparse version. Once upgraded from 0.4.1 to 0.4.2 (Gentoo ebuild - OpenEmbedded doesn't build its own sparse binary, but uses a host provided one), now I get that issue reported. No more sparse warnings from me, I hope (until my sparse gets too old again ;). Thanks, Janusz ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v3] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-20 15:29 ` Aaro Koskinen @ 2010-12-20 21:09 ` Janusz Krzysztofik -1 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-20 21:09 UTC (permalink / raw) To: Aaro Koskinen Cc: Dmitry Torokhov, linux-omap, linux-input, Tony Lindgren, linux-arm-kernel Most keypad drivers make use of the <linux/input/matrix_keypad.h> defined macros, structures and inline functions. Convert omap-keypad driver to use those as well, as suggested by a compile time warning, hardcoded into the OMAP <palt/keypad.h>. Created against linux-2.6.37-rc5. Tested on Amstrad Delta. Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to board-h4. Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> --- v2 -> v3 changes: - update all board's keymap tables type to match the struct matrix_keymap_data .keymap member; thanks to Aaro Koskinen for pointing this out, - while being at it, correct one sparse reported issue found (3 times) in omap-keypad.c (Using plain integer as NULL pointer), and an omap-keypad related one found in board-htcherald.c (symbol 'htcherald_kp_data' was not declared. Should it be static?). v1 -> v2 changes, both requested by Dmitry Torokhov (thanks!): - while updating all boards, change rep and dbounce to bool, - put keycodes at the end of struct omap_kp and allocate it in one shot. arch/arm/mach-omap1/board-ams-delta.c | 130 +++++++++++++++---------------- arch/arm/mach-omap1/board-fsample.c | 67 ++++++++------- arch/arm/mach-omap1/board-h2.c | 75 +++++++++-------- arch/arm/mach-omap1/board-h3.c | 75 +++++++++-------- arch/arm/mach-omap1/board-htcherald.c | 98 ++++++++++++----------- arch/arm/mach-omap1/board-innovator.c | 21 ++--- arch/arm/mach-omap1/board-nokia770.c | 29 +++--- arch/arm/mach-omap1/board-osk.c | 21 ++--- arch/arm/mach-omap1/board-palmte.c | 28 +++--- arch/arm/mach-omap1/board-palmtt.c | 28 +++--- arch/arm/mach-omap1/board-palmz71.c | 30 ++++--- arch/arm/mach-omap1/board-perseus2.c | 69 ++++++++-------- arch/arm/mach-omap1/board-sx1.c | 57 +++++++------ arch/arm/mach-omap2/board-h4.c | 63 +++++++-------- arch/arm/plat-omap/include/plat/keypad.h | 35 ++++---- drivers/input/keyboard/omap-keypad.c | 41 ++++----- include/linux/input/matrix_keypad.h | 2 17 files changed, 458 insertions(+), 411 deletions(-) --- linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h.orig 2010-12-09 23:07:38.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h 2010-12-20 18:15:11.000000000 +0100 @@ -10,16 +10,18 @@ #ifndef ASMARM_ARCH_KEYPAD_H #define ASMARM_ARCH_KEYPAD_H -#warning: Please update the board to use matrix_keypad.h instead +#ifndef CONFIG_ARCH_OMAP1 +#warning Please update the board to use matrix-keypad driver +#endif +#include <linux/input/matrix_keypad.h> struct omap_kp_platform_data { int rows; int cols; - int *keymap; - unsigned int keymapsize; - unsigned int rep:1; + const struct matrix_keymap_data *keymap_data; + bool rep; unsigned long delay; - unsigned int dbounce:1; + bool dbounce; /* specific to OMAP242x*/ unsigned int *row_gpios; unsigned int *col_gpios; @@ -28,18 +30,21 @@ struct omap_kp_platform_data { /* Group (0..3) -- when multiple keys are pressed, only the * keys pressed in the same group are considered as pressed. This is * in order to workaround certain crappy HW designs that produce ghost - * keypresses. */ -#define GROUP_0 (0 << 16) -#define GROUP_1 (1 << 16) -#define GROUP_2 (2 << 16) -#define GROUP_3 (3 << 16) + * keypresses. Two free bits, not used by neither row/col nor keynum, + * must be available for use as group bits. The below GROUP_SHIFT + * macro definition is based on some prior knowledge of the + * matrix_keypad defined KEY() macro internals. + */ +#define GROUP_SHIFT 14 +#define GROUP_0 (0 << GROUP_SHIFT) +#define GROUP_1 (1 << GROUP_SHIFT) +#define GROUP_2 (2 << GROUP_SHIFT) +#define GROUP_3 (3 << GROUP_SHIFT) #define GROUP_MASK GROUP_3 +#if KEY_MAX & GROUP_MASK +#error Group bits in conflict with keynum bits +#endif -#define KEY_PERSISTENT 0x00800000 -#define KEYNUM_MASK 0x00EFFFFF -#define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val)) -#define PERSISTENT_KEY(col, row) (((col) << 28) | ((row) << 24) | \ - KEY_PERSISTENT) #endif --- linux-2.6.37-rc5/include/linux/input/matrix_keypad.h.orig 2010-12-09 23:09:05.000000000 +0100 +++ linux-2.6.37-rc5/include/linux/input/matrix_keypad.h 2010-12-20 18:15:11.000000000 +0100 @@ -9,7 +9,7 @@ #define KEY(row, col, val) ((((row) & (MATRIX_MAX_ROWS - 1)) << 24) |\ (((col) & (MATRIX_MAX_COLS - 1)) << 16) |\ - (val & 0xffff)) + ((val) & 0xffff)) #define KEY_ROW(k) (((k) >> 24) & 0xff) #define KEY_COL(k) (((k) >> 16) & 0xff) --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12-09 23:08:09.000000000 +0100 +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-20 18:15:11.000000000 +0100 @@ -65,7 +65,6 @@ struct omap_kp { static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); -static int *keymap; static unsigned int *row_gpios; static unsigned int *col_gpios; @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o } } -static inline int omap_kp_find_key(int col, int row) -{ - int i, key; - - key = KEY(col, row, 0); - for (i = 0; keymap[i] != 0; i++) - if ((keymap[i] & 0xff000000) == key) - return keymap[i] & 0x00ffffff; - return -1; -} - static void omap_kp_tasklet(unsigned long data) { struct omap_kp *omap_kp_data = (struct omap_kp *) data; + unsigned short *keycodes = omap_kp_data->input->keycode; + unsigned int row_shift = get_count_order(omap_kp_data->cols); unsigned char new_state[8], changed, key_down = 0; int col, row; int spurious = 0; @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon row, (new_state[col] & (1 << row)) ? "pressed" : "released"); #else - key = omap_kp_find_key(col, row); + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; if (key < 0) { printk(KERN_WARNING "omap-keypad: Spurious key event %d-%d\n", @@ -298,13 +288,18 @@ static int __devinit omap_kp_probe(struc struct input_dev *input_dev; struct omap_kp_platform_data *pdata = pdev->dev.platform_data; int i, col_idx, row_idx, irq_idx, ret; + unsigned int row_shift, keycodemax; - if (!pdata->rows || !pdata->cols || !pdata->keymap) { - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); return -EINVAL; } - omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); + row_shift = get_count_order(pdata->cols); + keycodemax = pdata->rows << row_shift; + + omap_kp = kzalloc(sizeof(struct omap_kp) + + keycodemax * sizeof(unsigned short), GFP_KERNEL); input_dev = input_allocate_device(); if (!omap_kp || !input_dev) { kfree(omap_kp); @@ -320,7 +315,9 @@ static int __devinit omap_kp_probe(struc if (!cpu_is_omap24xx()) omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); - keymap = pdata->keymap; + input_dev->keycode = &omap_kp[1]; + input_dev->keycodesize = sizeof(unsigned short); + input_dev->keycodemax = keycodemax; if (pdata->rep) __set_bit(EV_REP, input_dev->evbit); @@ -374,8 +371,8 @@ static int __devinit omap_kp_probe(struc /* setup input device */ __set_bit(EV_KEY, input_dev->evbit); - for (i = 0; keymap[i] != 0; i++) - __set_bit(keymap[i] & KEY_MAX, input_dev->keybit); + matrix_keypad_build_keymap(pdata->keymap_data, row_shift, + input_dev->keycode, input_dev->keybit); input_dev->name = "omap-keypad"; input_dev->phys = "omap-keypad/input0"; input_dev->dev.parent = &pdev->dev; @@ -416,7 +413,7 @@ static int __devinit omap_kp_probe(struc return 0; err5: for (i = irq_idx - 1; i >=0; i--) - free_irq(row_gpios[i], 0); + free_irq(row_gpios[i], NULL); err4: input_unregister_device(omap_kp->input); input_dev = NULL; @@ -447,11 +444,11 @@ static int __devexit omap_kp_remove(stru gpio_free(col_gpios[i]); for (i = 0; i < omap_kp->rows; i++) { gpio_free(row_gpios[i]); - free_irq(gpio_to_irq(row_gpios[i]), 0); + free_irq(gpio_to_irq(row_gpios[i]), NULL); } } else { omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); - free_irq(omap_kp->irq, 0); + free_irq(omap_kp->irq, NULL); } del_timer_sync(&omap_kp->timer); --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-20 19:53:19.000000000 +0100 @@ -43,84 +43,82 @@ static u8 ams_delta_latch1_reg; static u16 ams_delta_latch2_reg; -static int ams_delta_keymap[] = { +static const unsigned int ams_delta_keymap[] = { KEY(0, 0, KEY_F1), /* Advert */ - KEY(3, 0, KEY_COFFEE), /* Games */ - KEY(2, 0, KEY_QUESTION), /* Directory */ - KEY(3, 2, KEY_CONNECT), /* Internet */ - KEY(2, 1, KEY_SHOP), /* Services */ + KEY(0, 3, KEY_COFFEE), /* Games */ + KEY(0, 2, KEY_QUESTION), /* Directory */ + KEY(2, 3, KEY_CONNECT), /* Internet */ + KEY(1, 2, KEY_SHOP), /* Services */ KEY(1, 1, KEY_PHONE), /* VoiceMail */ - KEY(1, 0, KEY_DELETE), /* Delete */ + KEY(0, 1, KEY_DELETE), /* Delete */ KEY(2, 2, KEY_PLAY), /* Play */ - KEY(0, 1, KEY_PAGEUP), /* Up */ - KEY(3, 1, KEY_PAGEDOWN), /* Down */ - KEY(0, 2, KEY_EMAIL), /* ReadEmail */ - KEY(1, 2, KEY_STOP), /* Stop */ + KEY(1, 0, KEY_PAGEUP), /* Up */ + KEY(1, 3, KEY_PAGEDOWN), /* Down */ + KEY(2, 0, KEY_EMAIL), /* ReadEmail */ + KEY(2, 1, KEY_STOP), /* Stop */ /* Numeric keypad portion */ - KEY(7, 0, KEY_KP1), - KEY(6, 0, KEY_KP2), - KEY(5, 0, KEY_KP3), - KEY(7, 1, KEY_KP4), - KEY(6, 1, KEY_KP5), - KEY(5, 1, KEY_KP6), - KEY(7, 2, KEY_KP7), - KEY(6, 2, KEY_KP8), - KEY(5, 2, KEY_KP9), - KEY(6, 3, KEY_KP0), - KEY(7, 3, KEY_KPASTERISK), - KEY(5, 3, KEY_KPDOT), /* # key */ - KEY(2, 7, KEY_NUMLOCK), /* Mute */ - KEY(1, 7, KEY_KPMINUS), /* Recall */ - KEY(1, 6, KEY_KPPLUS), /* Redial */ - KEY(6, 7, KEY_KPSLASH), /* Handsfree */ - KEY(0, 6, KEY_ENTER), /* Video */ - - KEY(4, 7, KEY_CAMERA), /* Photo */ - - KEY(4, 0, KEY_F2), /* Home */ - KEY(4, 1, KEY_F3), /* Office */ - KEY(4, 2, KEY_F4), /* Mobile */ + KEY(0, 7, KEY_KP1), + KEY(0, 6, KEY_KP2), + KEY(0, 5, KEY_KP3), + KEY(1, 7, KEY_KP4), + KEY(1, 6, KEY_KP5), + KEY(1, 5, KEY_KP6), + KEY(2, 7, KEY_KP7), + KEY(2, 6, KEY_KP8), + KEY(2, 5, KEY_KP9), + KEY(3, 6, KEY_KP0), + KEY(3, 7, KEY_KPASTERISK), + KEY(3, 5, KEY_KPDOT), /* # key */ + KEY(7, 2, KEY_NUMLOCK), /* Mute */ + KEY(7, 1, KEY_KPMINUS), /* Recall */ + KEY(6, 1, KEY_KPPLUS), /* Redial */ + KEY(7, 6, KEY_KPSLASH), /* Handsfree */ + KEY(6, 0, KEY_ENTER), /* Video */ + + KEY(7, 4, KEY_CAMERA), /* Photo */ + + KEY(0, 4, KEY_F2), /* Home */ + KEY(1, 4, KEY_F3), /* Office */ + KEY(2, 4, KEY_F4), /* Mobile */ KEY(7, 7, KEY_F5), /* SMS */ - KEY(5, 7, KEY_F6), /* Email */ + KEY(7, 5, KEY_F6), /* Email */ /* QWERTY portion of keypad */ - KEY(4, 3, KEY_Q), + KEY(3, 4, KEY_Q), KEY(3, 3, KEY_W), - KEY(2, 3, KEY_E), - KEY(1, 3, KEY_R), - KEY(0, 3, KEY_T), - KEY(7, 4, KEY_Y), - KEY(6, 4, KEY_U), - KEY(5, 4, KEY_I), + KEY(3, 2, KEY_E), + KEY(3, 1, KEY_R), + KEY(3, 0, KEY_T), + KEY(4, 7, KEY_Y), + KEY(4, 6, KEY_U), + KEY(4, 5, KEY_I), KEY(4, 4, KEY_O), - KEY(3, 4, KEY_P), + KEY(4, 3, KEY_P), - KEY(2, 4, KEY_A), - KEY(1, 4, KEY_S), - KEY(0, 4, KEY_D), - KEY(7, 5, KEY_F), - KEY(6, 5, KEY_G), + KEY(4, 2, KEY_A), + KEY(4, 1, KEY_S), + KEY(4, 0, KEY_D), + KEY(5, 7, KEY_F), + KEY(5, 6, KEY_G), KEY(5, 5, KEY_H), - KEY(4, 5, KEY_J), - KEY(3, 5, KEY_K), - KEY(2, 5, KEY_L), - - KEY(1, 5, KEY_Z), - KEY(0, 5, KEY_X), - KEY(7, 6, KEY_C), + KEY(5, 4, KEY_J), + KEY(5, 3, KEY_K), + KEY(5, 2, KEY_L), + + KEY(5, 1, KEY_Z), + KEY(5, 0, KEY_X), + KEY(6, 7, KEY_C), KEY(6, 6, KEY_V), - KEY(5, 6, KEY_B), - KEY(4, 6, KEY_N), - KEY(3, 6, KEY_M), - KEY(2, 6, KEY_SPACE), + KEY(6, 5, KEY_B), + KEY(6, 4, KEY_N), + KEY(6, 3, KEY_M), + KEY(6, 2, KEY_SPACE), - KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */ - KEY(3, 7, KEY_LEFTCTRL), /* Vol down */ - - 0 + KEY(7, 0, KEY_LEFTSHIFT), /* Vol up */ + KEY(7, 3, KEY_LEFTCTRL), /* Vol down */ }; void ams_delta_latch1_write(u8 mask, u8 value) @@ -189,11 +187,15 @@ static struct resource ams_delta_kp_reso }, }; +static const struct matrix_keymap_data ams_delta_keymap_data = { + .keymap = ams_delta_keymap, + .keymap_size = ARRAY_SIZE(ams_delta_keymap), +}; + static struct omap_kp_platform_data ams_delta_kp_data = { .rows = 8, .cols = 8, - .keymap = ams_delta_keymap, - .keymapsize = ARRAY_SIZE(ams_delta_keymap), + .keymap_data = &ams_delta_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c 2010-12-20 19:53:49.000000000 +0100 @@ -69,36 +69,35 @@ #define fsample_cpld_clear(bit) \ fsample_cpld_write(0xf0 | ((bit) & 15), FSAMPLE_CPLD_SET_CLR) -static int fsample_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 +static const unsigned int fsample_keymap[] = { + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -253,11 +252,15 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data fsample_keymap_data = { + .keymap = fsample_keymap, + .keymap_size = ARRAY_SIZE(fsample_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = fsample_keymap, - .keymapsize = ARRAY_SIZE(fsample_keymap), + .keymap_data = &fsample_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c 2010-12-20 19:54:01.000000000 +0100 @@ -52,43 +52,42 @@ /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ #define OMAP1610_ETHR_START 0x04000300 -static int h2_keymap[] = { +static const unsigned int h2_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; static struct mtd_partition h2_nor_partitions[] = { @@ -270,14 +269,18 @@ static struct resource h2_kp_resources[] }, }; +static const struct matrix_keymap_data h2_keymap_data = { + .keymap = h2_keymap, + .keymap_size = ARRAY_SIZE(h2_keymap), +}; + static struct omap_kp_platform_data h2_kp_data = { .rows = 8, .cols = 8, - .keymap = h2_keymap, - .keymapsize = ARRAY_SIZE(h2_keymap), - .rep = 1, + .keymap_data = &h2_keymap_data, + .rep = true, .delay = 9, - .dbounce = 1, + .dbounce = true, }; static struct platform_device h2_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c 2010-12-20 19:54:10.000000000 +0100 @@ -56,43 +56,42 @@ #define H3_TS_GPIO 48 -static int h3_keymap[] = { +static const unsigned int h3_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; @@ -305,14 +304,18 @@ static struct resource h3_kp_resources[] }, }; +static const struct matrix_keymap_data h3_keymap_data = { + .keymap = h3_keymap, + .keymap_size = ARRAY_SIZE(h3_keymap), +}; + static struct omap_kp_platform_data h3_kp_data = { .rows = 8, .cols = 8, - .keymap = h3_keymap, - .keymapsize = ARRAY_SIZE(h3_keymap), - .rep = 1, + .keymap_data = &h3_keymap_data, + .rep = true, .delay = 9, - .dbounce = 1, + .dbounce = true, }; static struct platform_device h3_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c 2010-12-20 19:54:18.000000000 +0100 @@ -180,64 +180,68 @@ /* Keyboard definition */ -static int htc_herald_keymap[] = { +static const unsigned int htc_herald_keymap[] = { KEY(0, 0, KEY_RECORD), /* Mail button */ - KEY(0, 1, KEY_CAMERA), /* Camera */ - KEY(0, 2, KEY_PHONE), /* Send key */ - KEY(0, 3, KEY_VOLUMEUP), /* Volume up */ - KEY(0, 4, KEY_F2), /* Right bar (landscape) */ - KEY(0, 5, KEY_MAIL), /* Win key (portrait) */ - KEY(0, 6, KEY_DIRECTORY), /* Right bar (protrait) */ - KEY(1, 0, KEY_LEFTCTRL), /* Windows key */ + KEY(1, 0, KEY_CAMERA), /* Camera */ + KEY(2, 0, KEY_PHONE), /* Send key */ + KEY(3, 0, KEY_VOLUMEUP), /* Volume up */ + KEY(4, 0, KEY_F2), /* Right bar (landscape) */ + KEY(5, 0, KEY_MAIL), /* Win key (portrait) */ + KEY(6, 0, KEY_DIRECTORY), /* Right bar (protrait) */ + KEY(0, 1, KEY_LEFTCTRL), /* Windows key */ KEY(1, 1, KEY_COMMA), - KEY(1, 2, KEY_M), - KEY(1, 3, KEY_K), - KEY(1, 4, KEY_SLASH), /* OK key */ - KEY(1, 5, KEY_I), - KEY(1, 6, KEY_U), - KEY(2, 0, KEY_LEFTALT), - KEY(2, 1, KEY_TAB), + KEY(2, 1, KEY_M), + KEY(3, 1, KEY_K), + KEY(4, 1, KEY_SLASH), /* OK key */ + KEY(5, 1, KEY_I), + KEY(6, 1, KEY_U), + KEY(0, 2, KEY_LEFTALT), + KEY(1, 2, KEY_TAB), KEY(2, 2, KEY_N), - KEY(2, 3, KEY_J), - KEY(2, 4, KEY_ENTER), - KEY(2, 5, KEY_H), - KEY(2, 6, KEY_Y), - KEY(3, 0, KEY_SPACE), - KEY(3, 1, KEY_L), - KEY(3, 2, KEY_B), + KEY(3, 2, KEY_J), + KEY(4, 2, KEY_ENTER), + KEY(5, 2, KEY_H), + KEY(6, 2, KEY_Y), + KEY(0, 3, KEY_SPACE), + KEY(1, 3, KEY_L), + KEY(2, 3, KEY_B), KEY(3, 3, KEY_V), - KEY(3, 4, KEY_BACKSPACE), - KEY(3, 5, KEY_G), - KEY(3, 6, KEY_T), - KEY(4, 0, KEY_CAPSLOCK), /* Shift */ - KEY(4, 1, KEY_C), - KEY(4, 2, KEY_F), - KEY(4, 3, KEY_R), + KEY(4, 3, KEY_BACKSPACE), + KEY(5, 3, KEY_G), + KEY(6, 3, KEY_T), + KEY(0, 4, KEY_CAPSLOCK), /* Shift */ + KEY(1, 4, KEY_C), + KEY(2, 4, KEY_F), + KEY(3, 4, KEY_R), KEY(4, 4, KEY_O), - KEY(4, 5, KEY_E), - KEY(4, 6, KEY_D), - KEY(5, 0, KEY_X), - KEY(5, 1, KEY_Z), - KEY(5, 2, KEY_S), - KEY(5, 3, KEY_W), - KEY(5, 4, KEY_P), + KEY(5, 4, KEY_E), + KEY(6, 4, KEY_D), + KEY(0, 5, KEY_X), + KEY(1, 5, KEY_Z), + KEY(2, 5, KEY_S), + KEY(3, 5, KEY_W), + KEY(4, 5, KEY_P), KEY(5, 5, KEY_Q), - KEY(5, 6, KEY_A), - KEY(6, 0, KEY_CONNECT), /* Voice button */ - KEY(6, 2, KEY_CANCEL), /* End key */ - KEY(6, 3, KEY_VOLUMEDOWN), /* Volume down */ - KEY(6, 4, KEY_F1), /* Left bar (landscape) */ - KEY(6, 5, KEY_WWW), /* OK button (portrait) */ + KEY(6, 5, KEY_A), + KEY(0, 6, KEY_CONNECT), /* Voice button */ + KEY(2, 6, KEY_CANCEL), /* End key */ + KEY(3, 6, KEY_VOLUMEDOWN), /* Volume down */ + KEY(4, 6, KEY_F1), /* Left bar (landscape) */ + KEY(5, 6, KEY_WWW), /* OK button (portrait) */ KEY(6, 6, KEY_CALENDAR), /* Left bar (portrait) */ - 0 }; -struct omap_kp_platform_data htcherald_kp_data = { +static const struct matrix_keymap_data htc_herald_keymap_data = { + .keymap = htc_herald_keymap, + .keymap_size = ARRAY_SIZE(htc_herald_keymap), +}; + +static struct omap_kp_platform_data htcherald_kp_data = { .rows = 7, .cols = 7, .delay = 20, - .rep = 1, - .keymap = htc_herald_keymap, + .rep = true, + .keymap_data = &htc_herald_keymap_data, }; static struct resource kp_resources[] = { @@ -278,7 +282,7 @@ static struct gpio_keys_button herald_gp static struct gpio_keys_platform_data herald_gpio_keys_data = { .buttons = herald_gpio_keys_table, .nbuttons = ARRAY_SIZE(herald_gpio_keys_table), - .rep = 1, + .rep = true, }; static struct platform_device herald_gpiokeys_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c 2010-12-20 19:54:32.000000000 +0100 @@ -44,17 +44,16 @@ /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ #define INNOVATOR1610_ETHR_START 0x04000300 -static int innovator_keymap[] = { +static const unsigned int innovator_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 3, KEY_DOWN), + KEY(3, 0, KEY_DOWN), KEY(1, 1, KEY_F2), - KEY(1, 2, KEY_RIGHT), - KEY(2, 0, KEY_F3), - KEY(2, 1, KEY_F4), + KEY(2, 1, KEY_RIGHT), + KEY(0, 2, KEY_F3), + KEY(1, 2, KEY_F4), KEY(2, 2, KEY_UP), - KEY(3, 2, KEY_ENTER), + KEY(2, 3, KEY_ENTER), KEY(3, 3, KEY_LEFT), - 0 }; static struct mtd_partition innovator_partitions[] = { @@ -126,11 +125,15 @@ static struct resource innovator_kp_reso }, }; +static const struct matrix_keymap_data innovator_keymap_data = { + .keymap = innovator_keymap, + .keymap_size = ARRAY_SIZE(innovator_keymap), +}; + static struct omap_kp_platform_data innovator_kp_data = { .rows = 8, .cols = 8, - .keymap = innovator_keymap, - .keymapsize = ARRAY_SIZE(innovator_keymap), + .keymap_data = &innovator_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c 2010-12-20 19:54:44.000000000 +0100 @@ -56,19 +56,18 @@ static void __init omap_nokia770_init_ir omap_init_irq(); } -static int nokia770_keymap[] = { - KEY(0, 1, GROUP_0 | KEY_UP), - KEY(0, 2, GROUP_1 | KEY_F5), - KEY(1, 0, GROUP_0 | KEY_LEFT), +static const unsigned int nokia770_keymap[] = { + KEY(1, 0, GROUP_0 | KEY_UP), + KEY(2, 0, GROUP_1 | KEY_F5), + KEY(0, 1, GROUP_0 | KEY_LEFT), KEY(1, 1, GROUP_0 | KEY_ENTER), - KEY(1, 2, GROUP_0 | KEY_RIGHT), - KEY(2, 0, GROUP_1 | KEY_ESC), - KEY(2, 1, GROUP_0 | KEY_DOWN), + KEY(2, 1, GROUP_0 | KEY_RIGHT), + KEY(0, 2, GROUP_1 | KEY_ESC), + KEY(1, 2, GROUP_0 | KEY_DOWN), KEY(2, 2, GROUP_1 | KEY_F4), - KEY(3, 0, GROUP_2 | KEY_F7), - KEY(3, 1, GROUP_2 | KEY_F8), - KEY(3, 2, GROUP_2 | KEY_F6), - 0 + KEY(0, 3, GROUP_2 | KEY_F7), + KEY(1, 3, GROUP_2 | KEY_F8), + KEY(2, 3, GROUP_2 | KEY_F6), }; static struct resource nokia770_kp_resources[] = { @@ -79,11 +78,15 @@ static struct resource nokia770_kp_resou }, }; +static const struct matrix_keymap_data nokia770_keymap_data = { + .keymap = nokia770_keymap, + .keymap_size = ARRAY_SIZE(nokia770_keymap), +}; + static struct omap_kp_platform_data nokia770_kp_data = { .rows = 8, .cols = 8, - .keymap = nokia770_keymap, - .keymapsize = ARRAY_SIZE(nokia770_keymap), + .keymap_data = &nokia770_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c 2010-12-20 19:55:13.000000000 +0100 @@ -338,25 +338,28 @@ static struct i2c_board_info __initdata */ }; -static const int osk_keymap[] = { +static const unsigned int osk_keymap[] = { /* KEY(col, row, code) */ KEY(0, 0, KEY_F1), /* SW4 */ - KEY(0, 3, KEY_UP), /* (sw2/up) */ + KEY(3, 0, KEY_UP), /* (sw2/up) */ KEY(1, 1, KEY_LEFTCTRL), /* SW5 */ - KEY(1, 2, KEY_LEFT), /* (sw2/left) */ - KEY(2, 0, KEY_SPACE), /* SW3 */ - KEY(2, 1, KEY_ESC), /* SW6 */ + KEY(2, 1, KEY_LEFT), /* (sw2/left) */ + KEY(0, 2, KEY_SPACE), /* SW3 */ + KEY(1, 2, KEY_ESC), /* SW6 */ KEY(2, 2, KEY_DOWN), /* (sw2/down) */ - KEY(3, 2, KEY_ENTER), /* (sw2/select) */ + KEY(2, 3, KEY_ENTER), /* (sw2/select) */ KEY(3, 3, KEY_RIGHT), /* (sw2/right) */ - 0 +}; + +static const struct matrix_keymap_data osk_keymap_data = { + .keymap = osk_keymap, + .keymap_size = ARRAY_SIZE(osk_keymap), }; static struct omap_kp_platform_data osk_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) osk_keymap, - .keymapsize = ARRAY_SIZE(osk_keymap), + .keymap_data = &osk_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c 2010-12-20 19:56:22.000000000 +0100 @@ -65,25 +65,29 @@ static void __init omap_palmte_init_irq( omap_init_irq(); } -static const int palmte_keymap[] = { +static const unsigned int palmte_keymap[] = { KEY(0, 0, KEY_F1), /* Calendar */ - KEY(0, 1, KEY_F2), /* Contacts */ - KEY(0, 2, KEY_F3), /* Tasks List */ - KEY(0, 3, KEY_F4), /* Note Pad */ - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), /* Contacts */ + KEY(2, 0, KEY_F3), /* Tasks List */ + KEY(3, 0, KEY_F4), /* Note Pad */ + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), +}; + +static const struct matrix_keymap_data palmte_keymap_data = { + .keymap = palmte_keymap, + .keymap_size = ARRAY_SIZE(palmte_keymap), }; static struct omap_kp_platform_data palmte_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) palmte_keymap, - .rep = 1, + .keymap_data = &palmte_keymap_data, + .rep = true, .delay = 12, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c 2010-12-20 19:56:36.000000000 +0100 @@ -51,19 +51,18 @@ #define PALMTT_MMC_WP_GPIO 8 #define PALMTT_HDQ_GPIO 11 -static int palmtt_keymap[] = { +static const unsigned int palmtt_keymap[] = { KEY(0, 0, KEY_ESC), - KEY(0, 1, KEY_SPACE), - KEY(0, 2, KEY_LEFTCTRL), - KEY(0, 3, KEY_TAB), - KEY(0, 4, KEY_ENTER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_SPACE), + KEY(2, 0, KEY_LEFTCTRL), + KEY(3, 0, KEY_TAB), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(2, 0, KEY_SLEEP), - KEY(2, 4, KEY_Y), - 0 + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(0, 2, KEY_SLEEP), + KEY(4, 2, KEY_Y), }; static struct mtd_partition palmtt_partitions[] = { @@ -136,10 +135,15 @@ static struct resource palmtt_kp_resourc }, }; +static const struct matrix_keymap_data palmtt_keymap_data = { + .keymap = palmtt_keymap, + .keymap_size = ARRAY_SIZE(palmtt_keymap), +}; + static struct omap_kp_platform_data palmtt_kp_data = { .rows = 6, .cols = 3, - .keymap = palmtt_keymap, + .keymap_data = &palmtt_keymap_data, }; static struct platform_device palmtt_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c 2010-12-20 19:56:48.000000000 +0100 @@ -64,26 +64,30 @@ omap_palmz71_init_irq(void) omap_init_irq(); } -static int palmz71_keymap[] = { +static const unsigned int palmz71_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 1, KEY_F2), - KEY(0, 2, KEY_F3), - KEY(0, 3, KEY_F4), - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), + KEY(2, 0, KEY_F3), + KEY(3, 0, KEY_F4), + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - KEY(2, 0, KEY_CAMERA), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), + KEY(0, 2, KEY_CAMERA), +}; + +static const struct matrix_keymap_data palmz71_keymap_data = { + .keymap = palmz71_keymap, + .keymap_size = ARRAY_SIZE(palmz71_keymap), }; static struct omap_kp_platform_data palmz71_kp_data = { .rows = 8, .cols = 8, - .keymap = palmz71_keymap, - .rep = 1, + .keymap_data = &palmz71_keymap_data, + .rep = true, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c 2010-12-20 19:57:05.000000000 +0100 @@ -36,36 +36,35 @@ #include <plat/common.h> #include <plat/board.h> -static int p2_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 +static const unsigned int p2_keymap[] = { + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -211,13 +210,17 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data p2_keymap_data = { + .keymap = p2_keymap, + .keymap_size = ARRAY_SIZE(p2_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = p2_keymap, - .keymapsize = ARRAY_SIZE(p2_keymap), + .keymap_data = &p2_keymap_data, .delay = 4, - .dbounce = 1, + .dbounce = true, }; static struct platform_device kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c 2010-12-20 19:57:14.000000000 +0100 @@ -164,36 +164,35 @@ EXPORT_SYMBOL(sx1_setusbpower); /*----------- Keypad -------------------------*/ -static int sx1_keymap[] = { - KEY(5, 3, GROUP_0 | 117), /* camera Qt::Key_F17 */ - KEY(0, 4, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ - KEY(1, 4, GROUP_2 | 114), /* voice memo */ - KEY(2, 4, GROUP_3 | 114), /* voice memo */ +static const unsigned int sx1_keymap[] = { + KEY(3, 5, GROUP_0 | 117), /* camera Qt::Key_F17 */ + KEY(4, 0, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ + KEY(4, 1, GROUP_2 | 114), /* voice memo */ + KEY(4, 2, GROUP_3 | 114), /* voice memo */ KEY(0, 0, GROUP_1 | KEY_F12), /* red button Qt::Key_Hangup */ - KEY(4, 3, GROUP_1 | KEY_LEFT), - KEY(2, 3, GROUP_1 | KEY_DOWN), - KEY(1, 3, GROUP_1 | KEY_RIGHT), - KEY(0, 3, GROUP_1 | KEY_UP), + KEY(3, 4, GROUP_1 | KEY_LEFT), + KEY(3, 2, GROUP_1 | KEY_DOWN), + KEY(3, 1, GROUP_1 | KEY_RIGHT), + KEY(3, 0, GROUP_1 | KEY_UP), KEY(3, 3, GROUP_1 | KEY_POWER), /* joystick press or Qt::Key_Select */ - KEY(5, 0, GROUP_1 | KEY_1), - KEY(4, 0, GROUP_1 | KEY_2), - KEY(3, 0, GROUP_1 | KEY_3), - KEY(3, 4, GROUP_1 | KEY_4), + KEY(0, 5, GROUP_1 | KEY_1), + KEY(0, 4, GROUP_1 | KEY_2), + KEY(0, 3, GROUP_1 | KEY_3), + KEY(4, 3, GROUP_1 | KEY_4), KEY(4, 4, GROUP_1 | KEY_5), - KEY(5, 4, GROUP_1 | KEY_KPASTERISK),/* "*" */ - KEY(4, 1, GROUP_1 | KEY_6), - KEY(5, 1, GROUP_1 | KEY_7), - KEY(3, 1, GROUP_1 | KEY_8), - KEY(3, 2, GROUP_1 | KEY_9), - KEY(5, 2, GROUP_1 | KEY_0), - KEY(4, 2, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ - KEY(0, 1, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ - KEY(1, 2, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ + KEY(4, 5, GROUP_1 | KEY_KPASTERISK),/* "*" */ + KEY(1, 4, GROUP_1 | KEY_6), + KEY(1, 5, GROUP_1 | KEY_7), + KEY(1, 3, GROUP_1 | KEY_8), + KEY(2, 3, GROUP_1 | KEY_9), + KEY(2, 5, GROUP_1 | KEY_0), + KEY(2, 4, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ + KEY(1, 0, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ + KEY(2, 1, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ KEY(2, 2, GROUP_1 | KEY_F8), /* right soft Qt::Key_Back */ - KEY(2, 1, GROUP_1 | KEY_LEFTSHIFT), /* shift */ + KEY(1, 2, GROUP_1 | KEY_LEFTSHIFT), /* shift */ KEY(1, 1, GROUP_1 | KEY_BACKSPACE), /* C (clear) */ - KEY(0, 2, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ - 0 + KEY(2, 0, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ }; static struct resource sx1_kp_resources[] = { @@ -204,11 +203,15 @@ static struct resource sx1_kp_resources[ }, }; +static const struct matrix_keymap_data sx1_keymap_data = { + .keymap = sx1_keymap, + .keymap_size = ARRAY_SIZE(sx1_keymap), +}; + static struct omap_kp_platform_data sx1_kp_data = { .rows = 6, .cols = 6, - .keymap = sx1_keymap, - .keymapsize = ARRAY_SIZE(sx1_keymap), + .keymap_data = &sx1_keymap_data, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c 2010-12-20 19:57:32.000000000 +0100 @@ -51,38 +51,37 @@ static unsigned int row_gpios[6] = { 88, 89, 124, 11, 6, 96 }; static unsigned int col_gpios[7] = { 90, 91, 100, 36, 12, 97, 98 }; -static int h4_keymap[] = { +static const unsigned int h4_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_A), - KEY(0, 3, KEY_B), - KEY(0, 4, KEY_C), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_A), + KEY(3, 0, KEY_B), + KEY(4, 0, KEY_C), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_E), - KEY(1, 3, KEY_F), - KEY(1, 4, KEY_G), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_I), + KEY(2, 1, KEY_E), + KEY(3, 1, KEY_F), + KEY(4, 1, KEY_G), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_I), KEY(2, 2, KEY_J), - KEY(2, 3, KEY_K), - KEY(2, 4, KEY_3), - KEY(3, 0, KEY_M), - KEY(3, 1, KEY_N), - KEY(3, 2, KEY_O), + KEY(3, 2, KEY_K), + KEY(4, 2, KEY_3), + KEY(0, 3, KEY_M), + KEY(1, 3, KEY_N), + KEY(2, 3, KEY_O), KEY(3, 3, KEY_P), - KEY(3, 4, KEY_Q), - KEY(4, 0, KEY_R), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_T), - KEY(4, 3, KEY_U), + KEY(4, 3, KEY_Q), + KEY(0, 4, KEY_R), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_T), + KEY(3, 4, KEY_U), KEY(4, 4, KEY_ENTER), - KEY(5, 0, KEY_V), - KEY(5, 1, KEY_W), - KEY(5, 2, KEY_L), - KEY(5, 3, KEY_S), - KEY(5, 4, KEY_ENTER), - 0 + KEY(0, 5, KEY_V), + KEY(1, 5, KEY_W), + KEY(2, 5, KEY_L), + KEY(3, 5, KEY_S), + KEY(4, 5, KEY_ENTER), }; static struct mtd_partition h4_partitions[] = { @@ -136,12 +135,16 @@ static struct platform_device h4_flash_d .resource = &h4_flash_resource, }; +static const struct matrix_keymap_data h4_keymap_data = { + .keymap = h4_keymap, + .keymap_size = ARRAY_SIZE(h4_keymap), +}; + static struct omap_kp_platform_data h4_kp_data = { .rows = 6, .cols = 7, - .keymap = h4_keymap, - .keymapsize = ARRAY_SIZE(h4_keymap), - .rep = 1, + .keymap_data = &h4_keymap_data, + .rep = true, .row_gpios = row_gpios, .col_gpios = col_gpios, }; ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v3] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-20 21:09 ` Janusz Krzysztofik 0 siblings, 0 replies; 36+ messages in thread From: Janusz Krzysztofik @ 2010-12-20 21:09 UTC (permalink / raw) To: linux-arm-kernel Most keypad drivers make use of the <linux/input/matrix_keypad.h> defined macros, structures and inline functions. Convert omap-keypad driver to use those as well, as suggested by a compile time warning, hardcoded into the OMAP <palt/keypad.h>. Created against linux-2.6.37-rc5. Tested on Amstrad Delta. Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to board-h4. Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> --- v2 -> v3 changes: - update all board's keymap tables type to match the struct matrix_keymap_data .keymap member; thanks to Aaro Koskinen for pointing this out, - while being at it, correct one sparse reported issue found (3 times) in omap-keypad.c (Using plain integer as NULL pointer), and an omap-keypad related one found in board-htcherald.c (symbol 'htcherald_kp_data' was not declared. Should it be static?). v1 -> v2 changes, both requested by Dmitry Torokhov (thanks!): - while updating all boards, change rep and dbounce to bool, - put keycodes at the end of struct omap_kp and allocate it in one shot. arch/arm/mach-omap1/board-ams-delta.c | 130 +++++++++++++++---------------- arch/arm/mach-omap1/board-fsample.c | 67 ++++++++------- arch/arm/mach-omap1/board-h2.c | 75 +++++++++-------- arch/arm/mach-omap1/board-h3.c | 75 +++++++++-------- arch/arm/mach-omap1/board-htcherald.c | 98 ++++++++++++----------- arch/arm/mach-omap1/board-innovator.c | 21 ++--- arch/arm/mach-omap1/board-nokia770.c | 29 +++--- arch/arm/mach-omap1/board-osk.c | 21 ++--- arch/arm/mach-omap1/board-palmte.c | 28 +++--- arch/arm/mach-omap1/board-palmtt.c | 28 +++--- arch/arm/mach-omap1/board-palmz71.c | 30 ++++--- arch/arm/mach-omap1/board-perseus2.c | 69 ++++++++-------- arch/arm/mach-omap1/board-sx1.c | 57 +++++++------ arch/arm/mach-omap2/board-h4.c | 63 +++++++-------- arch/arm/plat-omap/include/plat/keypad.h | 35 ++++---- drivers/input/keyboard/omap-keypad.c | 41 ++++----- include/linux/input/matrix_keypad.h | 2 17 files changed, 458 insertions(+), 411 deletions(-) --- linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h.orig 2010-12-09 23:07:38.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h 2010-12-20 18:15:11.000000000 +0100 @@ -10,16 +10,18 @@ #ifndef ASMARM_ARCH_KEYPAD_H #define ASMARM_ARCH_KEYPAD_H -#warning: Please update the board to use matrix_keypad.h instead +#ifndef CONFIG_ARCH_OMAP1 +#warning Please update the board to use matrix-keypad driver +#endif +#include <linux/input/matrix_keypad.h> struct omap_kp_platform_data { int rows; int cols; - int *keymap; - unsigned int keymapsize; - unsigned int rep:1; + const struct matrix_keymap_data *keymap_data; + bool rep; unsigned long delay; - unsigned int dbounce:1; + bool dbounce; /* specific to OMAP242x*/ unsigned int *row_gpios; unsigned int *col_gpios; @@ -28,18 +30,21 @@ struct omap_kp_platform_data { /* Group (0..3) -- when multiple keys are pressed, only the * keys pressed in the same group are considered as pressed. This is * in order to workaround certain crappy HW designs that produce ghost - * keypresses. */ -#define GROUP_0 (0 << 16) -#define GROUP_1 (1 << 16) -#define GROUP_2 (2 << 16) -#define GROUP_3 (3 << 16) + * keypresses. Two free bits, not used by neither row/col nor keynum, + * must be available for use as group bits. The below GROUP_SHIFT + * macro definition is based on some prior knowledge of the + * matrix_keypad defined KEY() macro internals. + */ +#define GROUP_SHIFT 14 +#define GROUP_0 (0 << GROUP_SHIFT) +#define GROUP_1 (1 << GROUP_SHIFT) +#define GROUP_2 (2 << GROUP_SHIFT) +#define GROUP_3 (3 << GROUP_SHIFT) #define GROUP_MASK GROUP_3 +#if KEY_MAX & GROUP_MASK +#error Group bits in conflict with keynum bits +#endif -#define KEY_PERSISTENT 0x00800000 -#define KEYNUM_MASK 0x00EFFFFF -#define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val)) -#define PERSISTENT_KEY(col, row) (((col) << 28) | ((row) << 24) | \ - KEY_PERSISTENT) #endif --- linux-2.6.37-rc5/include/linux/input/matrix_keypad.h.orig 2010-12-09 23:09:05.000000000 +0100 +++ linux-2.6.37-rc5/include/linux/input/matrix_keypad.h 2010-12-20 18:15:11.000000000 +0100 @@ -9,7 +9,7 @@ #define KEY(row, col, val) ((((row) & (MATRIX_MAX_ROWS - 1)) << 24) |\ (((col) & (MATRIX_MAX_COLS - 1)) << 16) |\ - (val & 0xffff)) + ((val) & 0xffff)) #define KEY_ROW(k) (((k) >> 24) & 0xff) #define KEY_COL(k) (((k) >> 16) & 0xff) --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12-09 23:08:09.000000000 +0100 +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-20 18:15:11.000000000 +0100 @@ -65,7 +65,6 @@ struct omap_kp { static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); -static int *keymap; static unsigned int *row_gpios; static unsigned int *col_gpios; @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o } } -static inline int omap_kp_find_key(int col, int row) -{ - int i, key; - - key = KEY(col, row, 0); - for (i = 0; keymap[i] != 0; i++) - if ((keymap[i] & 0xff000000) == key) - return keymap[i] & 0x00ffffff; - return -1; -} - static void omap_kp_tasklet(unsigned long data) { struct omap_kp *omap_kp_data = (struct omap_kp *) data; + unsigned short *keycodes = omap_kp_data->input->keycode; + unsigned int row_shift = get_count_order(omap_kp_data->cols); unsigned char new_state[8], changed, key_down = 0; int col, row; int spurious = 0; @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon row, (new_state[col] & (1 << row)) ? "pressed" : "released"); #else - key = omap_kp_find_key(col, row); + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; if (key < 0) { printk(KERN_WARNING "omap-keypad: Spurious key event %d-%d\n", @@ -298,13 +288,18 @@ static int __devinit omap_kp_probe(struc struct input_dev *input_dev; struct omap_kp_platform_data *pdata = pdev->dev.platform_data; int i, col_idx, row_idx, irq_idx, ret; + unsigned int row_shift, keycodemax; - if (!pdata->rows || !pdata->cols || !pdata->keymap) { - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); return -EINVAL; } - omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); + row_shift = get_count_order(pdata->cols); + keycodemax = pdata->rows << row_shift; + + omap_kp = kzalloc(sizeof(struct omap_kp) + + keycodemax * sizeof(unsigned short), GFP_KERNEL); input_dev = input_allocate_device(); if (!omap_kp || !input_dev) { kfree(omap_kp); @@ -320,7 +315,9 @@ static int __devinit omap_kp_probe(struc if (!cpu_is_omap24xx()) omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); - keymap = pdata->keymap; + input_dev->keycode = &omap_kp[1]; + input_dev->keycodesize = sizeof(unsigned short); + input_dev->keycodemax = keycodemax; if (pdata->rep) __set_bit(EV_REP, input_dev->evbit); @@ -374,8 +371,8 @@ static int __devinit omap_kp_probe(struc /* setup input device */ __set_bit(EV_KEY, input_dev->evbit); - for (i = 0; keymap[i] != 0; i++) - __set_bit(keymap[i] & KEY_MAX, input_dev->keybit); + matrix_keypad_build_keymap(pdata->keymap_data, row_shift, + input_dev->keycode, input_dev->keybit); input_dev->name = "omap-keypad"; input_dev->phys = "omap-keypad/input0"; input_dev->dev.parent = &pdev->dev; @@ -416,7 +413,7 @@ static int __devinit omap_kp_probe(struc return 0; err5: for (i = irq_idx - 1; i >=0; i--) - free_irq(row_gpios[i], 0); + free_irq(row_gpios[i], NULL); err4: input_unregister_device(omap_kp->input); input_dev = NULL; @@ -447,11 +444,11 @@ static int __devexit omap_kp_remove(stru gpio_free(col_gpios[i]); for (i = 0; i < omap_kp->rows; i++) { gpio_free(row_gpios[i]); - free_irq(gpio_to_irq(row_gpios[i]), 0); + free_irq(gpio_to_irq(row_gpios[i]), NULL); } } else { omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); - free_irq(omap_kp->irq, 0); + free_irq(omap_kp->irq, NULL); } del_timer_sync(&omap_kp->timer); --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-20 19:53:19.000000000 +0100 @@ -43,84 +43,82 @@ static u8 ams_delta_latch1_reg; static u16 ams_delta_latch2_reg; -static int ams_delta_keymap[] = { +static const unsigned int ams_delta_keymap[] = { KEY(0, 0, KEY_F1), /* Advert */ - KEY(3, 0, KEY_COFFEE), /* Games */ - KEY(2, 0, KEY_QUESTION), /* Directory */ - KEY(3, 2, KEY_CONNECT), /* Internet */ - KEY(2, 1, KEY_SHOP), /* Services */ + KEY(0, 3, KEY_COFFEE), /* Games */ + KEY(0, 2, KEY_QUESTION), /* Directory */ + KEY(2, 3, KEY_CONNECT), /* Internet */ + KEY(1, 2, KEY_SHOP), /* Services */ KEY(1, 1, KEY_PHONE), /* VoiceMail */ - KEY(1, 0, KEY_DELETE), /* Delete */ + KEY(0, 1, KEY_DELETE), /* Delete */ KEY(2, 2, KEY_PLAY), /* Play */ - KEY(0, 1, KEY_PAGEUP), /* Up */ - KEY(3, 1, KEY_PAGEDOWN), /* Down */ - KEY(0, 2, KEY_EMAIL), /* ReadEmail */ - KEY(1, 2, KEY_STOP), /* Stop */ + KEY(1, 0, KEY_PAGEUP), /* Up */ + KEY(1, 3, KEY_PAGEDOWN), /* Down */ + KEY(2, 0, KEY_EMAIL), /* ReadEmail */ + KEY(2, 1, KEY_STOP), /* Stop */ /* Numeric keypad portion */ - KEY(7, 0, KEY_KP1), - KEY(6, 0, KEY_KP2), - KEY(5, 0, KEY_KP3), - KEY(7, 1, KEY_KP4), - KEY(6, 1, KEY_KP5), - KEY(5, 1, KEY_KP6), - KEY(7, 2, KEY_KP7), - KEY(6, 2, KEY_KP8), - KEY(5, 2, KEY_KP9), - KEY(6, 3, KEY_KP0), - KEY(7, 3, KEY_KPASTERISK), - KEY(5, 3, KEY_KPDOT), /* # key */ - KEY(2, 7, KEY_NUMLOCK), /* Mute */ - KEY(1, 7, KEY_KPMINUS), /* Recall */ - KEY(1, 6, KEY_KPPLUS), /* Redial */ - KEY(6, 7, KEY_KPSLASH), /* Handsfree */ - KEY(0, 6, KEY_ENTER), /* Video */ - - KEY(4, 7, KEY_CAMERA), /* Photo */ - - KEY(4, 0, KEY_F2), /* Home */ - KEY(4, 1, KEY_F3), /* Office */ - KEY(4, 2, KEY_F4), /* Mobile */ + KEY(0, 7, KEY_KP1), + KEY(0, 6, KEY_KP2), + KEY(0, 5, KEY_KP3), + KEY(1, 7, KEY_KP4), + KEY(1, 6, KEY_KP5), + KEY(1, 5, KEY_KP6), + KEY(2, 7, KEY_KP7), + KEY(2, 6, KEY_KP8), + KEY(2, 5, KEY_KP9), + KEY(3, 6, KEY_KP0), + KEY(3, 7, KEY_KPASTERISK), + KEY(3, 5, KEY_KPDOT), /* # key */ + KEY(7, 2, KEY_NUMLOCK), /* Mute */ + KEY(7, 1, KEY_KPMINUS), /* Recall */ + KEY(6, 1, KEY_KPPLUS), /* Redial */ + KEY(7, 6, KEY_KPSLASH), /* Handsfree */ + KEY(6, 0, KEY_ENTER), /* Video */ + + KEY(7, 4, KEY_CAMERA), /* Photo */ + + KEY(0, 4, KEY_F2), /* Home */ + KEY(1, 4, KEY_F3), /* Office */ + KEY(2, 4, KEY_F4), /* Mobile */ KEY(7, 7, KEY_F5), /* SMS */ - KEY(5, 7, KEY_F6), /* Email */ + KEY(7, 5, KEY_F6), /* Email */ /* QWERTY portion of keypad */ - KEY(4, 3, KEY_Q), + KEY(3, 4, KEY_Q), KEY(3, 3, KEY_W), - KEY(2, 3, KEY_E), - KEY(1, 3, KEY_R), - KEY(0, 3, KEY_T), - KEY(7, 4, KEY_Y), - KEY(6, 4, KEY_U), - KEY(5, 4, KEY_I), + KEY(3, 2, KEY_E), + KEY(3, 1, KEY_R), + KEY(3, 0, KEY_T), + KEY(4, 7, KEY_Y), + KEY(4, 6, KEY_U), + KEY(4, 5, KEY_I), KEY(4, 4, KEY_O), - KEY(3, 4, KEY_P), + KEY(4, 3, KEY_P), - KEY(2, 4, KEY_A), - KEY(1, 4, KEY_S), - KEY(0, 4, KEY_D), - KEY(7, 5, KEY_F), - KEY(6, 5, KEY_G), + KEY(4, 2, KEY_A), + KEY(4, 1, KEY_S), + KEY(4, 0, KEY_D), + KEY(5, 7, KEY_F), + KEY(5, 6, KEY_G), KEY(5, 5, KEY_H), - KEY(4, 5, KEY_J), - KEY(3, 5, KEY_K), - KEY(2, 5, KEY_L), - - KEY(1, 5, KEY_Z), - KEY(0, 5, KEY_X), - KEY(7, 6, KEY_C), + KEY(5, 4, KEY_J), + KEY(5, 3, KEY_K), + KEY(5, 2, KEY_L), + + KEY(5, 1, KEY_Z), + KEY(5, 0, KEY_X), + KEY(6, 7, KEY_C), KEY(6, 6, KEY_V), - KEY(5, 6, KEY_B), - KEY(4, 6, KEY_N), - KEY(3, 6, KEY_M), - KEY(2, 6, KEY_SPACE), + KEY(6, 5, KEY_B), + KEY(6, 4, KEY_N), + KEY(6, 3, KEY_M), + KEY(6, 2, KEY_SPACE), - KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */ - KEY(3, 7, KEY_LEFTCTRL), /* Vol down */ - - 0 + KEY(7, 0, KEY_LEFTSHIFT), /* Vol up */ + KEY(7, 3, KEY_LEFTCTRL), /* Vol down */ }; void ams_delta_latch1_write(u8 mask, u8 value) @@ -189,11 +187,15 @@ static struct resource ams_delta_kp_reso }, }; +static const struct matrix_keymap_data ams_delta_keymap_data = { + .keymap = ams_delta_keymap, + .keymap_size = ARRAY_SIZE(ams_delta_keymap), +}; + static struct omap_kp_platform_data ams_delta_kp_data = { .rows = 8, .cols = 8, - .keymap = ams_delta_keymap, - .keymapsize = ARRAY_SIZE(ams_delta_keymap), + .keymap_data = &ams_delta_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c 2010-12-20 19:53:49.000000000 +0100 @@ -69,36 +69,35 @@ #define fsample_cpld_clear(bit) \ fsample_cpld_write(0xf0 | ((bit) & 15), FSAMPLE_CPLD_SET_CLR) -static int fsample_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 +static const unsigned int fsample_keymap[] = { + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -253,11 +252,15 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data fsample_keymap_data = { + .keymap = fsample_keymap, + .keymap_size = ARRAY_SIZE(fsample_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = fsample_keymap, - .keymapsize = ARRAY_SIZE(fsample_keymap), + .keymap_data = &fsample_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c 2010-12-20 19:54:01.000000000 +0100 @@ -52,43 +52,42 @@ /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ #define OMAP1610_ETHR_START 0x04000300 -static int h2_keymap[] = { +static const unsigned int h2_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; static struct mtd_partition h2_nor_partitions[] = { @@ -270,14 +269,18 @@ static struct resource h2_kp_resources[] }, }; +static const struct matrix_keymap_data h2_keymap_data = { + .keymap = h2_keymap, + .keymap_size = ARRAY_SIZE(h2_keymap), +}; + static struct omap_kp_platform_data h2_kp_data = { .rows = 8, .cols = 8, - .keymap = h2_keymap, - .keymapsize = ARRAY_SIZE(h2_keymap), - .rep = 1, + .keymap_data = &h2_keymap_data, + .rep = true, .delay = 9, - .dbounce = 1, + .dbounce = true, }; static struct platform_device h2_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c 2010-12-20 19:54:10.000000000 +0100 @@ -56,43 +56,42 @@ #define H3_TS_GPIO 48 -static int h3_keymap[] = { +static const unsigned int h3_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_3), - KEY(0, 3, KEY_F10), - KEY(0, 4, KEY_F5), - KEY(0, 5, KEY_9), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_3), + KEY(3, 0, KEY_F10), + KEY(4, 0, KEY_F5), + KEY(5, 0, KEY_9), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_2), - KEY(1, 3, KEY_F9), - KEY(1, 4, KEY_F7), - KEY(1, 5, KEY_0), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_6), + KEY(2, 1, KEY_2), + KEY(3, 1, KEY_F9), + KEY(4, 1, KEY_F7), + KEY(5, 1, KEY_0), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_6), KEY(2, 2, KEY_1), - KEY(2, 3, KEY_F2), - KEY(2, 4, KEY_F6), - KEY(2, 5, KEY_HOME), - KEY(3, 0, KEY_8), - KEY(3, 1, KEY_5), - KEY(3, 2, KEY_F12), + KEY(3, 2, KEY_F2), + KEY(4, 2, KEY_F6), + KEY(5, 2, KEY_HOME), + KEY(0, 3, KEY_8), + KEY(1, 3, KEY_5), + KEY(2, 3, KEY_F12), KEY(3, 3, KEY_F3), - KEY(3, 4, KEY_F8), - KEY(3, 5, KEY_END), - KEY(4, 0, KEY_7), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_F11), - KEY(4, 3, KEY_F1), + KEY(4, 3, KEY_F8), + KEY(5, 3, KEY_END), + KEY(0, 4, KEY_7), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_F11), + KEY(3, 4, KEY_F1), KEY(4, 4, KEY_F4), - KEY(4, 5, KEY_ESC), - KEY(5, 0, KEY_F13), - KEY(5, 1, KEY_F14), - KEY(5, 2, KEY_F15), - KEY(5, 3, KEY_F16), - KEY(5, 4, KEY_SLEEP), - 0 + KEY(5, 4, KEY_ESC), + KEY(0, 5, KEY_F13), + KEY(1, 5, KEY_F14), + KEY(2, 5, KEY_F15), + KEY(3, 5, KEY_F16), + KEY(4, 5, KEY_SLEEP), }; @@ -305,14 +304,18 @@ static struct resource h3_kp_resources[] }, }; +static const struct matrix_keymap_data h3_keymap_data = { + .keymap = h3_keymap, + .keymap_size = ARRAY_SIZE(h3_keymap), +}; + static struct omap_kp_platform_data h3_kp_data = { .rows = 8, .cols = 8, - .keymap = h3_keymap, - .keymapsize = ARRAY_SIZE(h3_keymap), - .rep = 1, + .keymap_data = &h3_keymap_data, + .rep = true, .delay = 9, - .dbounce = 1, + .dbounce = true, }; static struct platform_device h3_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c 2010-12-20 19:54:18.000000000 +0100 @@ -180,64 +180,68 @@ /* Keyboard definition */ -static int htc_herald_keymap[] = { +static const unsigned int htc_herald_keymap[] = { KEY(0, 0, KEY_RECORD), /* Mail button */ - KEY(0, 1, KEY_CAMERA), /* Camera */ - KEY(0, 2, KEY_PHONE), /* Send key */ - KEY(0, 3, KEY_VOLUMEUP), /* Volume up */ - KEY(0, 4, KEY_F2), /* Right bar (landscape) */ - KEY(0, 5, KEY_MAIL), /* Win key (portrait) */ - KEY(0, 6, KEY_DIRECTORY), /* Right bar (protrait) */ - KEY(1, 0, KEY_LEFTCTRL), /* Windows key */ + KEY(1, 0, KEY_CAMERA), /* Camera */ + KEY(2, 0, KEY_PHONE), /* Send key */ + KEY(3, 0, KEY_VOLUMEUP), /* Volume up */ + KEY(4, 0, KEY_F2), /* Right bar (landscape) */ + KEY(5, 0, KEY_MAIL), /* Win key (portrait) */ + KEY(6, 0, KEY_DIRECTORY), /* Right bar (protrait) */ + KEY(0, 1, KEY_LEFTCTRL), /* Windows key */ KEY(1, 1, KEY_COMMA), - KEY(1, 2, KEY_M), - KEY(1, 3, KEY_K), - KEY(1, 4, KEY_SLASH), /* OK key */ - KEY(1, 5, KEY_I), - KEY(1, 6, KEY_U), - KEY(2, 0, KEY_LEFTALT), - KEY(2, 1, KEY_TAB), + KEY(2, 1, KEY_M), + KEY(3, 1, KEY_K), + KEY(4, 1, KEY_SLASH), /* OK key */ + KEY(5, 1, KEY_I), + KEY(6, 1, KEY_U), + KEY(0, 2, KEY_LEFTALT), + KEY(1, 2, KEY_TAB), KEY(2, 2, KEY_N), - KEY(2, 3, KEY_J), - KEY(2, 4, KEY_ENTER), - KEY(2, 5, KEY_H), - KEY(2, 6, KEY_Y), - KEY(3, 0, KEY_SPACE), - KEY(3, 1, KEY_L), - KEY(3, 2, KEY_B), + KEY(3, 2, KEY_J), + KEY(4, 2, KEY_ENTER), + KEY(5, 2, KEY_H), + KEY(6, 2, KEY_Y), + KEY(0, 3, KEY_SPACE), + KEY(1, 3, KEY_L), + KEY(2, 3, KEY_B), KEY(3, 3, KEY_V), - KEY(3, 4, KEY_BACKSPACE), - KEY(3, 5, KEY_G), - KEY(3, 6, KEY_T), - KEY(4, 0, KEY_CAPSLOCK), /* Shift */ - KEY(4, 1, KEY_C), - KEY(4, 2, KEY_F), - KEY(4, 3, KEY_R), + KEY(4, 3, KEY_BACKSPACE), + KEY(5, 3, KEY_G), + KEY(6, 3, KEY_T), + KEY(0, 4, KEY_CAPSLOCK), /* Shift */ + KEY(1, 4, KEY_C), + KEY(2, 4, KEY_F), + KEY(3, 4, KEY_R), KEY(4, 4, KEY_O), - KEY(4, 5, KEY_E), - KEY(4, 6, KEY_D), - KEY(5, 0, KEY_X), - KEY(5, 1, KEY_Z), - KEY(5, 2, KEY_S), - KEY(5, 3, KEY_W), - KEY(5, 4, KEY_P), + KEY(5, 4, KEY_E), + KEY(6, 4, KEY_D), + KEY(0, 5, KEY_X), + KEY(1, 5, KEY_Z), + KEY(2, 5, KEY_S), + KEY(3, 5, KEY_W), + KEY(4, 5, KEY_P), KEY(5, 5, KEY_Q), - KEY(5, 6, KEY_A), - KEY(6, 0, KEY_CONNECT), /* Voice button */ - KEY(6, 2, KEY_CANCEL), /* End key */ - KEY(6, 3, KEY_VOLUMEDOWN), /* Volume down */ - KEY(6, 4, KEY_F1), /* Left bar (landscape) */ - KEY(6, 5, KEY_WWW), /* OK button (portrait) */ + KEY(6, 5, KEY_A), + KEY(0, 6, KEY_CONNECT), /* Voice button */ + KEY(2, 6, KEY_CANCEL), /* End key */ + KEY(3, 6, KEY_VOLUMEDOWN), /* Volume down */ + KEY(4, 6, KEY_F1), /* Left bar (landscape) */ + KEY(5, 6, KEY_WWW), /* OK button (portrait) */ KEY(6, 6, KEY_CALENDAR), /* Left bar (portrait) */ - 0 }; -struct omap_kp_platform_data htcherald_kp_data = { +static const struct matrix_keymap_data htc_herald_keymap_data = { + .keymap = htc_herald_keymap, + .keymap_size = ARRAY_SIZE(htc_herald_keymap), +}; + +static struct omap_kp_platform_data htcherald_kp_data = { .rows = 7, .cols = 7, .delay = 20, - .rep = 1, - .keymap = htc_herald_keymap, + .rep = true, + .keymap_data = &htc_herald_keymap_data, }; static struct resource kp_resources[] = { @@ -278,7 +282,7 @@ static struct gpio_keys_button herald_gp static struct gpio_keys_platform_data herald_gpio_keys_data = { .buttons = herald_gpio_keys_table, .nbuttons = ARRAY_SIZE(herald_gpio_keys_table), - .rep = 1, + .rep = true, }; static struct platform_device herald_gpiokeys_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c 2010-12-20 19:54:32.000000000 +0100 @@ -44,17 +44,16 @@ /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ #define INNOVATOR1610_ETHR_START 0x04000300 -static int innovator_keymap[] = { +static const unsigned int innovator_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 3, KEY_DOWN), + KEY(3, 0, KEY_DOWN), KEY(1, 1, KEY_F2), - KEY(1, 2, KEY_RIGHT), - KEY(2, 0, KEY_F3), - KEY(2, 1, KEY_F4), + KEY(2, 1, KEY_RIGHT), + KEY(0, 2, KEY_F3), + KEY(1, 2, KEY_F4), KEY(2, 2, KEY_UP), - KEY(3, 2, KEY_ENTER), + KEY(2, 3, KEY_ENTER), KEY(3, 3, KEY_LEFT), - 0 }; static struct mtd_partition innovator_partitions[] = { @@ -126,11 +125,15 @@ static struct resource innovator_kp_reso }, }; +static const struct matrix_keymap_data innovator_keymap_data = { + .keymap = innovator_keymap, + .keymap_size = ARRAY_SIZE(innovator_keymap), +}; + static struct omap_kp_platform_data innovator_kp_data = { .rows = 8, .cols = 8, - .keymap = innovator_keymap, - .keymapsize = ARRAY_SIZE(innovator_keymap), + .keymap_data = &innovator_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c 2010-12-20 19:54:44.000000000 +0100 @@ -56,19 +56,18 @@ static void __init omap_nokia770_init_ir omap_init_irq(); } -static int nokia770_keymap[] = { - KEY(0, 1, GROUP_0 | KEY_UP), - KEY(0, 2, GROUP_1 | KEY_F5), - KEY(1, 0, GROUP_0 | KEY_LEFT), +static const unsigned int nokia770_keymap[] = { + KEY(1, 0, GROUP_0 | KEY_UP), + KEY(2, 0, GROUP_1 | KEY_F5), + KEY(0, 1, GROUP_0 | KEY_LEFT), KEY(1, 1, GROUP_0 | KEY_ENTER), - KEY(1, 2, GROUP_0 | KEY_RIGHT), - KEY(2, 0, GROUP_1 | KEY_ESC), - KEY(2, 1, GROUP_0 | KEY_DOWN), + KEY(2, 1, GROUP_0 | KEY_RIGHT), + KEY(0, 2, GROUP_1 | KEY_ESC), + KEY(1, 2, GROUP_0 | KEY_DOWN), KEY(2, 2, GROUP_1 | KEY_F4), - KEY(3, 0, GROUP_2 | KEY_F7), - KEY(3, 1, GROUP_2 | KEY_F8), - KEY(3, 2, GROUP_2 | KEY_F6), - 0 + KEY(0, 3, GROUP_2 | KEY_F7), + KEY(1, 3, GROUP_2 | KEY_F8), + KEY(2, 3, GROUP_2 | KEY_F6), }; static struct resource nokia770_kp_resources[] = { @@ -79,11 +78,15 @@ static struct resource nokia770_kp_resou }, }; +static const struct matrix_keymap_data nokia770_keymap_data = { + .keymap = nokia770_keymap, + .keymap_size = ARRAY_SIZE(nokia770_keymap), +}; + static struct omap_kp_platform_data nokia770_kp_data = { .rows = 8, .cols = 8, - .keymap = nokia770_keymap, - .keymapsize = ARRAY_SIZE(nokia770_keymap), + .keymap_data = &nokia770_keymap_data, .delay = 4, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c 2010-12-20 19:55:13.000000000 +0100 @@ -338,25 +338,28 @@ static struct i2c_board_info __initdata */ }; -static const int osk_keymap[] = { +static const unsigned int osk_keymap[] = { /* KEY(col, row, code) */ KEY(0, 0, KEY_F1), /* SW4 */ - KEY(0, 3, KEY_UP), /* (sw2/up) */ + KEY(3, 0, KEY_UP), /* (sw2/up) */ KEY(1, 1, KEY_LEFTCTRL), /* SW5 */ - KEY(1, 2, KEY_LEFT), /* (sw2/left) */ - KEY(2, 0, KEY_SPACE), /* SW3 */ - KEY(2, 1, KEY_ESC), /* SW6 */ + KEY(2, 1, KEY_LEFT), /* (sw2/left) */ + KEY(0, 2, KEY_SPACE), /* SW3 */ + KEY(1, 2, KEY_ESC), /* SW6 */ KEY(2, 2, KEY_DOWN), /* (sw2/down) */ - KEY(3, 2, KEY_ENTER), /* (sw2/select) */ + KEY(2, 3, KEY_ENTER), /* (sw2/select) */ KEY(3, 3, KEY_RIGHT), /* (sw2/right) */ - 0 +}; + +static const struct matrix_keymap_data osk_keymap_data = { + .keymap = osk_keymap, + .keymap_size = ARRAY_SIZE(osk_keymap), }; static struct omap_kp_platform_data osk_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) osk_keymap, - .keymapsize = ARRAY_SIZE(osk_keymap), + .keymap_data = &osk_keymap_data, .delay = 9, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c 2010-12-20 19:56:22.000000000 +0100 @@ -65,25 +65,29 @@ static void __init omap_palmte_init_irq( omap_init_irq(); } -static const int palmte_keymap[] = { +static const unsigned int palmte_keymap[] = { KEY(0, 0, KEY_F1), /* Calendar */ - KEY(0, 1, KEY_F2), /* Contacts */ - KEY(0, 2, KEY_F3), /* Tasks List */ - KEY(0, 3, KEY_F4), /* Note Pad */ - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), /* Contacts */ + KEY(2, 0, KEY_F3), /* Tasks List */ + KEY(3, 0, KEY_F4), /* Note Pad */ + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), +}; + +static const struct matrix_keymap_data palmte_keymap_data = { + .keymap = palmte_keymap, + .keymap_size = ARRAY_SIZE(palmte_keymap), }; static struct omap_kp_platform_data palmte_kp_data = { .rows = 8, .cols = 8, - .keymap = (int *) palmte_keymap, - .rep = 1, + .keymap_data = &palmte_keymap_data, + .rep = true, .delay = 12, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c 2010-12-20 19:56:36.000000000 +0100 @@ -51,19 +51,18 @@ #define PALMTT_MMC_WP_GPIO 8 #define PALMTT_HDQ_GPIO 11 -static int palmtt_keymap[] = { +static const unsigned int palmtt_keymap[] = { KEY(0, 0, KEY_ESC), - KEY(0, 1, KEY_SPACE), - KEY(0, 2, KEY_LEFTCTRL), - KEY(0, 3, KEY_TAB), - KEY(0, 4, KEY_ENTER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_SPACE), + KEY(2, 0, KEY_LEFTCTRL), + KEY(3, 0, KEY_TAB), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(2, 0, KEY_SLEEP), - KEY(2, 4, KEY_Y), - 0 + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(0, 2, KEY_SLEEP), + KEY(4, 2, KEY_Y), }; static struct mtd_partition palmtt_partitions[] = { @@ -136,10 +135,15 @@ static struct resource palmtt_kp_resourc }, }; +static const struct matrix_keymap_data palmtt_keymap_data = { + .keymap = palmtt_keymap, + .keymap_size = ARRAY_SIZE(palmtt_keymap), +}; + static struct omap_kp_platform_data palmtt_kp_data = { .rows = 6, .cols = 3, - .keymap = palmtt_keymap, + .keymap_data = &palmtt_keymap_data, }; static struct platform_device palmtt_kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c 2010-12-20 19:56:48.000000000 +0100 @@ -64,26 +64,30 @@ omap_palmz71_init_irq(void) omap_init_irq(); } -static int palmz71_keymap[] = { +static const unsigned int palmz71_keymap[] = { KEY(0, 0, KEY_F1), - KEY(0, 1, KEY_F2), - KEY(0, 2, KEY_F3), - KEY(0, 3, KEY_F4), - KEY(0, 4, KEY_POWER), - KEY(1, 0, KEY_LEFT), + KEY(1, 0, KEY_F2), + KEY(2, 0, KEY_F3), + KEY(3, 0, KEY_F4), + KEY(4, 0, KEY_POWER), + KEY(0, 1, KEY_LEFT), KEY(1, 1, KEY_DOWN), - KEY(1, 2, KEY_UP), - KEY(1, 3, KEY_RIGHT), - KEY(1, 4, KEY_ENTER), - KEY(2, 0, KEY_CAMERA), - 0, + KEY(2, 1, KEY_UP), + KEY(3, 1, KEY_RIGHT), + KEY(4, 1, KEY_ENTER), + KEY(0, 2, KEY_CAMERA), +}; + +static const struct matrix_keymap_data palmz71_keymap_data = { + .keymap = palmz71_keymap, + .keymap_size = ARRAY_SIZE(palmz71_keymap), }; static struct omap_kp_platform_data palmz71_kp_data = { .rows = 8, .cols = 8, - .keymap = palmz71_keymap, - .rep = 1, + .keymap_data = &palmz71_keymap_data, + .rep = true, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c 2010-12-20 19:57:05.000000000 +0100 @@ -36,36 +36,35 @@ #include <plat/common.h> #include <plat/board.h> -static int p2_keymap[] = { - KEY(0,0,KEY_UP), - KEY(0,1,KEY_RIGHT), - KEY(0,2,KEY_LEFT), - KEY(0,3,KEY_DOWN), - KEY(0,4,KEY_ENTER), - KEY(1,0,KEY_F10), - KEY(1,1,KEY_SEND), - KEY(1,2,KEY_END), - KEY(1,3,KEY_VOLUMEDOWN), - KEY(1,4,KEY_VOLUMEUP), - KEY(1,5,KEY_RECORD), - KEY(2,0,KEY_F9), - KEY(2,1,KEY_3), - KEY(2,2,KEY_6), - KEY(2,3,KEY_9), - KEY(2,4,KEY_KPDOT), - KEY(3,0,KEY_BACK), - KEY(3,1,KEY_2), - KEY(3,2,KEY_5), - KEY(3,3,KEY_8), - KEY(3,4,KEY_0), - KEY(3,5,KEY_KPSLASH), - KEY(4,0,KEY_HOME), - KEY(4,1,KEY_1), - KEY(4,2,KEY_4), - KEY(4,3,KEY_7), - KEY(4,4,KEY_KPASTERISK), - KEY(4,5,KEY_POWER), - 0 +static const unsigned int p2_keymap[] = { + KEY(0, 0, KEY_UP), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_LEFT), + KEY(3, 0, KEY_DOWN), + KEY(4, 0, KEY_ENTER), + KEY(0, 1, KEY_F10), + KEY(1, 1, KEY_SEND), + KEY(2, 1, KEY_END), + KEY(3, 1, KEY_VOLUMEDOWN), + KEY(4, 1, KEY_VOLUMEUP), + KEY(5, 1, KEY_RECORD), + KEY(0, 2, KEY_F9), + KEY(1, 2, KEY_3), + KEY(2, 2, KEY_6), + KEY(3, 2, KEY_9), + KEY(4, 2, KEY_KPDOT), + KEY(0, 3, KEY_BACK), + KEY(1, 3, KEY_2), + KEY(2, 3, KEY_5), + KEY(3, 3, KEY_8), + KEY(4, 3, KEY_0), + KEY(5, 3, KEY_KPSLASH), + KEY(0, 4, KEY_HOME), + KEY(1, 4, KEY_1), + KEY(2, 4, KEY_4), + KEY(3, 4, KEY_7), + KEY(4, 4, KEY_KPASTERISK), + KEY(5, 4, KEY_POWER), }; static struct smc91x_platdata smc91x_info = { @@ -211,13 +210,17 @@ static struct resource kp_resources[] = }, }; +static const struct matrix_keymap_data p2_keymap_data = { + .keymap = p2_keymap, + .keymap_size = ARRAY_SIZE(p2_keymap), +}; + static struct omap_kp_platform_data kp_data = { .rows = 8, .cols = 8, - .keymap = p2_keymap, - .keymapsize = ARRAY_SIZE(p2_keymap), + .keymap_data = &p2_keymap_data, .delay = 4, - .dbounce = 1, + .dbounce = true, }; static struct platform_device kp_device = { --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c 2010-12-20 19:57:14.000000000 +0100 @@ -164,36 +164,35 @@ EXPORT_SYMBOL(sx1_setusbpower); /*----------- Keypad -------------------------*/ -static int sx1_keymap[] = { - KEY(5, 3, GROUP_0 | 117), /* camera Qt::Key_F17 */ - KEY(0, 4, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ - KEY(1, 4, GROUP_2 | 114), /* voice memo */ - KEY(2, 4, GROUP_3 | 114), /* voice memo */ +static const unsigned int sx1_keymap[] = { + KEY(3, 5, GROUP_0 | 117), /* camera Qt::Key_F17 */ + KEY(4, 0, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ + KEY(4, 1, GROUP_2 | 114), /* voice memo */ + KEY(4, 2, GROUP_3 | 114), /* voice memo */ KEY(0, 0, GROUP_1 | KEY_F12), /* red button Qt::Key_Hangup */ - KEY(4, 3, GROUP_1 | KEY_LEFT), - KEY(2, 3, GROUP_1 | KEY_DOWN), - KEY(1, 3, GROUP_1 | KEY_RIGHT), - KEY(0, 3, GROUP_1 | KEY_UP), + KEY(3, 4, GROUP_1 | KEY_LEFT), + KEY(3, 2, GROUP_1 | KEY_DOWN), + KEY(3, 1, GROUP_1 | KEY_RIGHT), + KEY(3, 0, GROUP_1 | KEY_UP), KEY(3, 3, GROUP_1 | KEY_POWER), /* joystick press or Qt::Key_Select */ - KEY(5, 0, GROUP_1 | KEY_1), - KEY(4, 0, GROUP_1 | KEY_2), - KEY(3, 0, GROUP_1 | KEY_3), - KEY(3, 4, GROUP_1 | KEY_4), + KEY(0, 5, GROUP_1 | KEY_1), + KEY(0, 4, GROUP_1 | KEY_2), + KEY(0, 3, GROUP_1 | KEY_3), + KEY(4, 3, GROUP_1 | KEY_4), KEY(4, 4, GROUP_1 | KEY_5), - KEY(5, 4, GROUP_1 | KEY_KPASTERISK),/* "*" */ - KEY(4, 1, GROUP_1 | KEY_6), - KEY(5, 1, GROUP_1 | KEY_7), - KEY(3, 1, GROUP_1 | KEY_8), - KEY(3, 2, GROUP_1 | KEY_9), - KEY(5, 2, GROUP_1 | KEY_0), - KEY(4, 2, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ - KEY(0, 1, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ - KEY(1, 2, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ + KEY(4, 5, GROUP_1 | KEY_KPASTERISK),/* "*" */ + KEY(1, 4, GROUP_1 | KEY_6), + KEY(1, 5, GROUP_1 | KEY_7), + KEY(1, 3, GROUP_1 | KEY_8), + KEY(2, 3, GROUP_1 | KEY_9), + KEY(2, 5, GROUP_1 | KEY_0), + KEY(2, 4, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ + KEY(1, 0, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ + KEY(2, 1, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ KEY(2, 2, GROUP_1 | KEY_F8), /* right soft Qt::Key_Back */ - KEY(2, 1, GROUP_1 | KEY_LEFTSHIFT), /* shift */ + KEY(1, 2, GROUP_1 | KEY_LEFTSHIFT), /* shift */ KEY(1, 1, GROUP_1 | KEY_BACKSPACE), /* C (clear) */ - KEY(0, 2, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ - 0 + KEY(2, 0, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ }; static struct resource sx1_kp_resources[] = { @@ -204,11 +203,15 @@ static struct resource sx1_kp_resources[ }, }; +static const struct matrix_keymap_data sx1_keymap_data = { + .keymap = sx1_keymap, + .keymap_size = ARRAY_SIZE(sx1_keymap), +}; + static struct omap_kp_platform_data sx1_kp_data = { .rows = 6, .cols = 6, - .keymap = sx1_keymap, - .keymapsize = ARRAY_SIZE(sx1_keymap), + .keymap_data = &sx1_keymap_data, .delay = 80, }; --- linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c.orig 2010-12-09 23:07:35.000000000 +0100 +++ linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c 2010-12-20 19:57:32.000000000 +0100 @@ -51,38 +51,37 @@ static unsigned int row_gpios[6] = { 88, 89, 124, 11, 6, 96 }; static unsigned int col_gpios[7] = { 90, 91, 100, 36, 12, 97, 98 }; -static int h4_keymap[] = { +static const unsigned int h4_keymap[] = { KEY(0, 0, KEY_LEFT), - KEY(0, 1, KEY_RIGHT), - KEY(0, 2, KEY_A), - KEY(0, 3, KEY_B), - KEY(0, 4, KEY_C), - KEY(1, 0, KEY_DOWN), + KEY(1, 0, KEY_RIGHT), + KEY(2, 0, KEY_A), + KEY(3, 0, KEY_B), + KEY(4, 0, KEY_C), + KEY(0, 1, KEY_DOWN), KEY(1, 1, KEY_UP), - KEY(1, 2, KEY_E), - KEY(1, 3, KEY_F), - KEY(1, 4, KEY_G), - KEY(2, 0, KEY_ENTER), - KEY(2, 1, KEY_I), + KEY(2, 1, KEY_E), + KEY(3, 1, KEY_F), + KEY(4, 1, KEY_G), + KEY(0, 2, KEY_ENTER), + KEY(1, 2, KEY_I), KEY(2, 2, KEY_J), - KEY(2, 3, KEY_K), - KEY(2, 4, KEY_3), - KEY(3, 0, KEY_M), - KEY(3, 1, KEY_N), - KEY(3, 2, KEY_O), + KEY(3, 2, KEY_K), + KEY(4, 2, KEY_3), + KEY(0, 3, KEY_M), + KEY(1, 3, KEY_N), + KEY(2, 3, KEY_O), KEY(3, 3, KEY_P), - KEY(3, 4, KEY_Q), - KEY(4, 0, KEY_R), - KEY(4, 1, KEY_4), - KEY(4, 2, KEY_T), - KEY(4, 3, KEY_U), + KEY(4, 3, KEY_Q), + KEY(0, 4, KEY_R), + KEY(1, 4, KEY_4), + KEY(2, 4, KEY_T), + KEY(3, 4, KEY_U), KEY(4, 4, KEY_ENTER), - KEY(5, 0, KEY_V), - KEY(5, 1, KEY_W), - KEY(5, 2, KEY_L), - KEY(5, 3, KEY_S), - KEY(5, 4, KEY_ENTER), - 0 + KEY(0, 5, KEY_V), + KEY(1, 5, KEY_W), + KEY(2, 5, KEY_L), + KEY(3, 5, KEY_S), + KEY(4, 5, KEY_ENTER), }; static struct mtd_partition h4_partitions[] = { @@ -136,12 +135,16 @@ static struct platform_device h4_flash_d .resource = &h4_flash_resource, }; +static const struct matrix_keymap_data h4_keymap_data = { + .keymap = h4_keymap, + .keymap_size = ARRAY_SIZE(h4_keymap), +}; + static struct omap_kp_platform_data h4_kp_data = { .rows = 6, .cols = 7, - .keymap = h4_keymap, - .keymapsize = ARRAY_SIZE(h4_keymap), - .rep = 1, + .keymap_data = &h4_keymap_data, + .rep = true, .row_gpios = row_gpios, .col_gpios = col_gpios, }; ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v3] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-20 21:09 ` Janusz Krzysztofik @ 2010-12-21 11:20 ` Aaro Koskinen -1 siblings, 0 replies; 36+ messages in thread From: Aaro Koskinen @ 2010-12-21 11:20 UTC (permalink / raw) To: Janusz Krzysztofik Cc: Dmitry Torokhov, linux-omap, linux-input, Tony Lindgren, linux-arm-kernel Hi, On Mon, 20 Dec 2010, Janusz Krzysztofik wrote: > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > defined macros, structures and inline functions. > > Convert omap-keypad driver to use those as well, as suggested by a > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > Created against linux-2.6.37-rc5. > Tested on Amstrad Delta. > Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > board-h4. > > Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> Reviewed-by: Aaro Koskinen <aaro.koskinen@nokia.com> > --- > v2 -> v3 changes: > - update all board's keymap tables type to match the struct > matrix_keymap_data .keymap member; thanks to Aaro Koskinen for > pointing this out, > - while being at it, correct one sparse reported issue found (3 times) > in omap-keypad.c (Using plain integer as NULL pointer), and an > omap-keypad related one found in board-htcherald.c > (symbol 'htcherald_kp_data' was not declared. Should it be static?). > > v1 -> v2 changes, both requested by Dmitry Torokhov (thanks!): > - while updating all boards, change rep and dbounce to bool, > - put keycodes at the end of struct omap_kp and allocate it in one shot. > > arch/arm/mach-omap1/board-ams-delta.c | 130 +++++++++++++++---------------- > arch/arm/mach-omap1/board-fsample.c | 67 ++++++++------- > arch/arm/mach-omap1/board-h2.c | 75 +++++++++-------- > arch/arm/mach-omap1/board-h3.c | 75 +++++++++-------- > arch/arm/mach-omap1/board-htcherald.c | 98 ++++++++++++----------- > arch/arm/mach-omap1/board-innovator.c | 21 ++--- > arch/arm/mach-omap1/board-nokia770.c | 29 +++--- > arch/arm/mach-omap1/board-osk.c | 21 ++--- > arch/arm/mach-omap1/board-palmte.c | 28 +++--- > arch/arm/mach-omap1/board-palmtt.c | 28 +++--- > arch/arm/mach-omap1/board-palmz71.c | 30 ++++--- > arch/arm/mach-omap1/board-perseus2.c | 69 ++++++++-------- > arch/arm/mach-omap1/board-sx1.c | 57 +++++++------ > arch/arm/mach-omap2/board-h4.c | 63 +++++++-------- > arch/arm/plat-omap/include/plat/keypad.h | 35 ++++---- > drivers/input/keyboard/omap-keypad.c | 41 ++++----- > include/linux/input/matrix_keypad.h | 2 > 17 files changed, 458 insertions(+), 411 deletions(-) > > --- linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h.orig 2010-12-09 23:07:38.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h 2010-12-20 18:15:11.000000000 +0100 > @@ -10,16 +10,18 @@ > #ifndef ASMARM_ARCH_KEYPAD_H > #define ASMARM_ARCH_KEYPAD_H > > -#warning: Please update the board to use matrix_keypad.h instead > +#ifndef CONFIG_ARCH_OMAP1 > +#warning Please update the board to use matrix-keypad driver > +#endif > +#include <linux/input/matrix_keypad.h> > > struct omap_kp_platform_data { > int rows; > int cols; > - int *keymap; > - unsigned int keymapsize; > - unsigned int rep:1; > + const struct matrix_keymap_data *keymap_data; > + bool rep; > unsigned long delay; > - unsigned int dbounce:1; > + bool dbounce; > /* specific to OMAP242x*/ > unsigned int *row_gpios; > unsigned int *col_gpios; > @@ -28,18 +30,21 @@ struct omap_kp_platform_data { > /* Group (0..3) -- when multiple keys are pressed, only the > * keys pressed in the same group are considered as pressed. This is > * in order to workaround certain crappy HW designs that produce ghost > - * keypresses. */ > -#define GROUP_0 (0 << 16) > -#define GROUP_1 (1 << 16) > -#define GROUP_2 (2 << 16) > -#define GROUP_3 (3 << 16) > + * keypresses. Two free bits, not used by neither row/col nor keynum, > + * must be available for use as group bits. The below GROUP_SHIFT > + * macro definition is based on some prior knowledge of the > + * matrix_keypad defined KEY() macro internals. > + */ > +#define GROUP_SHIFT 14 > +#define GROUP_0 (0 << GROUP_SHIFT) > +#define GROUP_1 (1 << GROUP_SHIFT) > +#define GROUP_2 (2 << GROUP_SHIFT) > +#define GROUP_3 (3 << GROUP_SHIFT) > #define GROUP_MASK GROUP_3 > +#if KEY_MAX & GROUP_MASK > +#error Group bits in conflict with keynum bits > +#endif > > -#define KEY_PERSISTENT 0x00800000 > -#define KEYNUM_MASK 0x00EFFFFF > -#define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val)) > -#define PERSISTENT_KEY(col, row) (((col) << 28) | ((row) << 24) | \ > - KEY_PERSISTENT) > > #endif > > --- linux-2.6.37-rc5/include/linux/input/matrix_keypad.h.orig 2010-12-09 23:09:05.000000000 +0100 > +++ linux-2.6.37-rc5/include/linux/input/matrix_keypad.h 2010-12-20 18:15:11.000000000 +0100 > @@ -9,7 +9,7 @@ > > #define KEY(row, col, val) ((((row) & (MATRIX_MAX_ROWS - 1)) << 24) |\ > (((col) & (MATRIX_MAX_COLS - 1)) << 16) |\ > - (val & 0xffff)) > + ((val) & 0xffff)) > > #define KEY_ROW(k) (((k) >> 24) & 0xff) > #define KEY_COL(k) (((k) >> 16) & 0xff) > --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12-09 23:08:09.000000000 +0100 > +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-20 18:15:11.000000000 +0100 > @@ -65,7 +65,6 @@ struct omap_kp { > > static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); > > -static int *keymap; > static unsigned int *row_gpios; > static unsigned int *col_gpios; > > @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o > } > } > > -static inline int omap_kp_find_key(int col, int row) > -{ > - int i, key; > - > - key = KEY(col, row, 0); > - for (i = 0; keymap[i] != 0; i++) > - if ((keymap[i] & 0xff000000) == key) > - return keymap[i] & 0x00ffffff; > - return -1; > -} > - > static void omap_kp_tasklet(unsigned long data) > { > struct omap_kp *omap_kp_data = (struct omap_kp *) data; > + unsigned short *keycodes = omap_kp_data->input->keycode; > + unsigned int row_shift = get_count_order(omap_kp_data->cols); > unsigned char new_state[8], changed, key_down = 0; > int col, row; > int spurious = 0; > @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon > row, (new_state[col] & (1 << row)) ? > "pressed" : "released"); > #else > - key = omap_kp_find_key(col, row); > + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; > if (key < 0) { > printk(KERN_WARNING > "omap-keypad: Spurious key event %d-%d\n", > @@ -298,13 +288,18 @@ static int __devinit omap_kp_probe(struc > struct input_dev *input_dev; > struct omap_kp_platform_data *pdata = pdev->dev.platform_data; > int i, col_idx, row_idx, irq_idx, ret; > + unsigned int row_shift, keycodemax; > > - if (!pdata->rows || !pdata->cols || !pdata->keymap) { > - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); > + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { > + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); > return -EINVAL; > } > > - omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); > + row_shift = get_count_order(pdata->cols); > + keycodemax = pdata->rows << row_shift; > + > + omap_kp = kzalloc(sizeof(struct omap_kp) + > + keycodemax * sizeof(unsigned short), GFP_KERNEL); > input_dev = input_allocate_device(); > if (!omap_kp || !input_dev) { > kfree(omap_kp); > @@ -320,7 +315,9 @@ static int __devinit omap_kp_probe(struc > if (!cpu_is_omap24xx()) > omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); > > - keymap = pdata->keymap; > + input_dev->keycode = &omap_kp[1]; > + input_dev->keycodesize = sizeof(unsigned short); > + input_dev->keycodemax = keycodemax; > > if (pdata->rep) > __set_bit(EV_REP, input_dev->evbit); > @@ -374,8 +371,8 @@ static int __devinit omap_kp_probe(struc > > /* setup input device */ > __set_bit(EV_KEY, input_dev->evbit); > - for (i = 0; keymap[i] != 0; i++) > - __set_bit(keymap[i] & KEY_MAX, input_dev->keybit); > + matrix_keypad_build_keymap(pdata->keymap_data, row_shift, > + input_dev->keycode, input_dev->keybit); > input_dev->name = "omap-keypad"; > input_dev->phys = "omap-keypad/input0"; > input_dev->dev.parent = &pdev->dev; > @@ -416,7 +413,7 @@ static int __devinit omap_kp_probe(struc > return 0; > err5: > for (i = irq_idx - 1; i >=0; i--) > - free_irq(row_gpios[i], 0); > + free_irq(row_gpios[i], NULL); > err4: > input_unregister_device(omap_kp->input); > input_dev = NULL; > @@ -447,11 +444,11 @@ static int __devexit omap_kp_remove(stru > gpio_free(col_gpios[i]); > for (i = 0; i < omap_kp->rows; i++) { > gpio_free(row_gpios[i]); > - free_irq(gpio_to_irq(row_gpios[i]), 0); > + free_irq(gpio_to_irq(row_gpios[i]), NULL); > } > } else { > omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); > - free_irq(omap_kp->irq, 0); > + free_irq(omap_kp->irq, NULL); > } > > del_timer_sync(&omap_kp->timer); > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-20 19:53:19.000000000 +0100 > @@ -43,84 +43,82 @@ > static u8 ams_delta_latch1_reg; > static u16 ams_delta_latch2_reg; > > -static int ams_delta_keymap[] = { > +static const unsigned int ams_delta_keymap[] = { > KEY(0, 0, KEY_F1), /* Advert */ > > - KEY(3, 0, KEY_COFFEE), /* Games */ > - KEY(2, 0, KEY_QUESTION), /* Directory */ > - KEY(3, 2, KEY_CONNECT), /* Internet */ > - KEY(2, 1, KEY_SHOP), /* Services */ > + KEY(0, 3, KEY_COFFEE), /* Games */ > + KEY(0, 2, KEY_QUESTION), /* Directory */ > + KEY(2, 3, KEY_CONNECT), /* Internet */ > + KEY(1, 2, KEY_SHOP), /* Services */ > KEY(1, 1, KEY_PHONE), /* VoiceMail */ > > - KEY(1, 0, KEY_DELETE), /* Delete */ > + KEY(0, 1, KEY_DELETE), /* Delete */ > KEY(2, 2, KEY_PLAY), /* Play */ > - KEY(0, 1, KEY_PAGEUP), /* Up */ > - KEY(3, 1, KEY_PAGEDOWN), /* Down */ > - KEY(0, 2, KEY_EMAIL), /* ReadEmail */ > - KEY(1, 2, KEY_STOP), /* Stop */ > + KEY(1, 0, KEY_PAGEUP), /* Up */ > + KEY(1, 3, KEY_PAGEDOWN), /* Down */ > + KEY(2, 0, KEY_EMAIL), /* ReadEmail */ > + KEY(2, 1, KEY_STOP), /* Stop */ > > /* Numeric keypad portion */ > - KEY(7, 0, KEY_KP1), > - KEY(6, 0, KEY_KP2), > - KEY(5, 0, KEY_KP3), > - KEY(7, 1, KEY_KP4), > - KEY(6, 1, KEY_KP5), > - KEY(5, 1, KEY_KP6), > - KEY(7, 2, KEY_KP7), > - KEY(6, 2, KEY_KP8), > - KEY(5, 2, KEY_KP9), > - KEY(6, 3, KEY_KP0), > - KEY(7, 3, KEY_KPASTERISK), > - KEY(5, 3, KEY_KPDOT), /* # key */ > - KEY(2, 7, KEY_NUMLOCK), /* Mute */ > - KEY(1, 7, KEY_KPMINUS), /* Recall */ > - KEY(1, 6, KEY_KPPLUS), /* Redial */ > - KEY(6, 7, KEY_KPSLASH), /* Handsfree */ > - KEY(0, 6, KEY_ENTER), /* Video */ > - > - KEY(4, 7, KEY_CAMERA), /* Photo */ > - > - KEY(4, 0, KEY_F2), /* Home */ > - KEY(4, 1, KEY_F3), /* Office */ > - KEY(4, 2, KEY_F4), /* Mobile */ > + KEY(0, 7, KEY_KP1), > + KEY(0, 6, KEY_KP2), > + KEY(0, 5, KEY_KP3), > + KEY(1, 7, KEY_KP4), > + KEY(1, 6, KEY_KP5), > + KEY(1, 5, KEY_KP6), > + KEY(2, 7, KEY_KP7), > + KEY(2, 6, KEY_KP8), > + KEY(2, 5, KEY_KP9), > + KEY(3, 6, KEY_KP0), > + KEY(3, 7, KEY_KPASTERISK), > + KEY(3, 5, KEY_KPDOT), /* # key */ > + KEY(7, 2, KEY_NUMLOCK), /* Mute */ > + KEY(7, 1, KEY_KPMINUS), /* Recall */ > + KEY(6, 1, KEY_KPPLUS), /* Redial */ > + KEY(7, 6, KEY_KPSLASH), /* Handsfree */ > + KEY(6, 0, KEY_ENTER), /* Video */ > + > + KEY(7, 4, KEY_CAMERA), /* Photo */ > + > + KEY(0, 4, KEY_F2), /* Home */ > + KEY(1, 4, KEY_F3), /* Office */ > + KEY(2, 4, KEY_F4), /* Mobile */ > KEY(7, 7, KEY_F5), /* SMS */ > - KEY(5, 7, KEY_F6), /* Email */ > + KEY(7, 5, KEY_F6), /* Email */ > > /* QWERTY portion of keypad */ > - KEY(4, 3, KEY_Q), > + KEY(3, 4, KEY_Q), > KEY(3, 3, KEY_W), > - KEY(2, 3, KEY_E), > - KEY(1, 3, KEY_R), > - KEY(0, 3, KEY_T), > - KEY(7, 4, KEY_Y), > - KEY(6, 4, KEY_U), > - KEY(5, 4, KEY_I), > + KEY(3, 2, KEY_E), > + KEY(3, 1, KEY_R), > + KEY(3, 0, KEY_T), > + KEY(4, 7, KEY_Y), > + KEY(4, 6, KEY_U), > + KEY(4, 5, KEY_I), > KEY(4, 4, KEY_O), > - KEY(3, 4, KEY_P), > + KEY(4, 3, KEY_P), > > - KEY(2, 4, KEY_A), > - KEY(1, 4, KEY_S), > - KEY(0, 4, KEY_D), > - KEY(7, 5, KEY_F), > - KEY(6, 5, KEY_G), > + KEY(4, 2, KEY_A), > + KEY(4, 1, KEY_S), > + KEY(4, 0, KEY_D), > + KEY(5, 7, KEY_F), > + KEY(5, 6, KEY_G), > KEY(5, 5, KEY_H), > - KEY(4, 5, KEY_J), > - KEY(3, 5, KEY_K), > - KEY(2, 5, KEY_L), > - > - KEY(1, 5, KEY_Z), > - KEY(0, 5, KEY_X), > - KEY(7, 6, KEY_C), > + KEY(5, 4, KEY_J), > + KEY(5, 3, KEY_K), > + KEY(5, 2, KEY_L), > + > + KEY(5, 1, KEY_Z), > + KEY(5, 0, KEY_X), > + KEY(6, 7, KEY_C), > KEY(6, 6, KEY_V), > - KEY(5, 6, KEY_B), > - KEY(4, 6, KEY_N), > - KEY(3, 6, KEY_M), > - KEY(2, 6, KEY_SPACE), > + KEY(6, 5, KEY_B), > + KEY(6, 4, KEY_N), > + KEY(6, 3, KEY_M), > + KEY(6, 2, KEY_SPACE), > > - KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */ > - KEY(3, 7, KEY_LEFTCTRL), /* Vol down */ > - > - 0 > + KEY(7, 0, KEY_LEFTSHIFT), /* Vol up */ > + KEY(7, 3, KEY_LEFTCTRL), /* Vol down */ > }; > > void ams_delta_latch1_write(u8 mask, u8 value) > @@ -189,11 +187,15 @@ static struct resource ams_delta_kp_reso > }, > }; > > +static const struct matrix_keymap_data ams_delta_keymap_data = { > + .keymap = ams_delta_keymap, > + .keymap_size = ARRAY_SIZE(ams_delta_keymap), > +}; > + > static struct omap_kp_platform_data ams_delta_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = ams_delta_keymap, > - .keymapsize = ARRAY_SIZE(ams_delta_keymap), > + .keymap_data = &ams_delta_keymap_data, > .delay = 9, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c 2010-12-20 19:53:49.000000000 +0100 > @@ -69,36 +69,35 @@ > #define fsample_cpld_clear(bit) \ > fsample_cpld_write(0xf0 | ((bit) & 15), FSAMPLE_CPLD_SET_CLR) > > -static int fsample_keymap[] = { > - KEY(0,0,KEY_UP), > - KEY(0,1,KEY_RIGHT), > - KEY(0,2,KEY_LEFT), > - KEY(0,3,KEY_DOWN), > - KEY(0,4,KEY_ENTER), > - KEY(1,0,KEY_F10), > - KEY(1,1,KEY_SEND), > - KEY(1,2,KEY_END), > - KEY(1,3,KEY_VOLUMEDOWN), > - KEY(1,4,KEY_VOLUMEUP), > - KEY(1,5,KEY_RECORD), > - KEY(2,0,KEY_F9), > - KEY(2,1,KEY_3), > - KEY(2,2,KEY_6), > - KEY(2,3,KEY_9), > - KEY(2,4,KEY_KPDOT), > - KEY(3,0,KEY_BACK), > - KEY(3,1,KEY_2), > - KEY(3,2,KEY_5), > - KEY(3,3,KEY_8), > - KEY(3,4,KEY_0), > - KEY(3,5,KEY_KPSLASH), > - KEY(4,0,KEY_HOME), > - KEY(4,1,KEY_1), > - KEY(4,2,KEY_4), > - KEY(4,3,KEY_7), > - KEY(4,4,KEY_KPASTERISK), > - KEY(4,5,KEY_POWER), > - 0 > +static const unsigned int fsample_keymap[] = { > + KEY(0, 0, KEY_UP), > + KEY(1, 0, KEY_RIGHT), > + KEY(2, 0, KEY_LEFT), > + KEY(3, 0, KEY_DOWN), > + KEY(4, 0, KEY_ENTER), > + KEY(0, 1, KEY_F10), > + KEY(1, 1, KEY_SEND), > + KEY(2, 1, KEY_END), > + KEY(3, 1, KEY_VOLUMEDOWN), > + KEY(4, 1, KEY_VOLUMEUP), > + KEY(5, 1, KEY_RECORD), > + KEY(0, 2, KEY_F9), > + KEY(1, 2, KEY_3), > + KEY(2, 2, KEY_6), > + KEY(3, 2, KEY_9), > + KEY(4, 2, KEY_KPDOT), > + KEY(0, 3, KEY_BACK), > + KEY(1, 3, KEY_2), > + KEY(2, 3, KEY_5), > + KEY(3, 3, KEY_8), > + KEY(4, 3, KEY_0), > + KEY(5, 3, KEY_KPSLASH), > + KEY(0, 4, KEY_HOME), > + KEY(1, 4, KEY_1), > + KEY(2, 4, KEY_4), > + KEY(3, 4, KEY_7), > + KEY(4, 4, KEY_KPASTERISK), > + KEY(5, 4, KEY_POWER), > }; > > static struct smc91x_platdata smc91x_info = { > @@ -253,11 +252,15 @@ static struct resource kp_resources[] = > }, > }; > > +static const struct matrix_keymap_data fsample_keymap_data = { > + .keymap = fsample_keymap, > + .keymap_size = ARRAY_SIZE(fsample_keymap), > +}; > + > static struct omap_kp_platform_data kp_data = { > .rows = 8, > .cols = 8, > - .keymap = fsample_keymap, > - .keymapsize = ARRAY_SIZE(fsample_keymap), > + .keymap_data = &fsample_keymap_data, > .delay = 4, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c 2010-12-20 19:54:01.000000000 +0100 > @@ -52,43 +52,42 @@ > /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ > #define OMAP1610_ETHR_START 0x04000300 > > -static int h2_keymap[] = { > +static const unsigned int h2_keymap[] = { > KEY(0, 0, KEY_LEFT), > - KEY(0, 1, KEY_RIGHT), > - KEY(0, 2, KEY_3), > - KEY(0, 3, KEY_F10), > - KEY(0, 4, KEY_F5), > - KEY(0, 5, KEY_9), > - KEY(1, 0, KEY_DOWN), > + KEY(1, 0, KEY_RIGHT), > + KEY(2, 0, KEY_3), > + KEY(3, 0, KEY_F10), > + KEY(4, 0, KEY_F5), > + KEY(5, 0, KEY_9), > + KEY(0, 1, KEY_DOWN), > KEY(1, 1, KEY_UP), > - KEY(1, 2, KEY_2), > - KEY(1, 3, KEY_F9), > - KEY(1, 4, KEY_F7), > - KEY(1, 5, KEY_0), > - KEY(2, 0, KEY_ENTER), > - KEY(2, 1, KEY_6), > + KEY(2, 1, KEY_2), > + KEY(3, 1, KEY_F9), > + KEY(4, 1, KEY_F7), > + KEY(5, 1, KEY_0), > + KEY(0, 2, KEY_ENTER), > + KEY(1, 2, KEY_6), > KEY(2, 2, KEY_1), > - KEY(2, 3, KEY_F2), > - KEY(2, 4, KEY_F6), > - KEY(2, 5, KEY_HOME), > - KEY(3, 0, KEY_8), > - KEY(3, 1, KEY_5), > - KEY(3, 2, KEY_F12), > + KEY(3, 2, KEY_F2), > + KEY(4, 2, KEY_F6), > + KEY(5, 2, KEY_HOME), > + KEY(0, 3, KEY_8), > + KEY(1, 3, KEY_5), > + KEY(2, 3, KEY_F12), > KEY(3, 3, KEY_F3), > - KEY(3, 4, KEY_F8), > - KEY(3, 5, KEY_END), > - KEY(4, 0, KEY_7), > - KEY(4, 1, KEY_4), > - KEY(4, 2, KEY_F11), > - KEY(4, 3, KEY_F1), > + KEY(4, 3, KEY_F8), > + KEY(5, 3, KEY_END), > + KEY(0, 4, KEY_7), > + KEY(1, 4, KEY_4), > + KEY(2, 4, KEY_F11), > + KEY(3, 4, KEY_F1), > KEY(4, 4, KEY_F4), > - KEY(4, 5, KEY_ESC), > - KEY(5, 0, KEY_F13), > - KEY(5, 1, KEY_F14), > - KEY(5, 2, KEY_F15), > - KEY(5, 3, KEY_F16), > - KEY(5, 4, KEY_SLEEP), > - 0 > + KEY(5, 4, KEY_ESC), > + KEY(0, 5, KEY_F13), > + KEY(1, 5, KEY_F14), > + KEY(2, 5, KEY_F15), > + KEY(3, 5, KEY_F16), > + KEY(4, 5, KEY_SLEEP), > }; > > static struct mtd_partition h2_nor_partitions[] = { > @@ -270,14 +269,18 @@ static struct resource h2_kp_resources[] > }, > }; > > +static const struct matrix_keymap_data h2_keymap_data = { > + .keymap = h2_keymap, > + .keymap_size = ARRAY_SIZE(h2_keymap), > +}; > + > static struct omap_kp_platform_data h2_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = h2_keymap, > - .keymapsize = ARRAY_SIZE(h2_keymap), > - .rep = 1, > + .keymap_data = &h2_keymap_data, > + .rep = true, > .delay = 9, > - .dbounce = 1, > + .dbounce = true, > }; > > static struct platform_device h2_kp_device = { > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c 2010-12-20 19:54:10.000000000 +0100 > @@ -56,43 +56,42 @@ > > #define H3_TS_GPIO 48 > > -static int h3_keymap[] = { > +static const unsigned int h3_keymap[] = { > KEY(0, 0, KEY_LEFT), > - KEY(0, 1, KEY_RIGHT), > - KEY(0, 2, KEY_3), > - KEY(0, 3, KEY_F10), > - KEY(0, 4, KEY_F5), > - KEY(0, 5, KEY_9), > - KEY(1, 0, KEY_DOWN), > + KEY(1, 0, KEY_RIGHT), > + KEY(2, 0, KEY_3), > + KEY(3, 0, KEY_F10), > + KEY(4, 0, KEY_F5), > + KEY(5, 0, KEY_9), > + KEY(0, 1, KEY_DOWN), > KEY(1, 1, KEY_UP), > - KEY(1, 2, KEY_2), > - KEY(1, 3, KEY_F9), > - KEY(1, 4, KEY_F7), > - KEY(1, 5, KEY_0), > - KEY(2, 0, KEY_ENTER), > - KEY(2, 1, KEY_6), > + KEY(2, 1, KEY_2), > + KEY(3, 1, KEY_F9), > + KEY(4, 1, KEY_F7), > + KEY(5, 1, KEY_0), > + KEY(0, 2, KEY_ENTER), > + KEY(1, 2, KEY_6), > KEY(2, 2, KEY_1), > - KEY(2, 3, KEY_F2), > - KEY(2, 4, KEY_F6), > - KEY(2, 5, KEY_HOME), > - KEY(3, 0, KEY_8), > - KEY(3, 1, KEY_5), > - KEY(3, 2, KEY_F12), > + KEY(3, 2, KEY_F2), > + KEY(4, 2, KEY_F6), > + KEY(5, 2, KEY_HOME), > + KEY(0, 3, KEY_8), > + KEY(1, 3, KEY_5), > + KEY(2, 3, KEY_F12), > KEY(3, 3, KEY_F3), > - KEY(3, 4, KEY_F8), > - KEY(3, 5, KEY_END), > - KEY(4, 0, KEY_7), > - KEY(4, 1, KEY_4), > - KEY(4, 2, KEY_F11), > - KEY(4, 3, KEY_F1), > + KEY(4, 3, KEY_F8), > + KEY(5, 3, KEY_END), > + KEY(0, 4, KEY_7), > + KEY(1, 4, KEY_4), > + KEY(2, 4, KEY_F11), > + KEY(3, 4, KEY_F1), > KEY(4, 4, KEY_F4), > - KEY(4, 5, KEY_ESC), > - KEY(5, 0, KEY_F13), > - KEY(5, 1, KEY_F14), > - KEY(5, 2, KEY_F15), > - KEY(5, 3, KEY_F16), > - KEY(5, 4, KEY_SLEEP), > - 0 > + KEY(5, 4, KEY_ESC), > + KEY(0, 5, KEY_F13), > + KEY(1, 5, KEY_F14), > + KEY(2, 5, KEY_F15), > + KEY(3, 5, KEY_F16), > + KEY(4, 5, KEY_SLEEP), > }; > > > @@ -305,14 +304,18 @@ static struct resource h3_kp_resources[] > }, > }; > > +static const struct matrix_keymap_data h3_keymap_data = { > + .keymap = h3_keymap, > + .keymap_size = ARRAY_SIZE(h3_keymap), > +}; > + > static struct omap_kp_platform_data h3_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = h3_keymap, > - .keymapsize = ARRAY_SIZE(h3_keymap), > - .rep = 1, > + .keymap_data = &h3_keymap_data, > + .rep = true, > .delay = 9, > - .dbounce = 1, > + .dbounce = true, > }; > > static struct platform_device h3_kp_device = { > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c 2010-12-20 19:54:18.000000000 +0100 > @@ -180,64 +180,68 @@ > > /* Keyboard definition */ > > -static int htc_herald_keymap[] = { > +static const unsigned int htc_herald_keymap[] = { > KEY(0, 0, KEY_RECORD), /* Mail button */ > - KEY(0, 1, KEY_CAMERA), /* Camera */ > - KEY(0, 2, KEY_PHONE), /* Send key */ > - KEY(0, 3, KEY_VOLUMEUP), /* Volume up */ > - KEY(0, 4, KEY_F2), /* Right bar (landscape) */ > - KEY(0, 5, KEY_MAIL), /* Win key (portrait) */ > - KEY(0, 6, KEY_DIRECTORY), /* Right bar (protrait) */ > - KEY(1, 0, KEY_LEFTCTRL), /* Windows key */ > + KEY(1, 0, KEY_CAMERA), /* Camera */ > + KEY(2, 0, KEY_PHONE), /* Send key */ > + KEY(3, 0, KEY_VOLUMEUP), /* Volume up */ > + KEY(4, 0, KEY_F2), /* Right bar (landscape) */ > + KEY(5, 0, KEY_MAIL), /* Win key (portrait) */ > + KEY(6, 0, KEY_DIRECTORY), /* Right bar (protrait) */ > + KEY(0, 1, KEY_LEFTCTRL), /* Windows key */ > KEY(1, 1, KEY_COMMA), > - KEY(1, 2, KEY_M), > - KEY(1, 3, KEY_K), > - KEY(1, 4, KEY_SLASH), /* OK key */ > - KEY(1, 5, KEY_I), > - KEY(1, 6, KEY_U), > - KEY(2, 0, KEY_LEFTALT), > - KEY(2, 1, KEY_TAB), > + KEY(2, 1, KEY_M), > + KEY(3, 1, KEY_K), > + KEY(4, 1, KEY_SLASH), /* OK key */ > + KEY(5, 1, KEY_I), > + KEY(6, 1, KEY_U), > + KEY(0, 2, KEY_LEFTALT), > + KEY(1, 2, KEY_TAB), > KEY(2, 2, KEY_N), > - KEY(2, 3, KEY_J), > - KEY(2, 4, KEY_ENTER), > - KEY(2, 5, KEY_H), > - KEY(2, 6, KEY_Y), > - KEY(3, 0, KEY_SPACE), > - KEY(3, 1, KEY_L), > - KEY(3, 2, KEY_B), > + KEY(3, 2, KEY_J), > + KEY(4, 2, KEY_ENTER), > + KEY(5, 2, KEY_H), > + KEY(6, 2, KEY_Y), > + KEY(0, 3, KEY_SPACE), > + KEY(1, 3, KEY_L), > + KEY(2, 3, KEY_B), > KEY(3, 3, KEY_V), > - KEY(3, 4, KEY_BACKSPACE), > - KEY(3, 5, KEY_G), > - KEY(3, 6, KEY_T), > - KEY(4, 0, KEY_CAPSLOCK), /* Shift */ > - KEY(4, 1, KEY_C), > - KEY(4, 2, KEY_F), > - KEY(4, 3, KEY_R), > + KEY(4, 3, KEY_BACKSPACE), > + KEY(5, 3, KEY_G), > + KEY(6, 3, KEY_T), > + KEY(0, 4, KEY_CAPSLOCK), /* Shift */ > + KEY(1, 4, KEY_C), > + KEY(2, 4, KEY_F), > + KEY(3, 4, KEY_R), > KEY(4, 4, KEY_O), > - KEY(4, 5, KEY_E), > - KEY(4, 6, KEY_D), > - KEY(5, 0, KEY_X), > - KEY(5, 1, KEY_Z), > - KEY(5, 2, KEY_S), > - KEY(5, 3, KEY_W), > - KEY(5, 4, KEY_P), > + KEY(5, 4, KEY_E), > + KEY(6, 4, KEY_D), > + KEY(0, 5, KEY_X), > + KEY(1, 5, KEY_Z), > + KEY(2, 5, KEY_S), > + KEY(3, 5, KEY_W), > + KEY(4, 5, KEY_P), > KEY(5, 5, KEY_Q), > - KEY(5, 6, KEY_A), > - KEY(6, 0, KEY_CONNECT), /* Voice button */ > - KEY(6, 2, KEY_CANCEL), /* End key */ > - KEY(6, 3, KEY_VOLUMEDOWN), /* Volume down */ > - KEY(6, 4, KEY_F1), /* Left bar (landscape) */ > - KEY(6, 5, KEY_WWW), /* OK button (portrait) */ > + KEY(6, 5, KEY_A), > + KEY(0, 6, KEY_CONNECT), /* Voice button */ > + KEY(2, 6, KEY_CANCEL), /* End key */ > + KEY(3, 6, KEY_VOLUMEDOWN), /* Volume down */ > + KEY(4, 6, KEY_F1), /* Left bar (landscape) */ > + KEY(5, 6, KEY_WWW), /* OK button (portrait) */ > KEY(6, 6, KEY_CALENDAR), /* Left bar (portrait) */ > - 0 > }; > > -struct omap_kp_platform_data htcherald_kp_data = { > +static const struct matrix_keymap_data htc_herald_keymap_data = { > + .keymap = htc_herald_keymap, > + .keymap_size = ARRAY_SIZE(htc_herald_keymap), > +}; > + > +static struct omap_kp_platform_data htcherald_kp_data = { > .rows = 7, > .cols = 7, > .delay = 20, > - .rep = 1, > - .keymap = htc_herald_keymap, > + .rep = true, > + .keymap_data = &htc_herald_keymap_data, > }; > > static struct resource kp_resources[] = { > @@ -278,7 +282,7 @@ static struct gpio_keys_button herald_gp > static struct gpio_keys_platform_data herald_gpio_keys_data = { > .buttons = herald_gpio_keys_table, > .nbuttons = ARRAY_SIZE(herald_gpio_keys_table), > - .rep = 1, > + .rep = true, > }; > > static struct platform_device herald_gpiokeys_device = { > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c 2010-12-20 19:54:32.000000000 +0100 > @@ -44,17 +44,16 @@ > /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ > #define INNOVATOR1610_ETHR_START 0x04000300 > > -static int innovator_keymap[] = { > +static const unsigned int innovator_keymap[] = { > KEY(0, 0, KEY_F1), > - KEY(0, 3, KEY_DOWN), > + KEY(3, 0, KEY_DOWN), > KEY(1, 1, KEY_F2), > - KEY(1, 2, KEY_RIGHT), > - KEY(2, 0, KEY_F3), > - KEY(2, 1, KEY_F4), > + KEY(2, 1, KEY_RIGHT), > + KEY(0, 2, KEY_F3), > + KEY(1, 2, KEY_F4), > KEY(2, 2, KEY_UP), > - KEY(3, 2, KEY_ENTER), > + KEY(2, 3, KEY_ENTER), > KEY(3, 3, KEY_LEFT), > - 0 > }; > > static struct mtd_partition innovator_partitions[] = { > @@ -126,11 +125,15 @@ static struct resource innovator_kp_reso > }, > }; > > +static const struct matrix_keymap_data innovator_keymap_data = { > + .keymap = innovator_keymap, > + .keymap_size = ARRAY_SIZE(innovator_keymap), > +}; > + > static struct omap_kp_platform_data innovator_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = innovator_keymap, > - .keymapsize = ARRAY_SIZE(innovator_keymap), > + .keymap_data = &innovator_keymap_data, > .delay = 4, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c 2010-12-20 19:54:44.000000000 +0100 > @@ -56,19 +56,18 @@ static void __init omap_nokia770_init_ir > omap_init_irq(); > } > > -static int nokia770_keymap[] = { > - KEY(0, 1, GROUP_0 | KEY_UP), > - KEY(0, 2, GROUP_1 | KEY_F5), > - KEY(1, 0, GROUP_0 | KEY_LEFT), > +static const unsigned int nokia770_keymap[] = { > + KEY(1, 0, GROUP_0 | KEY_UP), > + KEY(2, 0, GROUP_1 | KEY_F5), > + KEY(0, 1, GROUP_0 | KEY_LEFT), > KEY(1, 1, GROUP_0 | KEY_ENTER), > - KEY(1, 2, GROUP_0 | KEY_RIGHT), > - KEY(2, 0, GROUP_1 | KEY_ESC), > - KEY(2, 1, GROUP_0 | KEY_DOWN), > + KEY(2, 1, GROUP_0 | KEY_RIGHT), > + KEY(0, 2, GROUP_1 | KEY_ESC), > + KEY(1, 2, GROUP_0 | KEY_DOWN), > KEY(2, 2, GROUP_1 | KEY_F4), > - KEY(3, 0, GROUP_2 | KEY_F7), > - KEY(3, 1, GROUP_2 | KEY_F8), > - KEY(3, 2, GROUP_2 | KEY_F6), > - 0 > + KEY(0, 3, GROUP_2 | KEY_F7), > + KEY(1, 3, GROUP_2 | KEY_F8), > + KEY(2, 3, GROUP_2 | KEY_F6), > }; > > static struct resource nokia770_kp_resources[] = { > @@ -79,11 +78,15 @@ static struct resource nokia770_kp_resou > }, > }; > > +static const struct matrix_keymap_data nokia770_keymap_data = { > + .keymap = nokia770_keymap, > + .keymap_size = ARRAY_SIZE(nokia770_keymap), > +}; > + > static struct omap_kp_platform_data nokia770_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = nokia770_keymap, > - .keymapsize = ARRAY_SIZE(nokia770_keymap), > + .keymap_data = &nokia770_keymap_data, > .delay = 4, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c 2010-12-20 19:55:13.000000000 +0100 > @@ -338,25 +338,28 @@ static struct i2c_board_info __initdata > */ > }; > > -static const int osk_keymap[] = { > +static const unsigned int osk_keymap[] = { > /* KEY(col, row, code) */ > KEY(0, 0, KEY_F1), /* SW4 */ > - KEY(0, 3, KEY_UP), /* (sw2/up) */ > + KEY(3, 0, KEY_UP), /* (sw2/up) */ > KEY(1, 1, KEY_LEFTCTRL), /* SW5 */ > - KEY(1, 2, KEY_LEFT), /* (sw2/left) */ > - KEY(2, 0, KEY_SPACE), /* SW3 */ > - KEY(2, 1, KEY_ESC), /* SW6 */ > + KEY(2, 1, KEY_LEFT), /* (sw2/left) */ > + KEY(0, 2, KEY_SPACE), /* SW3 */ > + KEY(1, 2, KEY_ESC), /* SW6 */ > KEY(2, 2, KEY_DOWN), /* (sw2/down) */ > - KEY(3, 2, KEY_ENTER), /* (sw2/select) */ > + KEY(2, 3, KEY_ENTER), /* (sw2/select) */ > KEY(3, 3, KEY_RIGHT), /* (sw2/right) */ > - 0 > +}; > + > +static const struct matrix_keymap_data osk_keymap_data = { > + .keymap = osk_keymap, > + .keymap_size = ARRAY_SIZE(osk_keymap), > }; > > static struct omap_kp_platform_data osk_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = (int *) osk_keymap, > - .keymapsize = ARRAY_SIZE(osk_keymap), > + .keymap_data = &osk_keymap_data, > .delay = 9, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c 2010-12-20 19:56:22.000000000 +0100 > @@ -65,25 +65,29 @@ static void __init omap_palmte_init_irq( > omap_init_irq(); > } > > -static const int palmte_keymap[] = { > +static const unsigned int palmte_keymap[] = { > KEY(0, 0, KEY_F1), /* Calendar */ > - KEY(0, 1, KEY_F2), /* Contacts */ > - KEY(0, 2, KEY_F3), /* Tasks List */ > - KEY(0, 3, KEY_F4), /* Note Pad */ > - KEY(0, 4, KEY_POWER), > - KEY(1, 0, KEY_LEFT), > + KEY(1, 0, KEY_F2), /* Contacts */ > + KEY(2, 0, KEY_F3), /* Tasks List */ > + KEY(3, 0, KEY_F4), /* Note Pad */ > + KEY(4, 0, KEY_POWER), > + KEY(0, 1, KEY_LEFT), > KEY(1, 1, KEY_DOWN), > - KEY(1, 2, KEY_UP), > - KEY(1, 3, KEY_RIGHT), > - KEY(1, 4, KEY_ENTER), > - 0, > + KEY(2, 1, KEY_UP), > + KEY(3, 1, KEY_RIGHT), > + KEY(4, 1, KEY_ENTER), > +}; > + > +static const struct matrix_keymap_data palmte_keymap_data = { > + .keymap = palmte_keymap, > + .keymap_size = ARRAY_SIZE(palmte_keymap), > }; > > static struct omap_kp_platform_data palmte_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = (int *) palmte_keymap, > - .rep = 1, > + .keymap_data = &palmte_keymap_data, > + .rep = true, > .delay = 12, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c 2010-12-20 19:56:36.000000000 +0100 > @@ -51,19 +51,18 @@ > #define PALMTT_MMC_WP_GPIO 8 > #define PALMTT_HDQ_GPIO 11 > > -static int palmtt_keymap[] = { > +static const unsigned int palmtt_keymap[] = { > KEY(0, 0, KEY_ESC), > - KEY(0, 1, KEY_SPACE), > - KEY(0, 2, KEY_LEFTCTRL), > - KEY(0, 3, KEY_TAB), > - KEY(0, 4, KEY_ENTER), > - KEY(1, 0, KEY_LEFT), > + KEY(1, 0, KEY_SPACE), > + KEY(2, 0, KEY_LEFTCTRL), > + KEY(3, 0, KEY_TAB), > + KEY(4, 0, KEY_ENTER), > + KEY(0, 1, KEY_LEFT), > KEY(1, 1, KEY_DOWN), > - KEY(1, 2, KEY_UP), > - KEY(1, 3, KEY_RIGHT), > - KEY(2, 0, KEY_SLEEP), > - KEY(2, 4, KEY_Y), > - 0 > + KEY(2, 1, KEY_UP), > + KEY(3, 1, KEY_RIGHT), > + KEY(0, 2, KEY_SLEEP), > + KEY(4, 2, KEY_Y), > }; > > static struct mtd_partition palmtt_partitions[] = { > @@ -136,10 +135,15 @@ static struct resource palmtt_kp_resourc > }, > }; > > +static const struct matrix_keymap_data palmtt_keymap_data = { > + .keymap = palmtt_keymap, > + .keymap_size = ARRAY_SIZE(palmtt_keymap), > +}; > + > static struct omap_kp_platform_data palmtt_kp_data = { > .rows = 6, > .cols = 3, > - .keymap = palmtt_keymap, > + .keymap_data = &palmtt_keymap_data, > }; > > static struct platform_device palmtt_kp_device = { > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c 2010-12-20 19:56:48.000000000 +0100 > @@ -64,26 +64,30 @@ omap_palmz71_init_irq(void) > omap_init_irq(); > } > > -static int palmz71_keymap[] = { > +static const unsigned int palmz71_keymap[] = { > KEY(0, 0, KEY_F1), > - KEY(0, 1, KEY_F2), > - KEY(0, 2, KEY_F3), > - KEY(0, 3, KEY_F4), > - KEY(0, 4, KEY_POWER), > - KEY(1, 0, KEY_LEFT), > + KEY(1, 0, KEY_F2), > + KEY(2, 0, KEY_F3), > + KEY(3, 0, KEY_F4), > + KEY(4, 0, KEY_POWER), > + KEY(0, 1, KEY_LEFT), > KEY(1, 1, KEY_DOWN), > - KEY(1, 2, KEY_UP), > - KEY(1, 3, KEY_RIGHT), > - KEY(1, 4, KEY_ENTER), > - KEY(2, 0, KEY_CAMERA), > - 0, > + KEY(2, 1, KEY_UP), > + KEY(3, 1, KEY_RIGHT), > + KEY(4, 1, KEY_ENTER), > + KEY(0, 2, KEY_CAMERA), > +}; > + > +static const struct matrix_keymap_data palmz71_keymap_data = { > + .keymap = palmz71_keymap, > + .keymap_size = ARRAY_SIZE(palmz71_keymap), > }; > > static struct omap_kp_platform_data palmz71_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = palmz71_keymap, > - .rep = 1, > + .keymap_data = &palmz71_keymap_data, > + .rep = true, > .delay = 80, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c 2010-12-20 19:57:05.000000000 +0100 > @@ -36,36 +36,35 @@ > #include <plat/common.h> > #include <plat/board.h> > > -static int p2_keymap[] = { > - KEY(0,0,KEY_UP), > - KEY(0,1,KEY_RIGHT), > - KEY(0,2,KEY_LEFT), > - KEY(0,3,KEY_DOWN), > - KEY(0,4,KEY_ENTER), > - KEY(1,0,KEY_F10), > - KEY(1,1,KEY_SEND), > - KEY(1,2,KEY_END), > - KEY(1,3,KEY_VOLUMEDOWN), > - KEY(1,4,KEY_VOLUMEUP), > - KEY(1,5,KEY_RECORD), > - KEY(2,0,KEY_F9), > - KEY(2,1,KEY_3), > - KEY(2,2,KEY_6), > - KEY(2,3,KEY_9), > - KEY(2,4,KEY_KPDOT), > - KEY(3,0,KEY_BACK), > - KEY(3,1,KEY_2), > - KEY(3,2,KEY_5), > - KEY(3,3,KEY_8), > - KEY(3,4,KEY_0), > - KEY(3,5,KEY_KPSLASH), > - KEY(4,0,KEY_HOME), > - KEY(4,1,KEY_1), > - KEY(4,2,KEY_4), > - KEY(4,3,KEY_7), > - KEY(4,4,KEY_KPASTERISK), > - KEY(4,5,KEY_POWER), > - 0 > +static const unsigned int p2_keymap[] = { > + KEY(0, 0, KEY_UP), > + KEY(1, 0, KEY_RIGHT), > + KEY(2, 0, KEY_LEFT), > + KEY(3, 0, KEY_DOWN), > + KEY(4, 0, KEY_ENTER), > + KEY(0, 1, KEY_F10), > + KEY(1, 1, KEY_SEND), > + KEY(2, 1, KEY_END), > + KEY(3, 1, KEY_VOLUMEDOWN), > + KEY(4, 1, KEY_VOLUMEUP), > + KEY(5, 1, KEY_RECORD), > + KEY(0, 2, KEY_F9), > + KEY(1, 2, KEY_3), > + KEY(2, 2, KEY_6), > + KEY(3, 2, KEY_9), > + KEY(4, 2, KEY_KPDOT), > + KEY(0, 3, KEY_BACK), > + KEY(1, 3, KEY_2), > + KEY(2, 3, KEY_5), > + KEY(3, 3, KEY_8), > + KEY(4, 3, KEY_0), > + KEY(5, 3, KEY_KPSLASH), > + KEY(0, 4, KEY_HOME), > + KEY(1, 4, KEY_1), > + KEY(2, 4, KEY_4), > + KEY(3, 4, KEY_7), > + KEY(4, 4, KEY_KPASTERISK), > + KEY(5, 4, KEY_POWER), > }; > > static struct smc91x_platdata smc91x_info = { > @@ -211,13 +210,17 @@ static struct resource kp_resources[] = > }, > }; > > +static const struct matrix_keymap_data p2_keymap_data = { > + .keymap = p2_keymap, > + .keymap_size = ARRAY_SIZE(p2_keymap), > +}; > + > static struct omap_kp_platform_data kp_data = { > .rows = 8, > .cols = 8, > - .keymap = p2_keymap, > - .keymapsize = ARRAY_SIZE(p2_keymap), > + .keymap_data = &p2_keymap_data, > .delay = 4, > - .dbounce = 1, > + .dbounce = true, > }; > > static struct platform_device kp_device = { > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c 2010-12-20 19:57:14.000000000 +0100 > @@ -164,36 +164,35 @@ EXPORT_SYMBOL(sx1_setusbpower); > > /*----------- Keypad -------------------------*/ > > -static int sx1_keymap[] = { > - KEY(5, 3, GROUP_0 | 117), /* camera Qt::Key_F17 */ > - KEY(0, 4, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ > - KEY(1, 4, GROUP_2 | 114), /* voice memo */ > - KEY(2, 4, GROUP_3 | 114), /* voice memo */ > +static const unsigned int sx1_keymap[] = { > + KEY(3, 5, GROUP_0 | 117), /* camera Qt::Key_F17 */ > + KEY(4, 0, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ > + KEY(4, 1, GROUP_2 | 114), /* voice memo */ > + KEY(4, 2, GROUP_3 | 114), /* voice memo */ > KEY(0, 0, GROUP_1 | KEY_F12), /* red button Qt::Key_Hangup */ > - KEY(4, 3, GROUP_1 | KEY_LEFT), > - KEY(2, 3, GROUP_1 | KEY_DOWN), > - KEY(1, 3, GROUP_1 | KEY_RIGHT), > - KEY(0, 3, GROUP_1 | KEY_UP), > + KEY(3, 4, GROUP_1 | KEY_LEFT), > + KEY(3, 2, GROUP_1 | KEY_DOWN), > + KEY(3, 1, GROUP_1 | KEY_RIGHT), > + KEY(3, 0, GROUP_1 | KEY_UP), > KEY(3, 3, GROUP_1 | KEY_POWER), /* joystick press or Qt::Key_Select */ > - KEY(5, 0, GROUP_1 | KEY_1), > - KEY(4, 0, GROUP_1 | KEY_2), > - KEY(3, 0, GROUP_1 | KEY_3), > - KEY(3, 4, GROUP_1 | KEY_4), > + KEY(0, 5, GROUP_1 | KEY_1), > + KEY(0, 4, GROUP_1 | KEY_2), > + KEY(0, 3, GROUP_1 | KEY_3), > + KEY(4, 3, GROUP_1 | KEY_4), > KEY(4, 4, GROUP_1 | KEY_5), > - KEY(5, 4, GROUP_1 | KEY_KPASTERISK),/* "*" */ > - KEY(4, 1, GROUP_1 | KEY_6), > - KEY(5, 1, GROUP_1 | KEY_7), > - KEY(3, 1, GROUP_1 | KEY_8), > - KEY(3, 2, GROUP_1 | KEY_9), > - KEY(5, 2, GROUP_1 | KEY_0), > - KEY(4, 2, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ > - KEY(0, 1, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ > - KEY(1, 2, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ > + KEY(4, 5, GROUP_1 | KEY_KPASTERISK),/* "*" */ > + KEY(1, 4, GROUP_1 | KEY_6), > + KEY(1, 5, GROUP_1 | KEY_7), > + KEY(1, 3, GROUP_1 | KEY_8), > + KEY(2, 3, GROUP_1 | KEY_9), > + KEY(2, 5, GROUP_1 | KEY_0), > + KEY(2, 4, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ > + KEY(1, 0, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ > + KEY(2, 1, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ > KEY(2, 2, GROUP_1 | KEY_F8), /* right soft Qt::Key_Back */ > - KEY(2, 1, GROUP_1 | KEY_LEFTSHIFT), /* shift */ > + KEY(1, 2, GROUP_1 | KEY_LEFTSHIFT), /* shift */ > KEY(1, 1, GROUP_1 | KEY_BACKSPACE), /* C (clear) */ > - KEY(0, 2, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ > - 0 > + KEY(2, 0, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ > }; > > static struct resource sx1_kp_resources[] = { > @@ -204,11 +203,15 @@ static struct resource sx1_kp_resources[ > }, > }; > > +static const struct matrix_keymap_data sx1_keymap_data = { > + .keymap = sx1_keymap, > + .keymap_size = ARRAY_SIZE(sx1_keymap), > +}; > + > static struct omap_kp_platform_data sx1_kp_data = { > .rows = 6, > .cols = 6, > - .keymap = sx1_keymap, > - .keymapsize = ARRAY_SIZE(sx1_keymap), > + .keymap_data = &sx1_keymap_data, > .delay = 80, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c 2010-12-20 19:57:32.000000000 +0100 > @@ -51,38 +51,37 @@ > static unsigned int row_gpios[6] = { 88, 89, 124, 11, 6, 96 }; > static unsigned int col_gpios[7] = { 90, 91, 100, 36, 12, 97, 98 }; > > -static int h4_keymap[] = { > +static const unsigned int h4_keymap[] = { > KEY(0, 0, KEY_LEFT), > - KEY(0, 1, KEY_RIGHT), > - KEY(0, 2, KEY_A), > - KEY(0, 3, KEY_B), > - KEY(0, 4, KEY_C), > - KEY(1, 0, KEY_DOWN), > + KEY(1, 0, KEY_RIGHT), > + KEY(2, 0, KEY_A), > + KEY(3, 0, KEY_B), > + KEY(4, 0, KEY_C), > + KEY(0, 1, KEY_DOWN), > KEY(1, 1, KEY_UP), > - KEY(1, 2, KEY_E), > - KEY(1, 3, KEY_F), > - KEY(1, 4, KEY_G), > - KEY(2, 0, KEY_ENTER), > - KEY(2, 1, KEY_I), > + KEY(2, 1, KEY_E), > + KEY(3, 1, KEY_F), > + KEY(4, 1, KEY_G), > + KEY(0, 2, KEY_ENTER), > + KEY(1, 2, KEY_I), > KEY(2, 2, KEY_J), > - KEY(2, 3, KEY_K), > - KEY(2, 4, KEY_3), > - KEY(3, 0, KEY_M), > - KEY(3, 1, KEY_N), > - KEY(3, 2, KEY_O), > + KEY(3, 2, KEY_K), > + KEY(4, 2, KEY_3), > + KEY(0, 3, KEY_M), > + KEY(1, 3, KEY_N), > + KEY(2, 3, KEY_O), > KEY(3, 3, KEY_P), > - KEY(3, 4, KEY_Q), > - KEY(4, 0, KEY_R), > - KEY(4, 1, KEY_4), > - KEY(4, 2, KEY_T), > - KEY(4, 3, KEY_U), > + KEY(4, 3, KEY_Q), > + KEY(0, 4, KEY_R), > + KEY(1, 4, KEY_4), > + KEY(2, 4, KEY_T), > + KEY(3, 4, KEY_U), > KEY(4, 4, KEY_ENTER), > - KEY(5, 0, KEY_V), > - KEY(5, 1, KEY_W), > - KEY(5, 2, KEY_L), > - KEY(5, 3, KEY_S), > - KEY(5, 4, KEY_ENTER), > - 0 > + KEY(0, 5, KEY_V), > + KEY(1, 5, KEY_W), > + KEY(2, 5, KEY_L), > + KEY(3, 5, KEY_S), > + KEY(4, 5, KEY_ENTER), > }; > > static struct mtd_partition h4_partitions[] = { > @@ -136,12 +135,16 @@ static struct platform_device h4_flash_d > .resource = &h4_flash_resource, > }; > > +static const struct matrix_keymap_data h4_keymap_data = { > + .keymap = h4_keymap, > + .keymap_size = ARRAY_SIZE(h4_keymap), > +}; > + > static struct omap_kp_platform_data h4_kp_data = { > .rows = 6, > .cols = 7, > - .keymap = h4_keymap, > - .keymapsize = ARRAY_SIZE(h4_keymap), > - .rep = 1, > + .keymap_data = &h4_keymap_data, > + .rep = true, > .row_gpios = row_gpios, > .col_gpios = col_gpios, > }; > ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v3] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-21 11:20 ` Aaro Koskinen 0 siblings, 0 replies; 36+ messages in thread From: Aaro Koskinen @ 2010-12-21 11:20 UTC (permalink / raw) To: linux-arm-kernel Hi, On Mon, 20 Dec 2010, Janusz Krzysztofik wrote: > Most keypad drivers make use of the <linux/input/matrix_keypad.h> > defined macros, structures and inline functions. > > Convert omap-keypad driver to use those as well, as suggested by a > compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > Created against linux-2.6.37-rc5. > Tested on Amstrad Delta. > Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > board-h4. > > Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> Reviewed-by: Aaro Koskinen <aaro.koskinen@nokia.com> > --- > v2 -> v3 changes: > - update all board's keymap tables type to match the struct > matrix_keymap_data .keymap member; thanks to Aaro Koskinen for > pointing this out, > - while being at it, correct one sparse reported issue found (3 times) > in omap-keypad.c (Using plain integer as NULL pointer), and an > omap-keypad related one found in board-htcherald.c > (symbol 'htcherald_kp_data' was not declared. Should it be static?). > > v1 -> v2 changes, both requested by Dmitry Torokhov (thanks!): > - while updating all boards, change rep and dbounce to bool, > - put keycodes at the end of struct omap_kp and allocate it in one shot. > > arch/arm/mach-omap1/board-ams-delta.c | 130 +++++++++++++++---------------- > arch/arm/mach-omap1/board-fsample.c | 67 ++++++++------- > arch/arm/mach-omap1/board-h2.c | 75 +++++++++-------- > arch/arm/mach-omap1/board-h3.c | 75 +++++++++-------- > arch/arm/mach-omap1/board-htcherald.c | 98 ++++++++++++----------- > arch/arm/mach-omap1/board-innovator.c | 21 ++--- > arch/arm/mach-omap1/board-nokia770.c | 29 +++--- > arch/arm/mach-omap1/board-osk.c | 21 ++--- > arch/arm/mach-omap1/board-palmte.c | 28 +++--- > arch/arm/mach-omap1/board-palmtt.c | 28 +++--- > arch/arm/mach-omap1/board-palmz71.c | 30 ++++--- > arch/arm/mach-omap1/board-perseus2.c | 69 ++++++++-------- > arch/arm/mach-omap1/board-sx1.c | 57 +++++++------ > arch/arm/mach-omap2/board-h4.c | 63 +++++++-------- > arch/arm/plat-omap/include/plat/keypad.h | 35 ++++---- > drivers/input/keyboard/omap-keypad.c | 41 ++++----- > include/linux/input/matrix_keypad.h | 2 > 17 files changed, 458 insertions(+), 411 deletions(-) > > --- linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h.orig 2010-12-09 23:07:38.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/plat-omap/include/plat/keypad.h 2010-12-20 18:15:11.000000000 +0100 > @@ -10,16 +10,18 @@ > #ifndef ASMARM_ARCH_KEYPAD_H > #define ASMARM_ARCH_KEYPAD_H > > -#warning: Please update the board to use matrix_keypad.h instead > +#ifndef CONFIG_ARCH_OMAP1 > +#warning Please update the board to use matrix-keypad driver > +#endif > +#include <linux/input/matrix_keypad.h> > > struct omap_kp_platform_data { > int rows; > int cols; > - int *keymap; > - unsigned int keymapsize; > - unsigned int rep:1; > + const struct matrix_keymap_data *keymap_data; > + bool rep; > unsigned long delay; > - unsigned int dbounce:1; > + bool dbounce; > /* specific to OMAP242x*/ > unsigned int *row_gpios; > unsigned int *col_gpios; > @@ -28,18 +30,21 @@ struct omap_kp_platform_data { > /* Group (0..3) -- when multiple keys are pressed, only the > * keys pressed in the same group are considered as pressed. This is > * in order to workaround certain crappy HW designs that produce ghost > - * keypresses. */ > -#define GROUP_0 (0 << 16) > -#define GROUP_1 (1 << 16) > -#define GROUP_2 (2 << 16) > -#define GROUP_3 (3 << 16) > + * keypresses. Two free bits, not used by neither row/col nor keynum, > + * must be available for use as group bits. The below GROUP_SHIFT > + * macro definition is based on some prior knowledge of the > + * matrix_keypad defined KEY() macro internals. > + */ > +#define GROUP_SHIFT 14 > +#define GROUP_0 (0 << GROUP_SHIFT) > +#define GROUP_1 (1 << GROUP_SHIFT) > +#define GROUP_2 (2 << GROUP_SHIFT) > +#define GROUP_3 (3 << GROUP_SHIFT) > #define GROUP_MASK GROUP_3 > +#if KEY_MAX & GROUP_MASK > +#error Group bits in conflict with keynum bits > +#endif > > -#define KEY_PERSISTENT 0x00800000 > -#define KEYNUM_MASK 0x00EFFFFF > -#define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val)) > -#define PERSISTENT_KEY(col, row) (((col) << 28) | ((row) << 24) | \ > - KEY_PERSISTENT) > > #endif > > --- linux-2.6.37-rc5/include/linux/input/matrix_keypad.h.orig 2010-12-09 23:09:05.000000000 +0100 > +++ linux-2.6.37-rc5/include/linux/input/matrix_keypad.h 2010-12-20 18:15:11.000000000 +0100 > @@ -9,7 +9,7 @@ > > #define KEY(row, col, val) ((((row) & (MATRIX_MAX_ROWS - 1)) << 24) |\ > (((col) & (MATRIX_MAX_COLS - 1)) << 16) |\ > - (val & 0xffff)) > + ((val) & 0xffff)) > > #define KEY_ROW(k) (((k) >> 24) & 0xff) > #define KEY_COL(k) (((k) >> 16) & 0xff) > --- linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c.orig 2010-12-09 23:08:09.000000000 +0100 > +++ linux-2.6.37-rc5/drivers/input/keyboard/omap-keypad.c 2010-12-20 18:15:11.000000000 +0100 > @@ -65,7 +65,6 @@ struct omap_kp { > > static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0); > > -static int *keymap; > static unsigned int *row_gpios; > static unsigned int *col_gpios; > > @@ -162,20 +161,11 @@ static void omap_kp_scan_keypad(struct o > } > } > > -static inline int omap_kp_find_key(int col, int row) > -{ > - int i, key; > - > - key = KEY(col, row, 0); > - for (i = 0; keymap[i] != 0; i++) > - if ((keymap[i] & 0xff000000) == key) > - return keymap[i] & 0x00ffffff; > - return -1; > -} > - > static void omap_kp_tasklet(unsigned long data) > { > struct omap_kp *omap_kp_data = (struct omap_kp *) data; > + unsigned short *keycodes = omap_kp_data->input->keycode; > + unsigned int row_shift = get_count_order(omap_kp_data->cols); > unsigned char new_state[8], changed, key_down = 0; > int col, row; > int spurious = 0; > @@ -199,7 +189,7 @@ static void omap_kp_tasklet(unsigned lon > row, (new_state[col] & (1 << row)) ? > "pressed" : "released"); > #else > - key = omap_kp_find_key(col, row); > + key = keycodes[MATRIX_SCAN_CODE(row, col, row_shift)]; > if (key < 0) { > printk(KERN_WARNING > "omap-keypad: Spurious key event %d-%d\n", > @@ -298,13 +288,18 @@ static int __devinit omap_kp_probe(struc > struct input_dev *input_dev; > struct omap_kp_platform_data *pdata = pdev->dev.platform_data; > int i, col_idx, row_idx, irq_idx, ret; > + unsigned int row_shift, keycodemax; > > - if (!pdata->rows || !pdata->cols || !pdata->keymap) { > - printk(KERN_ERR "No rows, cols or keymap from pdata\n"); > + if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { > + printk(KERN_ERR "No rows, cols or keymap_data from pdata\n"); > return -EINVAL; > } > > - omap_kp = kzalloc(sizeof(struct omap_kp), GFP_KERNEL); > + row_shift = get_count_order(pdata->cols); > + keycodemax = pdata->rows << row_shift; > + > + omap_kp = kzalloc(sizeof(struct omap_kp) + > + keycodemax * sizeof(unsigned short), GFP_KERNEL); > input_dev = input_allocate_device(); > if (!omap_kp || !input_dev) { > kfree(omap_kp); > @@ -320,7 +315,9 @@ static int __devinit omap_kp_probe(struc > if (!cpu_is_omap24xx()) > omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); > > - keymap = pdata->keymap; > + input_dev->keycode = &omap_kp[1]; > + input_dev->keycodesize = sizeof(unsigned short); > + input_dev->keycodemax = keycodemax; > > if (pdata->rep) > __set_bit(EV_REP, input_dev->evbit); > @@ -374,8 +371,8 @@ static int __devinit omap_kp_probe(struc > > /* setup input device */ > __set_bit(EV_KEY, input_dev->evbit); > - for (i = 0; keymap[i] != 0; i++) > - __set_bit(keymap[i] & KEY_MAX, input_dev->keybit); > + matrix_keypad_build_keymap(pdata->keymap_data, row_shift, > + input_dev->keycode, input_dev->keybit); > input_dev->name = "omap-keypad"; > input_dev->phys = "omap-keypad/input0"; > input_dev->dev.parent = &pdev->dev; > @@ -416,7 +413,7 @@ static int __devinit omap_kp_probe(struc > return 0; > err5: > for (i = irq_idx - 1; i >=0; i--) > - free_irq(row_gpios[i], 0); > + free_irq(row_gpios[i], NULL); > err4: > input_unregister_device(omap_kp->input); > input_dev = NULL; > @@ -447,11 +444,11 @@ static int __devexit omap_kp_remove(stru > gpio_free(col_gpios[i]); > for (i = 0; i < omap_kp->rows; i++) { > gpio_free(row_gpios[i]); > - free_irq(gpio_to_irq(row_gpios[i]), 0); > + free_irq(gpio_to_irq(row_gpios[i]), NULL); > } > } else { > omap_writew(1, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); > - free_irq(omap_kp->irq, 0); > + free_irq(omap_kp->irq, NULL); > } > > del_timer_sync(&omap_kp->timer); > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-ams-delta.c 2010-12-20 19:53:19.000000000 +0100 > @@ -43,84 +43,82 @@ > static u8 ams_delta_latch1_reg; > static u16 ams_delta_latch2_reg; > > -static int ams_delta_keymap[] = { > +static const unsigned int ams_delta_keymap[] = { > KEY(0, 0, KEY_F1), /* Advert */ > > - KEY(3, 0, KEY_COFFEE), /* Games */ > - KEY(2, 0, KEY_QUESTION), /* Directory */ > - KEY(3, 2, KEY_CONNECT), /* Internet */ > - KEY(2, 1, KEY_SHOP), /* Services */ > + KEY(0, 3, KEY_COFFEE), /* Games */ > + KEY(0, 2, KEY_QUESTION), /* Directory */ > + KEY(2, 3, KEY_CONNECT), /* Internet */ > + KEY(1, 2, KEY_SHOP), /* Services */ > KEY(1, 1, KEY_PHONE), /* VoiceMail */ > > - KEY(1, 0, KEY_DELETE), /* Delete */ > + KEY(0, 1, KEY_DELETE), /* Delete */ > KEY(2, 2, KEY_PLAY), /* Play */ > - KEY(0, 1, KEY_PAGEUP), /* Up */ > - KEY(3, 1, KEY_PAGEDOWN), /* Down */ > - KEY(0, 2, KEY_EMAIL), /* ReadEmail */ > - KEY(1, 2, KEY_STOP), /* Stop */ > + KEY(1, 0, KEY_PAGEUP), /* Up */ > + KEY(1, 3, KEY_PAGEDOWN), /* Down */ > + KEY(2, 0, KEY_EMAIL), /* ReadEmail */ > + KEY(2, 1, KEY_STOP), /* Stop */ > > /* Numeric keypad portion */ > - KEY(7, 0, KEY_KP1), > - KEY(6, 0, KEY_KP2), > - KEY(5, 0, KEY_KP3), > - KEY(7, 1, KEY_KP4), > - KEY(6, 1, KEY_KP5), > - KEY(5, 1, KEY_KP6), > - KEY(7, 2, KEY_KP7), > - KEY(6, 2, KEY_KP8), > - KEY(5, 2, KEY_KP9), > - KEY(6, 3, KEY_KP0), > - KEY(7, 3, KEY_KPASTERISK), > - KEY(5, 3, KEY_KPDOT), /* # key */ > - KEY(2, 7, KEY_NUMLOCK), /* Mute */ > - KEY(1, 7, KEY_KPMINUS), /* Recall */ > - KEY(1, 6, KEY_KPPLUS), /* Redial */ > - KEY(6, 7, KEY_KPSLASH), /* Handsfree */ > - KEY(0, 6, KEY_ENTER), /* Video */ > - > - KEY(4, 7, KEY_CAMERA), /* Photo */ > - > - KEY(4, 0, KEY_F2), /* Home */ > - KEY(4, 1, KEY_F3), /* Office */ > - KEY(4, 2, KEY_F4), /* Mobile */ > + KEY(0, 7, KEY_KP1), > + KEY(0, 6, KEY_KP2), > + KEY(0, 5, KEY_KP3), > + KEY(1, 7, KEY_KP4), > + KEY(1, 6, KEY_KP5), > + KEY(1, 5, KEY_KP6), > + KEY(2, 7, KEY_KP7), > + KEY(2, 6, KEY_KP8), > + KEY(2, 5, KEY_KP9), > + KEY(3, 6, KEY_KP0), > + KEY(3, 7, KEY_KPASTERISK), > + KEY(3, 5, KEY_KPDOT), /* # key */ > + KEY(7, 2, KEY_NUMLOCK), /* Mute */ > + KEY(7, 1, KEY_KPMINUS), /* Recall */ > + KEY(6, 1, KEY_KPPLUS), /* Redial */ > + KEY(7, 6, KEY_KPSLASH), /* Handsfree */ > + KEY(6, 0, KEY_ENTER), /* Video */ > + > + KEY(7, 4, KEY_CAMERA), /* Photo */ > + > + KEY(0, 4, KEY_F2), /* Home */ > + KEY(1, 4, KEY_F3), /* Office */ > + KEY(2, 4, KEY_F4), /* Mobile */ > KEY(7, 7, KEY_F5), /* SMS */ > - KEY(5, 7, KEY_F6), /* Email */ > + KEY(7, 5, KEY_F6), /* Email */ > > /* QWERTY portion of keypad */ > - KEY(4, 3, KEY_Q), > + KEY(3, 4, KEY_Q), > KEY(3, 3, KEY_W), > - KEY(2, 3, KEY_E), > - KEY(1, 3, KEY_R), > - KEY(0, 3, KEY_T), > - KEY(7, 4, KEY_Y), > - KEY(6, 4, KEY_U), > - KEY(5, 4, KEY_I), > + KEY(3, 2, KEY_E), > + KEY(3, 1, KEY_R), > + KEY(3, 0, KEY_T), > + KEY(4, 7, KEY_Y), > + KEY(4, 6, KEY_U), > + KEY(4, 5, KEY_I), > KEY(4, 4, KEY_O), > - KEY(3, 4, KEY_P), > + KEY(4, 3, KEY_P), > > - KEY(2, 4, KEY_A), > - KEY(1, 4, KEY_S), > - KEY(0, 4, KEY_D), > - KEY(7, 5, KEY_F), > - KEY(6, 5, KEY_G), > + KEY(4, 2, KEY_A), > + KEY(4, 1, KEY_S), > + KEY(4, 0, KEY_D), > + KEY(5, 7, KEY_F), > + KEY(5, 6, KEY_G), > KEY(5, 5, KEY_H), > - KEY(4, 5, KEY_J), > - KEY(3, 5, KEY_K), > - KEY(2, 5, KEY_L), > - > - KEY(1, 5, KEY_Z), > - KEY(0, 5, KEY_X), > - KEY(7, 6, KEY_C), > + KEY(5, 4, KEY_J), > + KEY(5, 3, KEY_K), > + KEY(5, 2, KEY_L), > + > + KEY(5, 1, KEY_Z), > + KEY(5, 0, KEY_X), > + KEY(6, 7, KEY_C), > KEY(6, 6, KEY_V), > - KEY(5, 6, KEY_B), > - KEY(4, 6, KEY_N), > - KEY(3, 6, KEY_M), > - KEY(2, 6, KEY_SPACE), > + KEY(6, 5, KEY_B), > + KEY(6, 4, KEY_N), > + KEY(6, 3, KEY_M), > + KEY(6, 2, KEY_SPACE), > > - KEY(0, 7, KEY_LEFTSHIFT), /* Vol up */ > - KEY(3, 7, KEY_LEFTCTRL), /* Vol down */ > - > - 0 > + KEY(7, 0, KEY_LEFTSHIFT), /* Vol up */ > + KEY(7, 3, KEY_LEFTCTRL), /* Vol down */ > }; > > void ams_delta_latch1_write(u8 mask, u8 value) > @@ -189,11 +187,15 @@ static struct resource ams_delta_kp_reso > }, > }; > > +static const struct matrix_keymap_data ams_delta_keymap_data = { > + .keymap = ams_delta_keymap, > + .keymap_size = ARRAY_SIZE(ams_delta_keymap), > +}; > + > static struct omap_kp_platform_data ams_delta_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = ams_delta_keymap, > - .keymapsize = ARRAY_SIZE(ams_delta_keymap), > + .keymap_data = &ams_delta_keymap_data, > .delay = 9, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-fsample.c 2010-12-20 19:53:49.000000000 +0100 > @@ -69,36 +69,35 @@ > #define fsample_cpld_clear(bit) \ > fsample_cpld_write(0xf0 | ((bit) & 15), FSAMPLE_CPLD_SET_CLR) > > -static int fsample_keymap[] = { > - KEY(0,0,KEY_UP), > - KEY(0,1,KEY_RIGHT), > - KEY(0,2,KEY_LEFT), > - KEY(0,3,KEY_DOWN), > - KEY(0,4,KEY_ENTER), > - KEY(1,0,KEY_F10), > - KEY(1,1,KEY_SEND), > - KEY(1,2,KEY_END), > - KEY(1,3,KEY_VOLUMEDOWN), > - KEY(1,4,KEY_VOLUMEUP), > - KEY(1,5,KEY_RECORD), > - KEY(2,0,KEY_F9), > - KEY(2,1,KEY_3), > - KEY(2,2,KEY_6), > - KEY(2,3,KEY_9), > - KEY(2,4,KEY_KPDOT), > - KEY(3,0,KEY_BACK), > - KEY(3,1,KEY_2), > - KEY(3,2,KEY_5), > - KEY(3,3,KEY_8), > - KEY(3,4,KEY_0), > - KEY(3,5,KEY_KPSLASH), > - KEY(4,0,KEY_HOME), > - KEY(4,1,KEY_1), > - KEY(4,2,KEY_4), > - KEY(4,3,KEY_7), > - KEY(4,4,KEY_KPASTERISK), > - KEY(4,5,KEY_POWER), > - 0 > +static const unsigned int fsample_keymap[] = { > + KEY(0, 0, KEY_UP), > + KEY(1, 0, KEY_RIGHT), > + KEY(2, 0, KEY_LEFT), > + KEY(3, 0, KEY_DOWN), > + KEY(4, 0, KEY_ENTER), > + KEY(0, 1, KEY_F10), > + KEY(1, 1, KEY_SEND), > + KEY(2, 1, KEY_END), > + KEY(3, 1, KEY_VOLUMEDOWN), > + KEY(4, 1, KEY_VOLUMEUP), > + KEY(5, 1, KEY_RECORD), > + KEY(0, 2, KEY_F9), > + KEY(1, 2, KEY_3), > + KEY(2, 2, KEY_6), > + KEY(3, 2, KEY_9), > + KEY(4, 2, KEY_KPDOT), > + KEY(0, 3, KEY_BACK), > + KEY(1, 3, KEY_2), > + KEY(2, 3, KEY_5), > + KEY(3, 3, KEY_8), > + KEY(4, 3, KEY_0), > + KEY(5, 3, KEY_KPSLASH), > + KEY(0, 4, KEY_HOME), > + KEY(1, 4, KEY_1), > + KEY(2, 4, KEY_4), > + KEY(3, 4, KEY_7), > + KEY(4, 4, KEY_KPASTERISK), > + KEY(5, 4, KEY_POWER), > }; > > static struct smc91x_platdata smc91x_info = { > @@ -253,11 +252,15 @@ static struct resource kp_resources[] = > }, > }; > > +static const struct matrix_keymap_data fsample_keymap_data = { > + .keymap = fsample_keymap, > + .keymap_size = ARRAY_SIZE(fsample_keymap), > +}; > + > static struct omap_kp_platform_data kp_data = { > .rows = 8, > .cols = 8, > - .keymap = fsample_keymap, > - .keymapsize = ARRAY_SIZE(fsample_keymap), > + .keymap_data = &fsample_keymap_data, > .delay = 4, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h2.c 2010-12-20 19:54:01.000000000 +0100 > @@ -52,43 +52,42 @@ > /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ > #define OMAP1610_ETHR_START 0x04000300 > > -static int h2_keymap[] = { > +static const unsigned int h2_keymap[] = { > KEY(0, 0, KEY_LEFT), > - KEY(0, 1, KEY_RIGHT), > - KEY(0, 2, KEY_3), > - KEY(0, 3, KEY_F10), > - KEY(0, 4, KEY_F5), > - KEY(0, 5, KEY_9), > - KEY(1, 0, KEY_DOWN), > + KEY(1, 0, KEY_RIGHT), > + KEY(2, 0, KEY_3), > + KEY(3, 0, KEY_F10), > + KEY(4, 0, KEY_F5), > + KEY(5, 0, KEY_9), > + KEY(0, 1, KEY_DOWN), > KEY(1, 1, KEY_UP), > - KEY(1, 2, KEY_2), > - KEY(1, 3, KEY_F9), > - KEY(1, 4, KEY_F7), > - KEY(1, 5, KEY_0), > - KEY(2, 0, KEY_ENTER), > - KEY(2, 1, KEY_6), > + KEY(2, 1, KEY_2), > + KEY(3, 1, KEY_F9), > + KEY(4, 1, KEY_F7), > + KEY(5, 1, KEY_0), > + KEY(0, 2, KEY_ENTER), > + KEY(1, 2, KEY_6), > KEY(2, 2, KEY_1), > - KEY(2, 3, KEY_F2), > - KEY(2, 4, KEY_F6), > - KEY(2, 5, KEY_HOME), > - KEY(3, 0, KEY_8), > - KEY(3, 1, KEY_5), > - KEY(3, 2, KEY_F12), > + KEY(3, 2, KEY_F2), > + KEY(4, 2, KEY_F6), > + KEY(5, 2, KEY_HOME), > + KEY(0, 3, KEY_8), > + KEY(1, 3, KEY_5), > + KEY(2, 3, KEY_F12), > KEY(3, 3, KEY_F3), > - KEY(3, 4, KEY_F8), > - KEY(3, 5, KEY_END), > - KEY(4, 0, KEY_7), > - KEY(4, 1, KEY_4), > - KEY(4, 2, KEY_F11), > - KEY(4, 3, KEY_F1), > + KEY(4, 3, KEY_F8), > + KEY(5, 3, KEY_END), > + KEY(0, 4, KEY_7), > + KEY(1, 4, KEY_4), > + KEY(2, 4, KEY_F11), > + KEY(3, 4, KEY_F1), > KEY(4, 4, KEY_F4), > - KEY(4, 5, KEY_ESC), > - KEY(5, 0, KEY_F13), > - KEY(5, 1, KEY_F14), > - KEY(5, 2, KEY_F15), > - KEY(5, 3, KEY_F16), > - KEY(5, 4, KEY_SLEEP), > - 0 > + KEY(5, 4, KEY_ESC), > + KEY(0, 5, KEY_F13), > + KEY(1, 5, KEY_F14), > + KEY(2, 5, KEY_F15), > + KEY(3, 5, KEY_F16), > + KEY(4, 5, KEY_SLEEP), > }; > > static struct mtd_partition h2_nor_partitions[] = { > @@ -270,14 +269,18 @@ static struct resource h2_kp_resources[] > }, > }; > > +static const struct matrix_keymap_data h2_keymap_data = { > + .keymap = h2_keymap, > + .keymap_size = ARRAY_SIZE(h2_keymap), > +}; > + > static struct omap_kp_platform_data h2_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = h2_keymap, > - .keymapsize = ARRAY_SIZE(h2_keymap), > - .rep = 1, > + .keymap_data = &h2_keymap_data, > + .rep = true, > .delay = 9, > - .dbounce = 1, > + .dbounce = true, > }; > > static struct platform_device h2_kp_device = { > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-h3.c 2010-12-20 19:54:10.000000000 +0100 > @@ -56,43 +56,42 @@ > > #define H3_TS_GPIO 48 > > -static int h3_keymap[] = { > +static const unsigned int h3_keymap[] = { > KEY(0, 0, KEY_LEFT), > - KEY(0, 1, KEY_RIGHT), > - KEY(0, 2, KEY_3), > - KEY(0, 3, KEY_F10), > - KEY(0, 4, KEY_F5), > - KEY(0, 5, KEY_9), > - KEY(1, 0, KEY_DOWN), > + KEY(1, 0, KEY_RIGHT), > + KEY(2, 0, KEY_3), > + KEY(3, 0, KEY_F10), > + KEY(4, 0, KEY_F5), > + KEY(5, 0, KEY_9), > + KEY(0, 1, KEY_DOWN), > KEY(1, 1, KEY_UP), > - KEY(1, 2, KEY_2), > - KEY(1, 3, KEY_F9), > - KEY(1, 4, KEY_F7), > - KEY(1, 5, KEY_0), > - KEY(2, 0, KEY_ENTER), > - KEY(2, 1, KEY_6), > + KEY(2, 1, KEY_2), > + KEY(3, 1, KEY_F9), > + KEY(4, 1, KEY_F7), > + KEY(5, 1, KEY_0), > + KEY(0, 2, KEY_ENTER), > + KEY(1, 2, KEY_6), > KEY(2, 2, KEY_1), > - KEY(2, 3, KEY_F2), > - KEY(2, 4, KEY_F6), > - KEY(2, 5, KEY_HOME), > - KEY(3, 0, KEY_8), > - KEY(3, 1, KEY_5), > - KEY(3, 2, KEY_F12), > + KEY(3, 2, KEY_F2), > + KEY(4, 2, KEY_F6), > + KEY(5, 2, KEY_HOME), > + KEY(0, 3, KEY_8), > + KEY(1, 3, KEY_5), > + KEY(2, 3, KEY_F12), > KEY(3, 3, KEY_F3), > - KEY(3, 4, KEY_F8), > - KEY(3, 5, KEY_END), > - KEY(4, 0, KEY_7), > - KEY(4, 1, KEY_4), > - KEY(4, 2, KEY_F11), > - KEY(4, 3, KEY_F1), > + KEY(4, 3, KEY_F8), > + KEY(5, 3, KEY_END), > + KEY(0, 4, KEY_7), > + KEY(1, 4, KEY_4), > + KEY(2, 4, KEY_F11), > + KEY(3, 4, KEY_F1), > KEY(4, 4, KEY_F4), > - KEY(4, 5, KEY_ESC), > - KEY(5, 0, KEY_F13), > - KEY(5, 1, KEY_F14), > - KEY(5, 2, KEY_F15), > - KEY(5, 3, KEY_F16), > - KEY(5, 4, KEY_SLEEP), > - 0 > + KEY(5, 4, KEY_ESC), > + KEY(0, 5, KEY_F13), > + KEY(1, 5, KEY_F14), > + KEY(2, 5, KEY_F15), > + KEY(3, 5, KEY_F16), > + KEY(4, 5, KEY_SLEEP), > }; > > > @@ -305,14 +304,18 @@ static struct resource h3_kp_resources[] > }, > }; > > +static const struct matrix_keymap_data h3_keymap_data = { > + .keymap = h3_keymap, > + .keymap_size = ARRAY_SIZE(h3_keymap), > +}; > + > static struct omap_kp_platform_data h3_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = h3_keymap, > - .keymapsize = ARRAY_SIZE(h3_keymap), > - .rep = 1, > + .keymap_data = &h3_keymap_data, > + .rep = true, > .delay = 9, > - .dbounce = 1, > + .dbounce = true, > }; > > static struct platform_device h3_kp_device = { > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-htcherald.c 2010-12-20 19:54:18.000000000 +0100 > @@ -180,64 +180,68 @@ > > /* Keyboard definition */ > > -static int htc_herald_keymap[] = { > +static const unsigned int htc_herald_keymap[] = { > KEY(0, 0, KEY_RECORD), /* Mail button */ > - KEY(0, 1, KEY_CAMERA), /* Camera */ > - KEY(0, 2, KEY_PHONE), /* Send key */ > - KEY(0, 3, KEY_VOLUMEUP), /* Volume up */ > - KEY(0, 4, KEY_F2), /* Right bar (landscape) */ > - KEY(0, 5, KEY_MAIL), /* Win key (portrait) */ > - KEY(0, 6, KEY_DIRECTORY), /* Right bar (protrait) */ > - KEY(1, 0, KEY_LEFTCTRL), /* Windows key */ > + KEY(1, 0, KEY_CAMERA), /* Camera */ > + KEY(2, 0, KEY_PHONE), /* Send key */ > + KEY(3, 0, KEY_VOLUMEUP), /* Volume up */ > + KEY(4, 0, KEY_F2), /* Right bar (landscape) */ > + KEY(5, 0, KEY_MAIL), /* Win key (portrait) */ > + KEY(6, 0, KEY_DIRECTORY), /* Right bar (protrait) */ > + KEY(0, 1, KEY_LEFTCTRL), /* Windows key */ > KEY(1, 1, KEY_COMMA), > - KEY(1, 2, KEY_M), > - KEY(1, 3, KEY_K), > - KEY(1, 4, KEY_SLASH), /* OK key */ > - KEY(1, 5, KEY_I), > - KEY(1, 6, KEY_U), > - KEY(2, 0, KEY_LEFTALT), > - KEY(2, 1, KEY_TAB), > + KEY(2, 1, KEY_M), > + KEY(3, 1, KEY_K), > + KEY(4, 1, KEY_SLASH), /* OK key */ > + KEY(5, 1, KEY_I), > + KEY(6, 1, KEY_U), > + KEY(0, 2, KEY_LEFTALT), > + KEY(1, 2, KEY_TAB), > KEY(2, 2, KEY_N), > - KEY(2, 3, KEY_J), > - KEY(2, 4, KEY_ENTER), > - KEY(2, 5, KEY_H), > - KEY(2, 6, KEY_Y), > - KEY(3, 0, KEY_SPACE), > - KEY(3, 1, KEY_L), > - KEY(3, 2, KEY_B), > + KEY(3, 2, KEY_J), > + KEY(4, 2, KEY_ENTER), > + KEY(5, 2, KEY_H), > + KEY(6, 2, KEY_Y), > + KEY(0, 3, KEY_SPACE), > + KEY(1, 3, KEY_L), > + KEY(2, 3, KEY_B), > KEY(3, 3, KEY_V), > - KEY(3, 4, KEY_BACKSPACE), > - KEY(3, 5, KEY_G), > - KEY(3, 6, KEY_T), > - KEY(4, 0, KEY_CAPSLOCK), /* Shift */ > - KEY(4, 1, KEY_C), > - KEY(4, 2, KEY_F), > - KEY(4, 3, KEY_R), > + KEY(4, 3, KEY_BACKSPACE), > + KEY(5, 3, KEY_G), > + KEY(6, 3, KEY_T), > + KEY(0, 4, KEY_CAPSLOCK), /* Shift */ > + KEY(1, 4, KEY_C), > + KEY(2, 4, KEY_F), > + KEY(3, 4, KEY_R), > KEY(4, 4, KEY_O), > - KEY(4, 5, KEY_E), > - KEY(4, 6, KEY_D), > - KEY(5, 0, KEY_X), > - KEY(5, 1, KEY_Z), > - KEY(5, 2, KEY_S), > - KEY(5, 3, KEY_W), > - KEY(5, 4, KEY_P), > + KEY(5, 4, KEY_E), > + KEY(6, 4, KEY_D), > + KEY(0, 5, KEY_X), > + KEY(1, 5, KEY_Z), > + KEY(2, 5, KEY_S), > + KEY(3, 5, KEY_W), > + KEY(4, 5, KEY_P), > KEY(5, 5, KEY_Q), > - KEY(5, 6, KEY_A), > - KEY(6, 0, KEY_CONNECT), /* Voice button */ > - KEY(6, 2, KEY_CANCEL), /* End key */ > - KEY(6, 3, KEY_VOLUMEDOWN), /* Volume down */ > - KEY(6, 4, KEY_F1), /* Left bar (landscape) */ > - KEY(6, 5, KEY_WWW), /* OK button (portrait) */ > + KEY(6, 5, KEY_A), > + KEY(0, 6, KEY_CONNECT), /* Voice button */ > + KEY(2, 6, KEY_CANCEL), /* End key */ > + KEY(3, 6, KEY_VOLUMEDOWN), /* Volume down */ > + KEY(4, 6, KEY_F1), /* Left bar (landscape) */ > + KEY(5, 6, KEY_WWW), /* OK button (portrait) */ > KEY(6, 6, KEY_CALENDAR), /* Left bar (portrait) */ > - 0 > }; > > -struct omap_kp_platform_data htcherald_kp_data = { > +static const struct matrix_keymap_data htc_herald_keymap_data = { > + .keymap = htc_herald_keymap, > + .keymap_size = ARRAY_SIZE(htc_herald_keymap), > +}; > + > +static struct omap_kp_platform_data htcherald_kp_data = { > .rows = 7, > .cols = 7, > .delay = 20, > - .rep = 1, > - .keymap = htc_herald_keymap, > + .rep = true, > + .keymap_data = &htc_herald_keymap_data, > }; > > static struct resource kp_resources[] = { > @@ -278,7 +282,7 @@ static struct gpio_keys_button herald_gp > static struct gpio_keys_platform_data herald_gpio_keys_data = { > .buttons = herald_gpio_keys_table, > .nbuttons = ARRAY_SIZE(herald_gpio_keys_table), > - .rep = 1, > + .rep = true, > }; > > static struct platform_device herald_gpiokeys_device = { > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-innovator.c 2010-12-20 19:54:32.000000000 +0100 > @@ -44,17 +44,16 @@ > /* At OMAP1610 Innovator the Ethernet is directly connected to CS1 */ > #define INNOVATOR1610_ETHR_START 0x04000300 > > -static int innovator_keymap[] = { > +static const unsigned int innovator_keymap[] = { > KEY(0, 0, KEY_F1), > - KEY(0, 3, KEY_DOWN), > + KEY(3, 0, KEY_DOWN), > KEY(1, 1, KEY_F2), > - KEY(1, 2, KEY_RIGHT), > - KEY(2, 0, KEY_F3), > - KEY(2, 1, KEY_F4), > + KEY(2, 1, KEY_RIGHT), > + KEY(0, 2, KEY_F3), > + KEY(1, 2, KEY_F4), > KEY(2, 2, KEY_UP), > - KEY(3, 2, KEY_ENTER), > + KEY(2, 3, KEY_ENTER), > KEY(3, 3, KEY_LEFT), > - 0 > }; > > static struct mtd_partition innovator_partitions[] = { > @@ -126,11 +125,15 @@ static struct resource innovator_kp_reso > }, > }; > > +static const struct matrix_keymap_data innovator_keymap_data = { > + .keymap = innovator_keymap, > + .keymap_size = ARRAY_SIZE(innovator_keymap), > +}; > + > static struct omap_kp_platform_data innovator_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = innovator_keymap, > - .keymapsize = ARRAY_SIZE(innovator_keymap), > + .keymap_data = &innovator_keymap_data, > .delay = 4, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-nokia770.c 2010-12-20 19:54:44.000000000 +0100 > @@ -56,19 +56,18 @@ static void __init omap_nokia770_init_ir > omap_init_irq(); > } > > -static int nokia770_keymap[] = { > - KEY(0, 1, GROUP_0 | KEY_UP), > - KEY(0, 2, GROUP_1 | KEY_F5), > - KEY(1, 0, GROUP_0 | KEY_LEFT), > +static const unsigned int nokia770_keymap[] = { > + KEY(1, 0, GROUP_0 | KEY_UP), > + KEY(2, 0, GROUP_1 | KEY_F5), > + KEY(0, 1, GROUP_0 | KEY_LEFT), > KEY(1, 1, GROUP_0 | KEY_ENTER), > - KEY(1, 2, GROUP_0 | KEY_RIGHT), > - KEY(2, 0, GROUP_1 | KEY_ESC), > - KEY(2, 1, GROUP_0 | KEY_DOWN), > + KEY(2, 1, GROUP_0 | KEY_RIGHT), > + KEY(0, 2, GROUP_1 | KEY_ESC), > + KEY(1, 2, GROUP_0 | KEY_DOWN), > KEY(2, 2, GROUP_1 | KEY_F4), > - KEY(3, 0, GROUP_2 | KEY_F7), > - KEY(3, 1, GROUP_2 | KEY_F8), > - KEY(3, 2, GROUP_2 | KEY_F6), > - 0 > + KEY(0, 3, GROUP_2 | KEY_F7), > + KEY(1, 3, GROUP_2 | KEY_F8), > + KEY(2, 3, GROUP_2 | KEY_F6), > }; > > static struct resource nokia770_kp_resources[] = { > @@ -79,11 +78,15 @@ static struct resource nokia770_kp_resou > }, > }; > > +static const struct matrix_keymap_data nokia770_keymap_data = { > + .keymap = nokia770_keymap, > + .keymap_size = ARRAY_SIZE(nokia770_keymap), > +}; > + > static struct omap_kp_platform_data nokia770_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = nokia770_keymap, > - .keymapsize = ARRAY_SIZE(nokia770_keymap), > + .keymap_data = &nokia770_keymap_data, > .delay = 4, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-osk.c 2010-12-20 19:55:13.000000000 +0100 > @@ -338,25 +338,28 @@ static struct i2c_board_info __initdata > */ > }; > > -static const int osk_keymap[] = { > +static const unsigned int osk_keymap[] = { > /* KEY(col, row, code) */ > KEY(0, 0, KEY_F1), /* SW4 */ > - KEY(0, 3, KEY_UP), /* (sw2/up) */ > + KEY(3, 0, KEY_UP), /* (sw2/up) */ > KEY(1, 1, KEY_LEFTCTRL), /* SW5 */ > - KEY(1, 2, KEY_LEFT), /* (sw2/left) */ > - KEY(2, 0, KEY_SPACE), /* SW3 */ > - KEY(2, 1, KEY_ESC), /* SW6 */ > + KEY(2, 1, KEY_LEFT), /* (sw2/left) */ > + KEY(0, 2, KEY_SPACE), /* SW3 */ > + KEY(1, 2, KEY_ESC), /* SW6 */ > KEY(2, 2, KEY_DOWN), /* (sw2/down) */ > - KEY(3, 2, KEY_ENTER), /* (sw2/select) */ > + KEY(2, 3, KEY_ENTER), /* (sw2/select) */ > KEY(3, 3, KEY_RIGHT), /* (sw2/right) */ > - 0 > +}; > + > +static const struct matrix_keymap_data osk_keymap_data = { > + .keymap = osk_keymap, > + .keymap_size = ARRAY_SIZE(osk_keymap), > }; > > static struct omap_kp_platform_data osk_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = (int *) osk_keymap, > - .keymapsize = ARRAY_SIZE(osk_keymap), > + .keymap_data = &osk_keymap_data, > .delay = 9, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmte.c 2010-12-20 19:56:22.000000000 +0100 > @@ -65,25 +65,29 @@ static void __init omap_palmte_init_irq( > omap_init_irq(); > } > > -static const int palmte_keymap[] = { > +static const unsigned int palmte_keymap[] = { > KEY(0, 0, KEY_F1), /* Calendar */ > - KEY(0, 1, KEY_F2), /* Contacts */ > - KEY(0, 2, KEY_F3), /* Tasks List */ > - KEY(0, 3, KEY_F4), /* Note Pad */ > - KEY(0, 4, KEY_POWER), > - KEY(1, 0, KEY_LEFT), > + KEY(1, 0, KEY_F2), /* Contacts */ > + KEY(2, 0, KEY_F3), /* Tasks List */ > + KEY(3, 0, KEY_F4), /* Note Pad */ > + KEY(4, 0, KEY_POWER), > + KEY(0, 1, KEY_LEFT), > KEY(1, 1, KEY_DOWN), > - KEY(1, 2, KEY_UP), > - KEY(1, 3, KEY_RIGHT), > - KEY(1, 4, KEY_ENTER), > - 0, > + KEY(2, 1, KEY_UP), > + KEY(3, 1, KEY_RIGHT), > + KEY(4, 1, KEY_ENTER), > +}; > + > +static const struct matrix_keymap_data palmte_keymap_data = { > + .keymap = palmte_keymap, > + .keymap_size = ARRAY_SIZE(palmte_keymap), > }; > > static struct omap_kp_platform_data palmte_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = (int *) palmte_keymap, > - .rep = 1, > + .keymap_data = &palmte_keymap_data, > + .rep = true, > .delay = 12, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmtt.c 2010-12-20 19:56:36.000000000 +0100 > @@ -51,19 +51,18 @@ > #define PALMTT_MMC_WP_GPIO 8 > #define PALMTT_HDQ_GPIO 11 > > -static int palmtt_keymap[] = { > +static const unsigned int palmtt_keymap[] = { > KEY(0, 0, KEY_ESC), > - KEY(0, 1, KEY_SPACE), > - KEY(0, 2, KEY_LEFTCTRL), > - KEY(0, 3, KEY_TAB), > - KEY(0, 4, KEY_ENTER), > - KEY(1, 0, KEY_LEFT), > + KEY(1, 0, KEY_SPACE), > + KEY(2, 0, KEY_LEFTCTRL), > + KEY(3, 0, KEY_TAB), > + KEY(4, 0, KEY_ENTER), > + KEY(0, 1, KEY_LEFT), > KEY(1, 1, KEY_DOWN), > - KEY(1, 2, KEY_UP), > - KEY(1, 3, KEY_RIGHT), > - KEY(2, 0, KEY_SLEEP), > - KEY(2, 4, KEY_Y), > - 0 > + KEY(2, 1, KEY_UP), > + KEY(3, 1, KEY_RIGHT), > + KEY(0, 2, KEY_SLEEP), > + KEY(4, 2, KEY_Y), > }; > > static struct mtd_partition palmtt_partitions[] = { > @@ -136,10 +135,15 @@ static struct resource palmtt_kp_resourc > }, > }; > > +static const struct matrix_keymap_data palmtt_keymap_data = { > + .keymap = palmtt_keymap, > + .keymap_size = ARRAY_SIZE(palmtt_keymap), > +}; > + > static struct omap_kp_platform_data palmtt_kp_data = { > .rows = 6, > .cols = 3, > - .keymap = palmtt_keymap, > + .keymap_data = &palmtt_keymap_data, > }; > > static struct platform_device palmtt_kp_device = { > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-palmz71.c 2010-12-20 19:56:48.000000000 +0100 > @@ -64,26 +64,30 @@ omap_palmz71_init_irq(void) > omap_init_irq(); > } > > -static int palmz71_keymap[] = { > +static const unsigned int palmz71_keymap[] = { > KEY(0, 0, KEY_F1), > - KEY(0, 1, KEY_F2), > - KEY(0, 2, KEY_F3), > - KEY(0, 3, KEY_F4), > - KEY(0, 4, KEY_POWER), > - KEY(1, 0, KEY_LEFT), > + KEY(1, 0, KEY_F2), > + KEY(2, 0, KEY_F3), > + KEY(3, 0, KEY_F4), > + KEY(4, 0, KEY_POWER), > + KEY(0, 1, KEY_LEFT), > KEY(1, 1, KEY_DOWN), > - KEY(1, 2, KEY_UP), > - KEY(1, 3, KEY_RIGHT), > - KEY(1, 4, KEY_ENTER), > - KEY(2, 0, KEY_CAMERA), > - 0, > + KEY(2, 1, KEY_UP), > + KEY(3, 1, KEY_RIGHT), > + KEY(4, 1, KEY_ENTER), > + KEY(0, 2, KEY_CAMERA), > +}; > + > +static const struct matrix_keymap_data palmz71_keymap_data = { > + .keymap = palmz71_keymap, > + .keymap_size = ARRAY_SIZE(palmz71_keymap), > }; > > static struct omap_kp_platform_data palmz71_kp_data = { > .rows = 8, > .cols = 8, > - .keymap = palmz71_keymap, > - .rep = 1, > + .keymap_data = &palmz71_keymap_data, > + .rep = true, > .delay = 80, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-perseus2.c 2010-12-20 19:57:05.000000000 +0100 > @@ -36,36 +36,35 @@ > #include <plat/common.h> > #include <plat/board.h> > > -static int p2_keymap[] = { > - KEY(0,0,KEY_UP), > - KEY(0,1,KEY_RIGHT), > - KEY(0,2,KEY_LEFT), > - KEY(0,3,KEY_DOWN), > - KEY(0,4,KEY_ENTER), > - KEY(1,0,KEY_F10), > - KEY(1,1,KEY_SEND), > - KEY(1,2,KEY_END), > - KEY(1,3,KEY_VOLUMEDOWN), > - KEY(1,4,KEY_VOLUMEUP), > - KEY(1,5,KEY_RECORD), > - KEY(2,0,KEY_F9), > - KEY(2,1,KEY_3), > - KEY(2,2,KEY_6), > - KEY(2,3,KEY_9), > - KEY(2,4,KEY_KPDOT), > - KEY(3,0,KEY_BACK), > - KEY(3,1,KEY_2), > - KEY(3,2,KEY_5), > - KEY(3,3,KEY_8), > - KEY(3,4,KEY_0), > - KEY(3,5,KEY_KPSLASH), > - KEY(4,0,KEY_HOME), > - KEY(4,1,KEY_1), > - KEY(4,2,KEY_4), > - KEY(4,3,KEY_7), > - KEY(4,4,KEY_KPASTERISK), > - KEY(4,5,KEY_POWER), > - 0 > +static const unsigned int p2_keymap[] = { > + KEY(0, 0, KEY_UP), > + KEY(1, 0, KEY_RIGHT), > + KEY(2, 0, KEY_LEFT), > + KEY(3, 0, KEY_DOWN), > + KEY(4, 0, KEY_ENTER), > + KEY(0, 1, KEY_F10), > + KEY(1, 1, KEY_SEND), > + KEY(2, 1, KEY_END), > + KEY(3, 1, KEY_VOLUMEDOWN), > + KEY(4, 1, KEY_VOLUMEUP), > + KEY(5, 1, KEY_RECORD), > + KEY(0, 2, KEY_F9), > + KEY(1, 2, KEY_3), > + KEY(2, 2, KEY_6), > + KEY(3, 2, KEY_9), > + KEY(4, 2, KEY_KPDOT), > + KEY(0, 3, KEY_BACK), > + KEY(1, 3, KEY_2), > + KEY(2, 3, KEY_5), > + KEY(3, 3, KEY_8), > + KEY(4, 3, KEY_0), > + KEY(5, 3, KEY_KPSLASH), > + KEY(0, 4, KEY_HOME), > + KEY(1, 4, KEY_1), > + KEY(2, 4, KEY_4), > + KEY(3, 4, KEY_7), > + KEY(4, 4, KEY_KPASTERISK), > + KEY(5, 4, KEY_POWER), > }; > > static struct smc91x_platdata smc91x_info = { > @@ -211,13 +210,17 @@ static struct resource kp_resources[] = > }, > }; > > +static const struct matrix_keymap_data p2_keymap_data = { > + .keymap = p2_keymap, > + .keymap_size = ARRAY_SIZE(p2_keymap), > +}; > + > static struct omap_kp_platform_data kp_data = { > .rows = 8, > .cols = 8, > - .keymap = p2_keymap, > - .keymapsize = ARRAY_SIZE(p2_keymap), > + .keymap_data = &p2_keymap_data, > .delay = 4, > - .dbounce = 1, > + .dbounce = true, > }; > > static struct platform_device kp_device = { > --- linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap1/board-sx1.c 2010-12-20 19:57:14.000000000 +0100 > @@ -164,36 +164,35 @@ EXPORT_SYMBOL(sx1_setusbpower); > > /*----------- Keypad -------------------------*/ > > -static int sx1_keymap[] = { > - KEY(5, 3, GROUP_0 | 117), /* camera Qt::Key_F17 */ > - KEY(0, 4, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ > - KEY(1, 4, GROUP_2 | 114), /* voice memo */ > - KEY(2, 4, GROUP_3 | 114), /* voice memo */ > +static const unsigned int sx1_keymap[] = { > + KEY(3, 5, GROUP_0 | 117), /* camera Qt::Key_F17 */ > + KEY(4, 0, GROUP_0 | 114), /* voice memo Qt::Key_F14 */ > + KEY(4, 1, GROUP_2 | 114), /* voice memo */ > + KEY(4, 2, GROUP_3 | 114), /* voice memo */ > KEY(0, 0, GROUP_1 | KEY_F12), /* red button Qt::Key_Hangup */ > - KEY(4, 3, GROUP_1 | KEY_LEFT), > - KEY(2, 3, GROUP_1 | KEY_DOWN), > - KEY(1, 3, GROUP_1 | KEY_RIGHT), > - KEY(0, 3, GROUP_1 | KEY_UP), > + KEY(3, 4, GROUP_1 | KEY_LEFT), > + KEY(3, 2, GROUP_1 | KEY_DOWN), > + KEY(3, 1, GROUP_1 | KEY_RIGHT), > + KEY(3, 0, GROUP_1 | KEY_UP), > KEY(3, 3, GROUP_1 | KEY_POWER), /* joystick press or Qt::Key_Select */ > - KEY(5, 0, GROUP_1 | KEY_1), > - KEY(4, 0, GROUP_1 | KEY_2), > - KEY(3, 0, GROUP_1 | KEY_3), > - KEY(3, 4, GROUP_1 | KEY_4), > + KEY(0, 5, GROUP_1 | KEY_1), > + KEY(0, 4, GROUP_1 | KEY_2), > + KEY(0, 3, GROUP_1 | KEY_3), > + KEY(4, 3, GROUP_1 | KEY_4), > KEY(4, 4, GROUP_1 | KEY_5), > - KEY(5, 4, GROUP_1 | KEY_KPASTERISK),/* "*" */ > - KEY(4, 1, GROUP_1 | KEY_6), > - KEY(5, 1, GROUP_1 | KEY_7), > - KEY(3, 1, GROUP_1 | KEY_8), > - KEY(3, 2, GROUP_1 | KEY_9), > - KEY(5, 2, GROUP_1 | KEY_0), > - KEY(4, 2, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ > - KEY(0, 1, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ > - KEY(1, 2, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ > + KEY(4, 5, GROUP_1 | KEY_KPASTERISK),/* "*" */ > + KEY(1, 4, GROUP_1 | KEY_6), > + KEY(1, 5, GROUP_1 | KEY_7), > + KEY(1, 3, GROUP_1 | KEY_8), > + KEY(2, 3, GROUP_1 | KEY_9), > + KEY(2, 5, GROUP_1 | KEY_0), > + KEY(2, 4, GROUP_1 | 113), /* # F13 Toggle input method Qt::Key_F13 */ > + KEY(1, 0, GROUP_1 | KEY_F11), /* green button Qt::Key_Call */ > + KEY(2, 1, GROUP_1 | KEY_YEN), /* left soft Qt::Key_Context1 */ > KEY(2, 2, GROUP_1 | KEY_F8), /* right soft Qt::Key_Back */ > - KEY(2, 1, GROUP_1 | KEY_LEFTSHIFT), /* shift */ > + KEY(1, 2, GROUP_1 | KEY_LEFTSHIFT), /* shift */ > KEY(1, 1, GROUP_1 | KEY_BACKSPACE), /* C (clear) */ > - KEY(0, 2, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ > - 0 > + KEY(2, 0, GROUP_1 | KEY_F7), /* menu Qt::Key_Menu */ > }; > > static struct resource sx1_kp_resources[] = { > @@ -204,11 +203,15 @@ static struct resource sx1_kp_resources[ > }, > }; > > +static const struct matrix_keymap_data sx1_keymap_data = { > + .keymap = sx1_keymap, > + .keymap_size = ARRAY_SIZE(sx1_keymap), > +}; > + > static struct omap_kp_platform_data sx1_kp_data = { > .rows = 6, > .cols = 6, > - .keymap = sx1_keymap, > - .keymapsize = ARRAY_SIZE(sx1_keymap), > + .keymap_data = &sx1_keymap_data, > .delay = 80, > }; > > --- linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c.orig 2010-12-09 23:07:35.000000000 +0100 > +++ linux-2.6.37-rc5/arch/arm/mach-omap2/board-h4.c 2010-12-20 19:57:32.000000000 +0100 > @@ -51,38 +51,37 @@ > static unsigned int row_gpios[6] = { 88, 89, 124, 11, 6, 96 }; > static unsigned int col_gpios[7] = { 90, 91, 100, 36, 12, 97, 98 }; > > -static int h4_keymap[] = { > +static const unsigned int h4_keymap[] = { > KEY(0, 0, KEY_LEFT), > - KEY(0, 1, KEY_RIGHT), > - KEY(0, 2, KEY_A), > - KEY(0, 3, KEY_B), > - KEY(0, 4, KEY_C), > - KEY(1, 0, KEY_DOWN), > + KEY(1, 0, KEY_RIGHT), > + KEY(2, 0, KEY_A), > + KEY(3, 0, KEY_B), > + KEY(4, 0, KEY_C), > + KEY(0, 1, KEY_DOWN), > KEY(1, 1, KEY_UP), > - KEY(1, 2, KEY_E), > - KEY(1, 3, KEY_F), > - KEY(1, 4, KEY_G), > - KEY(2, 0, KEY_ENTER), > - KEY(2, 1, KEY_I), > + KEY(2, 1, KEY_E), > + KEY(3, 1, KEY_F), > + KEY(4, 1, KEY_G), > + KEY(0, 2, KEY_ENTER), > + KEY(1, 2, KEY_I), > KEY(2, 2, KEY_J), > - KEY(2, 3, KEY_K), > - KEY(2, 4, KEY_3), > - KEY(3, 0, KEY_M), > - KEY(3, 1, KEY_N), > - KEY(3, 2, KEY_O), > + KEY(3, 2, KEY_K), > + KEY(4, 2, KEY_3), > + KEY(0, 3, KEY_M), > + KEY(1, 3, KEY_N), > + KEY(2, 3, KEY_O), > KEY(3, 3, KEY_P), > - KEY(3, 4, KEY_Q), > - KEY(4, 0, KEY_R), > - KEY(4, 1, KEY_4), > - KEY(4, 2, KEY_T), > - KEY(4, 3, KEY_U), > + KEY(4, 3, KEY_Q), > + KEY(0, 4, KEY_R), > + KEY(1, 4, KEY_4), > + KEY(2, 4, KEY_T), > + KEY(3, 4, KEY_U), > KEY(4, 4, KEY_ENTER), > - KEY(5, 0, KEY_V), > - KEY(5, 1, KEY_W), > - KEY(5, 2, KEY_L), > - KEY(5, 3, KEY_S), > - KEY(5, 4, KEY_ENTER), > - 0 > + KEY(0, 5, KEY_V), > + KEY(1, 5, KEY_W), > + KEY(2, 5, KEY_L), > + KEY(3, 5, KEY_S), > + KEY(4, 5, KEY_ENTER), > }; > > static struct mtd_partition h4_partitions[] = { > @@ -136,12 +135,16 @@ static struct platform_device h4_flash_d > .resource = &h4_flash_resource, > }; > > +static const struct matrix_keymap_data h4_keymap_data = { > + .keymap = h4_keymap, > + .keymap_size = ARRAY_SIZE(h4_keymap), > +}; > + > static struct omap_kp_platform_data h4_kp_data = { > .rows = 6, > .cols = 7, > - .keymap = h4_keymap, > - .keymapsize = ARRAY_SIZE(h4_keymap), > - .rep = 1, > + .keymap_data = &h4_keymap_data, > + .rep = true, > .row_gpios = row_gpios, > .col_gpios = col_gpios, > }; > ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v3] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-21 11:20 ` Aaro Koskinen @ 2010-12-22 10:16 ` Dmitry Torokhov -1 siblings, 0 replies; 36+ messages in thread From: Dmitry Torokhov @ 2010-12-22 10:16 UTC (permalink / raw) To: Aaro Koskinen Cc: Janusz Krzysztofik, linux-omap, linux-input, Tony Lindgren, linux-arm-kernel On Tue, Dec 21, 2010 at 01:20:35PM +0200, Aaro Koskinen wrote: > Hi, > > On Mon, 20 Dec 2010, Janusz Krzysztofik wrote: > >Most keypad drivers make use of the <linux/input/matrix_keypad.h> > >defined macros, structures and inline functions. > > > >Convert omap-keypad driver to use those as well, as suggested by a > >compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > > >Created against linux-2.6.37-rc5. > >Tested on Amstrad Delta. > >Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > >board-h4. > > > >Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> > > Reviewed-by: Aaro Koskinen <aaro.koskinen@nokia.com> > Acked-by: Dmitry Torokhov <dtor@mail.ru> Thanks for making the changes. -- Dmitry ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v3] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-22 10:16 ` Dmitry Torokhov 0 siblings, 0 replies; 36+ messages in thread From: Dmitry Torokhov @ 2010-12-22 10:16 UTC (permalink / raw) To: linux-arm-kernel On Tue, Dec 21, 2010 at 01:20:35PM +0200, Aaro Koskinen wrote: > Hi, > > On Mon, 20 Dec 2010, Janusz Krzysztofik wrote: > >Most keypad drivers make use of the <linux/input/matrix_keypad.h> > >defined macros, structures and inline functions. > > > >Convert omap-keypad driver to use those as well, as suggested by a > >compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > > >Created against linux-2.6.37-rc5. > >Tested on Amstrad Delta. > >Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > >board-h4. > > > >Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> > > Reviewed-by: Aaro Koskinen <aaro.koskinen@nokia.com> > Acked-by: Dmitry Torokhov <dtor@mail.ru> Thanks for making the changes. -- Dmitry ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v3] Keyboard: omap-keypad: use matrix_keypad.h 2010-12-22 10:16 ` Dmitry Torokhov @ 2010-12-22 19:25 ` Tony Lindgren -1 siblings, 0 replies; 36+ messages in thread From: Tony Lindgren @ 2010-12-22 19:25 UTC (permalink / raw) To: Dmitry Torokhov Cc: Aaro Koskinen, Janusz Krzysztofik, linux-omap, linux-input, linux-arm-kernel * Dmitry Torokhov <dmitry.torokhov@gmail.com> [101222 02:16]: > On Tue, Dec 21, 2010 at 01:20:35PM +0200, Aaro Koskinen wrote: > > Hi, > > > > On Mon, 20 Dec 2010, Janusz Krzysztofik wrote: > > >Most keypad drivers make use of the <linux/input/matrix_keypad.h> > > >defined macros, structures and inline functions. > > > > > >Convert omap-keypad driver to use those as well, as suggested by a > > >compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > > > > >Created against linux-2.6.37-rc5. > > >Tested on Amstrad Delta. > > >Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > > >board-h4. > > > > > >Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> > > > > Reviewed-by: Aaro Koskinen <aaro.koskinen@nokia.com> > > > > Acked-by: Dmitry Torokhov <dtor@mail.ru> > > Thanks for making the changes. Thanks everybody, applying. Tony ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v3] Keyboard: omap-keypad: use matrix_keypad.h @ 2010-12-22 19:25 ` Tony Lindgren 0 siblings, 0 replies; 36+ messages in thread From: Tony Lindgren @ 2010-12-22 19:25 UTC (permalink / raw) To: linux-arm-kernel * Dmitry Torokhov <dmitry.torokhov@gmail.com> [101222 02:16]: > On Tue, Dec 21, 2010 at 01:20:35PM +0200, Aaro Koskinen wrote: > > Hi, > > > > On Mon, 20 Dec 2010, Janusz Krzysztofik wrote: > > >Most keypad drivers make use of the <linux/input/matrix_keypad.h> > > >defined macros, structures and inline functions. > > > > > >Convert omap-keypad driver to use those as well, as suggested by a > > >compile time warning, hardcoded into the OMAP <palt/keypad.h>. > > > > > >Created against linux-2.6.37-rc5. > > >Tested on Amstrad Delta. > > >Compile tested with omap1_defconfig and omap2plus_defconfig shrinked to > > >board-h4. > > > > > >Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> > > > > Reviewed-by: Aaro Koskinen <aaro.koskinen@nokia.com> > > > > Acked-by: Dmitry Torokhov <dtor@mail.ru> > > Thanks for making the changes. Thanks everybody, applying. Tony ^ permalink raw reply [flat|nested] 36+ messages in thread
end of thread, other threads:[~2010-12-22 19:26 UTC | newest] Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2010-12-17 22:32 [PATCH] Keyboard: omap-keypad: use matrix_keypad.h Janusz Krzysztofik 2010-12-17 22:32 ` Janusz Krzysztofik 2010-12-18 3:10 ` Tony Lindgren 2010-12-18 3:10 ` Tony Lindgren 2010-12-18 4:29 ` Cory Maccarrone 2010-12-18 4:29 ` Cory Maccarrone 2010-12-18 5:29 ` Cory Maccarrone 2010-12-18 5:29 ` Cory Maccarrone 2010-12-18 5:38 ` Cory Maccarrone 2010-12-18 5:38 ` Cory Maccarrone 2010-12-18 6:01 ` Dmitry Torokhov 2010-12-18 6:01 ` Dmitry Torokhov 2010-12-18 11:31 ` Janusz Krzysztofik 2010-12-18 11:31 ` Janusz Krzysztofik 2010-12-18 15:39 ` [PATCH v2] " Janusz Krzysztofik 2010-12-18 15:39 ` Janusz Krzysztofik 2010-12-20 15:29 ` Aaro Koskinen 2010-12-20 15:29 ` Aaro Koskinen 2010-12-20 17:32 ` Janusz Krzysztofik 2010-12-20 17:32 ` Janusz Krzysztofik 2010-12-20 18:02 ` Dmitry Torokhov 2010-12-20 18:02 ` Dmitry Torokhov 2010-12-20 18:49 ` Janusz Krzysztofik 2010-12-20 18:49 ` Janusz Krzysztofik 2010-12-20 19:03 ` aaro.koskinen 2010-12-20 19:03 ` aaro.koskinen at nokia.com 2010-12-20 20:21 ` Janusz Krzysztofik 2010-12-20 20:21 ` Janusz Krzysztofik 2010-12-20 21:09 ` [PATCH v3] " Janusz Krzysztofik 2010-12-20 21:09 ` Janusz Krzysztofik 2010-12-21 11:20 ` Aaro Koskinen 2010-12-21 11:20 ` Aaro Koskinen 2010-12-22 10:16 ` Dmitry Torokhov 2010-12-22 10:16 ` Dmitry Torokhov 2010-12-22 19:25 ` Tony Lindgren 2010-12-22 19:25 ` Tony Lindgren
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.