All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.