Input: pxa27x-keypad - use matrix_keymap for matrix keys
authorChao Xie <chao.xie@marvell.com>
Mon, 6 May 2013 03:24:58 +0000 (20:24 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 19 Jun 2013 05:56:51 +0000 (22:56 -0700)
pxa27x-keypad includes matrix keys. Make use of matrix_keymap
for the matrix keys.

Signed-off-by: Chao Xie <chao.xie@marvell.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
18 files changed:
arch/arm/mach-mmp/aspenite.c
arch/arm/mach-mmp/teton_bga.c
arch/arm/mach-pxa/em-x270.c
arch/arm/mach-pxa/ezx.c
arch/arm/mach-pxa/littleton.c
arch/arm/mach-pxa/mainstone.c
arch/arm/mach-pxa/mioa701.c
arch/arm/mach-pxa/palmld.c
arch/arm/mach-pxa/palmt5.c
arch/arm/mach-pxa/palmtreo.c
arch/arm/mach-pxa/palmtx.c
arch/arm/mach-pxa/palmz72.c
arch/arm/mach-pxa/tavorevb.c
arch/arm/mach-pxa/z2.c
arch/arm/mach-pxa/zylonite.c
drivers/input/keyboard/Kconfig
drivers/input/keyboard/pxa27x_keypad.c
include/linux/platform_data/keypad-pxa27x.h

index 9f64d5632e07af34ab02e2f67ed07937c98ac77b..1e233467fffa3b1f87411f8aa889bedc4386480e 100644 (file)
@@ -205,7 +205,7 @@ struct pxa168fb_mach_info aspenite_lcd_info = {
        .invert_pixclock        = 0,
 };
 
-static unsigned int aspenite_matrix_key_map[] = {
+static const unsigned int aspenite_matrix_key_map[] = {
        KEY(0, 6, KEY_UP),      /* SW 4 */
        KEY(0, 7, KEY_DOWN),    /* SW 5 */
        KEY(1, 6, KEY_LEFT),    /* SW 6 */
@@ -214,11 +214,15 @@ static unsigned int aspenite_matrix_key_map[] = {
        KEY(4, 7, KEY_ESC),     /* SW 9 */
 };
 
+static struct matrix_keymap_data aspenite_matrix_keymap_data = {
+       .keymap                 = aspenite_matrix_key_map,
+       .keymap_size            = ARRAY_SIZE(aspenite_matrix_key_map),
+};
+
 static struct pxa27x_keypad_platform_data aspenite_keypad_info __initdata = {
        .matrix_key_rows        = 5,
        .matrix_key_cols        = 8,
-       .matrix_key_map         = aspenite_matrix_key_map,
-       .matrix_key_map_size    = ARRAY_SIZE(aspenite_matrix_key_map),
+       .matrix_keymap_data     = &aspenite_matrix_keymap_data,
        .debounce_interval      = 30,
 };
 
index 8609967975ed9039e56b643ddd07ee52e0e3b12a..d8967fa483743bbfcc3aff542b67b176899195c5 100644 (file)
@@ -56,11 +56,15 @@ static unsigned int teton_bga_matrix_key_map[] = {
        KEY(1, 7, KEY_RIGHT),
 };
 
+static struct matrix_keymap_data teton_bga_matrix_keymap_data = {
+       .keymap                 = teton_bga_matrix_key_map,
+       .keymap_size            = ARRAY_SIZE(teton_bga_matrix_key_map),
+};
+
 static struct pxa27x_keypad_platform_data teton_bga_keypad_info __initdata = {
        .matrix_key_rows        = 2,
        .matrix_key_cols        = 8,
-       .matrix_key_map         = teton_bga_matrix_key_map,
-       .matrix_key_map_size    = ARRAY_SIZE(teton_bga_matrix_key_map),
+       .matrix_keymap_data     = &teton_bga_matrix_keymap_data,
        .debounce_interval      = 30,
 };
 
index 446563a7d1ada5c7654bfc6761f58eacb37caca0..f6726bb4eb954bf1cdaf073b4940269137673916 100644 (file)
@@ -833,21 +833,25 @@ static inline void em_x270_init_ac97(void) {}
 #endif
 
 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
-static unsigned int em_x270_module_matrix_keys[] = {
+static const unsigned int em_x270_module_matrix_keys[] = {
        KEY(0, 0, KEY_A), KEY(1, 0, KEY_UP), KEY(2, 1, KEY_B),
        KEY(0, 2, KEY_LEFT), KEY(1, 1, KEY_ENTER), KEY(2, 0, KEY_RIGHT),
        KEY(0, 1, KEY_C), KEY(1, 2, KEY_DOWN), KEY(2, 2, KEY_D),
 };
 
+static struct matrix_keymap_data em_x270_matrix_keymap_data = {
+       .keymap                 = em_x270_module_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(em_x270_module_matrix_keys),
+};
+
 struct pxa27x_keypad_platform_data em_x270_module_keypad_info = {
        /* code map for the matrix keys */
        .matrix_key_rows        = 3,
        .matrix_key_cols        = 3,
-       .matrix_key_map         = em_x270_module_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(em_x270_module_matrix_keys),
+       .matrix_keymap_data     = &em_x270_matrix_keymap_data,
 };
 
-static unsigned int em_x270_exeda_matrix_keys[] = {
+static const unsigned int em_x270_exeda_matrix_keys[] = {
        KEY(0, 0, KEY_RIGHTSHIFT), KEY(0, 1, KEY_RIGHTCTRL),
        KEY(0, 2, KEY_RIGHTALT), KEY(0, 3, KEY_SPACE),
        KEY(0, 4, KEY_LEFTALT), KEY(0, 5, KEY_LEFTCTRL),
@@ -889,12 +893,16 @@ static unsigned int em_x270_exeda_matrix_keys[] = {
        KEY(7, 6, 0), KEY(7, 7, 0),
 };
 
+static struct matrix_keymap_data em_x270_exeda_matrix_keymap_data = {
+       .keymap                 = em_x270_exeda_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(em_x270_exeda_matrix_keys),
+};
+
 struct pxa27x_keypad_platform_data em_x270_exeda_keypad_info = {
        /* code map for the matrix keys */
        .matrix_key_rows        = 8,
        .matrix_key_cols        = 8,
-       .matrix_key_map         = em_x270_exeda_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(em_x270_exeda_matrix_keys),
+       .matrix_keymap_data     = &em_x270_exeda_matrix_keymap_data,
 };
 
 static void __init em_x270_init_keypad(void)
index dca10709be8f41db70bcd173b02e94a4d91f5d42..fe2eb8394dffe9c289a0a3a2214efc4af24bdb0b 100644 (file)
@@ -392,7 +392,7 @@ static unsigned long e6_pin_config[] __initdata = {
 
 /* KEYPAD */
 #ifdef CONFIG_MACH_EZX_A780
-static unsigned int a780_key_map[] = {
+static const unsigned int a780_key_map[] = {
        KEY(0, 0, KEY_SEND),
        KEY(0, 1, KEY_BACK),
        KEY(0, 2, KEY_END),
@@ -424,11 +424,15 @@ static unsigned int a780_key_map[] = {
        KEY(4, 4, KEY_DOWN),
 };
 
+static struct matrix_keymap_data a780_matrix_keymap_data = {
+       .keymap                 = a780_key_map,
+       .keymap_size            = ARRAY_SIZE(a780_key_map),
+};
+
 static struct pxa27x_keypad_platform_data a780_keypad_platform_data = {
        .matrix_key_rows = 5,
        .matrix_key_cols = 5,
-       .matrix_key_map = a780_key_map,
-       .matrix_key_map_size = ARRAY_SIZE(a780_key_map),
+       .matrix_keymap_data = &a780_matrix_keymap_data,
 
        .direct_key_map = { KEY_CAMERA },
        .direct_key_num = 1,
@@ -438,7 +442,7 @@ static struct pxa27x_keypad_platform_data a780_keypad_platform_data = {
 #endif /* CONFIG_MACH_EZX_A780 */
 
 #ifdef CONFIG_MACH_EZX_E680
-static unsigned int e680_key_map[] = {
+static const unsigned int e680_key_map[] = {
        KEY(0, 0, KEY_UP),
        KEY(0, 1, KEY_RIGHT),
        KEY(0, 2, KEY_RESERVED),
@@ -455,11 +459,15 @@ static unsigned int e680_key_map[] = {
        KEY(2, 3, KEY_KPENTER),
 };
 
+static struct matrix_keymap_data e680_matrix_keymap_data = {
+       .keymap                 = e680_key_map,
+       .keymap_size            = ARRAY_SIZE(e680_key_map),
+};
+
 static struct pxa27x_keypad_platform_data e680_keypad_platform_data = {
        .matrix_key_rows = 3,
        .matrix_key_cols = 4,
-       .matrix_key_map = e680_key_map,
-       .matrix_key_map_size = ARRAY_SIZE(e680_key_map),
+       .matrix_keymap_data = &e680_matrix_keymap_data,
 
        .direct_key_map = {
                KEY_CAMERA,
@@ -476,7 +484,7 @@ static struct pxa27x_keypad_platform_data e680_keypad_platform_data = {
 #endif /* CONFIG_MACH_EZX_E680 */
 
 #ifdef CONFIG_MACH_EZX_A1200
-static unsigned int a1200_key_map[] = {
+static const unsigned int a1200_key_map[] = {
        KEY(0, 0, KEY_RESERVED),
        KEY(0, 1, KEY_RIGHT),
        KEY(0, 2, KEY_PAGEDOWN),
@@ -513,18 +521,22 @@ static unsigned int a1200_key_map[] = {
        KEY(4, 5, KEY_RESERVED),
 };
 
+static struct matrix_keymap_data a1200_matrix_keymap_data = {
+       .keymap                 = a1200_key_map,
+       .keymap_size            = ARRAY_SIZE(a1200_key_map),
+};
+
 static struct pxa27x_keypad_platform_data a1200_keypad_platform_data = {
        .matrix_key_rows = 5,
        .matrix_key_cols = 6,
-       .matrix_key_map = a1200_key_map,
-       .matrix_key_map_size = ARRAY_SIZE(a1200_key_map),
+       .matrix_keymap_data = &a1200_matrix_keymap_data,
 
        .debounce_interval = 30,
 };
 #endif /* CONFIG_MACH_EZX_A1200 */
 
 #ifdef CONFIG_MACH_EZX_E6
-static unsigned int e6_key_map[] = {
+static const unsigned int e6_key_map[] = {
        KEY(0, 0, KEY_RESERVED),
        KEY(0, 1, KEY_RIGHT),
        KEY(0, 2, KEY_PAGEDOWN),
@@ -561,18 +573,22 @@ static unsigned int e6_key_map[] = {
        KEY(4, 5, KEY_PREVIOUSSONG),
 };
 
+static struct matrix_keymap_data e6_keymap_data = {
+       .keymap                 = e6_key_map,
+       .keymap_size            = ARRAY_SIZE(e6_key_map),
+};
+
 static struct pxa27x_keypad_platform_data e6_keypad_platform_data = {
        .matrix_key_rows = 5,
        .matrix_key_cols = 6,
-       .matrix_key_map = e6_key_map,
-       .matrix_key_map_size = ARRAY_SIZE(e6_key_map),
+       .matrix_keymap_data = &e6_keymap_data,
 
        .debounce_interval = 30,
 };
 #endif /* CONFIG_MACH_EZX_E6 */
 
 #ifdef CONFIG_MACH_EZX_A910
-static unsigned int a910_key_map[] = {
+static const unsigned int a910_key_map[] = {
        KEY(0, 0, KEY_NUMERIC_6),
        KEY(0, 1, KEY_RIGHT),
        KEY(0, 2, KEY_PAGEDOWN),
@@ -609,18 +625,22 @@ static unsigned int a910_key_map[] = {
        KEY(4, 5, KEY_RESERVED),
 };
 
+static struct matrix_keymap_data a910_matrix_keymap_data = {
+       .keymap                 = a910_key_map,
+       .keymap_size            = ARRAY_SIZE(a910_key_map),
+};
+
 static struct pxa27x_keypad_platform_data a910_keypad_platform_data = {
        .matrix_key_rows = 5,
        .matrix_key_cols = 6,
-       .matrix_key_map = a910_key_map,
-       .matrix_key_map_size = ARRAY_SIZE(a910_key_map),
+       .matrix_keymap_data = &a910_matrix_keymap_data,
 
        .debounce_interval = 30,
 };
 #endif /* CONFIG_MACH_EZX_A910 */
 
 #ifdef CONFIG_MACH_EZX_E2
-static unsigned int e2_key_map[] = {
+static const unsigned int e2_key_map[] = {
        KEY(0, 0, KEY_NUMERIC_6),
        KEY(0, 1, KEY_RIGHT),
        KEY(0, 2, KEY_NUMERIC_9),
@@ -657,11 +677,15 @@ static unsigned int e2_key_map[] = {
        KEY(4, 5, KEY_RESERVED),
 };
 
+static struct matrix_keymap_data e2_matrix_keymap_data = {
+       .keymap                 = e2_key_map,
+       .keymap_size            = ARRAY_SIZE(e2_key_map),
+};
+
 static struct pxa27x_keypad_platform_data e2_keypad_platform_data = {
        .matrix_key_rows = 5,
        .matrix_key_cols = 6,
-       .matrix_key_map = e2_key_map,
-       .matrix_key_map_size = ARRAY_SIZE(e2_key_map),
+       .matrix_keymap_data = &e2_matrix_keymap_data,
 
        .debounce_interval = 30,
 };
index e848c4607bafa48c8b62ad37052f7937e4e03b08..5d665588c7eba5a75180d7c515d0852ecc55951e 100644 (file)
@@ -222,7 +222,7 @@ static inline void littleton_init_spi(void) {}
 #endif
 
 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
-static unsigned int littleton_matrix_key_map[] = {
+static const unsigned int littleton_matrix_key_map[] = {
        /* KEY(row, col, key_code) */
        KEY(1, 3, KEY_0), KEY(0, 0, KEY_1), KEY(1, 0, KEY_2), KEY(2, 0, KEY_3),
        KEY(0, 1, KEY_4), KEY(1, 1, KEY_5), KEY(2, 1, KEY_6), KEY(0, 2, KEY_7),
@@ -249,11 +249,15 @@ static unsigned int littleton_matrix_key_map[] = {
        KEY(3, 1, KEY_F23),     /* soft2 */
 };
 
+static struct matrix_keymap_data littleton_matrix_keymap_data = {
+       .keymap                 = littleton_matrix_key_map,
+       .keymap_size            = ARRAY_SIZE(littleton_matrix_key_map),
+};
+
 static struct pxa27x_keypad_platform_data littleton_keypad_info = {
        .matrix_key_rows        = 6,
        .matrix_key_cols        = 5,
-       .matrix_key_map         = littleton_matrix_key_map,
-       .matrix_key_map_size    = ARRAY_SIZE(littleton_matrix_key_map),
+       .matrix_keymap_data     = &littleton_matrix_keymap_data,
 
        .enable_rotary0         = 1,
        .rotary0_up_key         = KEY_UP,
index 7a12c1ba90ff76b02fde8c4474d6d2b42d76b70a..d2c6523183764c2e809076bca2fc527826a209b1 100644 (file)
@@ -498,7 +498,7 @@ static struct pxaohci_platform_data mainstone_ohci_platform_data = {
 };
 
 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
-static unsigned int mainstone_matrix_keys[] = {
+static const unsigned int mainstone_matrix_keys[] = {
        KEY(0, 0, KEY_A), KEY(1, 0, KEY_B), KEY(2, 0, KEY_C),
        KEY(3, 0, KEY_D), KEY(4, 0, KEY_E), KEY(5, 0, KEY_F),
        KEY(0, 1, KEY_G), KEY(1, 1, KEY_H), KEY(2, 1, KEY_I),
@@ -527,11 +527,15 @@ static unsigned int mainstone_matrix_keys[] = {
        KEY(4, 6, KEY_SELECT),
 };
 
+static struct matrix_keymap_data mainstone_matrix_keymap_data = {
+       .keymap                 = mainstone_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(mainstone_matrix_keys),
+};
+
 struct pxa27x_keypad_platform_data mainstone_keypad_info = {
        .matrix_key_rows        = 6,
        .matrix_key_cols        = 7,
-       .matrix_key_map         = mainstone_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(mainstone_matrix_keys),
+       .matrix_keymap_data     = &mainstone_matrix_keymap_data,
 
        .enable_rotary0         = 1,
        .rotary0_up_key         = KEY_UP,
index f8979b943cbfa628d03aa56e9bdb90a7208162fa..654b0ac84dea7683b43698c68bc6e0dc84ec18a0 100644 (file)
@@ -222,7 +222,7 @@ static struct pxafb_mach_info mioa701_pxafb_info = {
 /*
  * Keyboard configuration
  */
-static unsigned int mioa701_matrix_keys[] = {
+static const unsigned int mioa701_matrix_keys[] = {
        KEY(0, 0, KEY_UP),
        KEY(0, 1, KEY_RIGHT),
        KEY(0, 2, KEY_MEDIA),
@@ -233,11 +233,16 @@ static unsigned int mioa701_matrix_keys[] = {
        KEY(2, 1, KEY_PHONE),   /* Phone Green key */
        KEY(2, 2, KEY_CAMERA)   /* Camera key */
 };
+
+static struct matrix_keymap_data mioa701_matrix_keymap_data = {
+       .keymap                 = mioa701_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(mioa701_matrix_keys),
+};
+
 static struct pxa27x_keypad_platform_data mioa701_keypad_info = {
        .matrix_key_rows = 3,
        .matrix_key_cols = 3,
-       .matrix_key_map = mioa701_matrix_keys,
-       .matrix_key_map_size = ARRAY_SIZE(mioa701_matrix_keys),
+       .matrix_keymap_data = &mioa701_matrix_keymap_data,
 };
 
 /*
index 909b713e578985444264e71d6bdd9f9e1e26a445..cf210b11ffcc510ac5ebc81e7091b06a05ef9a22 100644 (file)
@@ -173,7 +173,7 @@ static inline void palmld_nor_init(void) {}
  * GPIO keyboard
  ******************************************************************************/
 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
-static unsigned int palmld_matrix_keys[] = {
+static const unsigned int palmld_matrix_keys[] = {
        KEY(0, 1, KEY_F2),
        KEY(0, 2, KEY_UP),
 
@@ -190,11 +190,15 @@ static unsigned int palmld_matrix_keys[] = {
        KEY(3, 2, KEY_LEFT),
 };
 
+static struct matrix_keymap_data palmld_matrix_keymap_data = {
+       .keymap                 = palmld_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(palmld_matrix_keys),
+};
+
 static struct pxa27x_keypad_platform_data palmld_keypad_platform_data = {
        .matrix_key_rows        = 4,
        .matrix_key_cols        = 3,
-       .matrix_key_map         = palmld_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(palmld_matrix_keys),
+       .matrix_keymap_data     = &palmld_matrix_keymap_data,
 
        .debounce_interval      = 30,
 };
index 5033fd07968f5cf92d39da046727ca37a9ca1352..3ed9b029428b8291c912816968b0881de8ee48f9 100644 (file)
@@ -108,7 +108,7 @@ static unsigned long palmt5_pin_config[] __initdata = {
  * GPIO keyboard
  ******************************************************************************/
 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
-static unsigned int palmt5_matrix_keys[] = {
+static const unsigned int palmt5_matrix_keys[] = {
        KEY(0, 0, KEY_POWER),
        KEY(0, 1, KEY_F1),
        KEY(0, 2, KEY_ENTER),
@@ -124,11 +124,15 @@ static unsigned int palmt5_matrix_keys[] = {
        KEY(3, 2, KEY_LEFT),
 };
 
+static struct matrix_keymap_data palmt5_matrix_keymap_data = {
+       .keymap                 = palmt5_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(palmt5_matrix_keys),
+};
+
 static struct pxa27x_keypad_platform_data palmt5_keypad_platform_data = {
        .matrix_key_rows        = 4,
        .matrix_key_cols        = 3,
-       .matrix_key_map         = palmt5_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(palmt5_matrix_keys),
+       .matrix_keymap_data     = &palmt5_matrix_keymap_data,
 
        .debounce_interval      = 30,
 };
index d82a50b4a8037c77cfbb4dd1a146a3240d6d6a89..d8b937c870de1b26ff814d690f5a4a2a17f72ee7 100644 (file)
@@ -168,7 +168,7 @@ static unsigned long centro685_pin_config[] __initdata = {
  * GPIO keyboard
  ******************************************************************************/
 #if IS_ENABLED(CONFIG_KEYBOARD_PXA27x)
-static unsigned int treo680_matrix_keys[] = {
+static const unsigned int treo680_matrix_keys[] = {
        KEY(0, 0, KEY_F8),              /* Red/Off/Power */
        KEY(0, 1, KEY_LEFT),
        KEY(0, 2, KEY_LEFTCTRL),        /* Alternate */
@@ -227,7 +227,7 @@ static unsigned int treo680_matrix_keys[] = {
        KEY(7, 5, KEY_I),
 };
 
-static unsigned int centro_matrix_keys[] = {
+static const unsigned int centro_matrix_keys[] = {
        KEY(0, 0, KEY_F9),              /* Home */
        KEY(0, 1, KEY_LEFT),
        KEY(0, 2, KEY_LEFTCTRL),        /* Alternate */
@@ -286,11 +286,20 @@ static unsigned int centro_matrix_keys[] = {
        KEY(7, 5, KEY_I),
 };
 
+static struct matrix_keymap_data treo680_matrix_keymap_data = {
+       .keymap                 = treo680_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(treo680_matrix_keys),
+};
+
+static struct matrix_keymap_data centro_matrix_keymap_data = {
+       .keymap                 = centro_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(centro_matrix_keys),
+};
+
 static struct pxa27x_keypad_platform_data treo680_keypad_pdata = {
        .matrix_key_rows        = 8,
        .matrix_key_cols        = 7,
-       .matrix_key_map         = treo680_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(treo680_matrix_keys),
+       .matrix_keymap_data     = &treo680_matrix_keymap_data,
        .direct_key_map         = { KEY_CONNECT },
        .direct_key_num         = 1,
 
@@ -301,10 +310,8 @@ static void __init palmtreo_kpc_init(void)
 {
        static struct pxa27x_keypad_platform_data *data = &treo680_keypad_pdata;
 
-       if (machine_is_centro()) {
-               data->matrix_key_map = centro_matrix_keys;
-               data->matrix_key_map_size = ARRAY_SIZE(centro_matrix_keys);
-       }
+       if (machine_is_centro())
+               data->matrix_keymap_data = &centro_matrix_keymap_data;
 
        pxa_set_keypad_info(&treo680_keypad_pdata);
 }
index 627c93a7364c186164ee4bdf9b872a038b1d12ba..83f830dd8ad89fc6bdab7efafbde791cfeaf5915 100644 (file)
@@ -176,7 +176,7 @@ static inline void palmtx_nor_init(void) {}
  * GPIO keyboard
  ******************************************************************************/
 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
-static unsigned int palmtx_matrix_keys[] = {
+static const unsigned int palmtx_matrix_keys[] = {
        KEY(0, 0, KEY_POWER),
        KEY(0, 1, KEY_F1),
        KEY(0, 2, KEY_ENTER),
@@ -192,11 +192,15 @@ static unsigned int palmtx_matrix_keys[] = {
        KEY(3, 2, KEY_LEFT),
 };
 
+static struct matrix_keymap_data palmtx_matrix_keymap_data = {
+       .keymap                 = palmtx_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(palmtx_matrix_keys),
+};
+
 static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = {
        .matrix_key_rows        = 4,
        .matrix_key_cols        = 3,
-       .matrix_key_map         = palmtx_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(palmtx_matrix_keys),
+       .matrix_keymap_data     = &palmtx_matrix_keymap_data,
 
        .debounce_interval      = 30,
 };
index 18b7fcd98592669114ce121229783d5193a4bc58..1a35ddf218dad44994213f97a1e288fcb76245e5 100644 (file)
@@ -140,7 +140,7 @@ static unsigned long palmz72_pin_config[] __initdata = {
  * GPIO keyboard
  ******************************************************************************/
 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
-static unsigned int palmz72_matrix_keys[] = {
+static const unsigned int palmz72_matrix_keys[] = {
        KEY(0, 0, KEY_POWER),
        KEY(0, 1, KEY_F1),
        KEY(0, 2, KEY_ENTER),
@@ -156,11 +156,15 @@ static unsigned int palmz72_matrix_keys[] = {
        KEY(3, 2, KEY_LEFT),
 };
 
+static struct matrix_keymap_data almz72_matrix_keymap_data = {
+       .keymap                 = palmz72_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(palmz72_matrix_keys),
+};
+
 static struct pxa27x_keypad_platform_data palmz72_keypad_platform_data = {
        .matrix_key_rows        = 4,
        .matrix_key_cols        = 3,
-       .matrix_key_map         = palmz72_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(palmz72_matrix_keys),
+       .matrix_keymap_data     = &almz72_matrix_keymap_data,
 
        .debounce_interval      = 30,
 };
index f55979c09a5fb506984168a39dc1ce6f53aa506d..4680efe553459bd6c98e3d4c771d7633c3a840a1 100644 (file)
@@ -106,7 +106,7 @@ static struct platform_device smc91x_device = {
 };
 
 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
-static unsigned int tavorevb_matrix_key_map[] = {
+static const unsigned int tavorevb_matrix_key_map[] = {
        /* KEY(row, col, key_code) */
        KEY(0, 4, KEY_A), KEY(0, 5, KEY_B), KEY(0, 6, KEY_C),
        KEY(1, 4, KEY_E), KEY(1, 5, KEY_F), KEY(1, 6, KEY_G),
@@ -147,11 +147,15 @@ static unsigned int tavorevb_matrix_key_map[] = {
        KEY(3, 3, KEY_F23),     /* soft2 */
 };
 
+static struct matrix_keymap_data tavorevb_matrix_keymap_data = {
+       .keymap         = tavorevb_matrix_key_map,
+       .keymap_size    = ARRAY_SIZE(tavorevb_matrix_key_map),
+};
+
 static struct pxa27x_keypad_platform_data tavorevb_keypad_info = {
        .matrix_key_rows        = 7,
        .matrix_key_cols        = 7,
-       .matrix_key_map         = tavorevb_matrix_key_map,
-       .matrix_key_map_size    = ARRAY_SIZE(tavorevb_matrix_key_map),
+       .matrix_keymap_data     = &tavorevb_matrix_keymap_data,
        .debounce_interval      = 30,
 };
 
index 989903a7e467c2451a2594970c87492046f723d4..2513d8f4931f49675dfd8322edd03c2ffbd3ca0f 100644 (file)
@@ -345,7 +345,7 @@ static inline void z2_leds_init(void) {}
  * GPIO keyboard
  ******************************************************************************/
 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
-static unsigned int z2_matrix_keys[] = {
+static const unsigned int z2_matrix_keys[] = {
        KEY(0, 0, KEY_OPTION),
        KEY(1, 0, KEY_UP),
        KEY(2, 0, KEY_DOWN),
@@ -405,11 +405,15 @@ static unsigned int z2_matrix_keys[] = {
        KEY(5, 7, KEY_DOT),
 };
 
+static struct matrix_keymap_data z2_matrix_keymap_data = {
+       .keymap                 = z2_matrix_keys,
+       .keymap_size            = ARRAY_SIZE(z2_matrix_keys),
+};
+
 static struct pxa27x_keypad_platform_data z2_keypad_platform_data = {
        .matrix_key_rows        = 7,
        .matrix_key_cols        = 8,
-       .matrix_key_map         = z2_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(z2_matrix_keys),
+       .matrix_keymap_data     = &z2_matrix_keymap_data,
 
        .debounce_interval      = 30,
 };
index 1f00d650ac27088f836473237aaee1113b446cca..36cf7cf95ec1d5d4fe2fd764067b7d640247aa2e 100644 (file)
@@ -263,7 +263,7 @@ static inline void zylonite_init_mmc(void) {}
 #endif
 
 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
-static unsigned int zylonite_matrix_key_map[] = {
+static const unsigned int zylonite_matrix_key_map[] = {
        /* KEY(row, col, key_code) */
        KEY(0, 0, KEY_A), KEY(0, 1, KEY_B), KEY(0, 2, KEY_C), KEY(0, 5, KEY_D),
        KEY(1, 0, KEY_E), KEY(1, 1, KEY_F), KEY(1, 2, KEY_G), KEY(1, 5, KEY_H),
@@ -306,11 +306,15 @@ static unsigned int zylonite_matrix_key_map[] = {
        KEY(0, 3, KEY_AUX),     /* contact */
 };
 
+static struct matrix_keymap_data zylonite_matrix_keymap_data = {
+       .keymap                 = zylonite_matrix_key_map,
+       .keymap_size            = ARRAY_SIZE(zylonite_matrix_key_map),
+};
+
 static struct pxa27x_keypad_platform_data zylonite_keypad_info = {
        .matrix_key_rows        = 8,
        .matrix_key_cols        = 8,
-       .matrix_key_map         = zylonite_matrix_key_map,
-       .matrix_key_map_size    = ARRAY_SIZE(zylonite_matrix_key_map),
+       .matrix_keymap_data     = &zylonite_matrix_keymap_data,
 
        .enable_rotary0         = 1,
        .rotary0_up_key         = KEY_UP,
index 37c366623fc099f5cbc1109bbcbd23404245d0e9..706e11bb6a32f08503a5bc14225969a9b4921c13 100644 (file)
@@ -451,6 +451,7 @@ config KEYBOARD_OPENCORES
 config KEYBOARD_PXA27x
        tristate "PXA27x/PXA3xx keypad support"
        depends on PXA27x || PXA3xx || ARCH_MMP
+       select INPUT_MATRIXKMAP
        help
          Enable support for PXA27x/PXA3xx keypad controller.
 
index b674e7aca404016834f28eb9be4cfacc4f37bc99..5b2d8764dd37b712e49549cded3f195817c12b32 100644 (file)
@@ -118,25 +118,30 @@ struct pxa27x_keypad {
        unsigned int direct_key_mask;
 };
 
-static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad)
+static int pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad)
 {
        struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
        struct input_dev *input_dev = keypad->input_dev;
+       const struct matrix_keymap_data *keymap_data =
+                               pdata ? pdata->matrix_keymap_data : NULL;
        unsigned short keycode;
        int i;
+       int error;
 
-       for (i = 0; i < pdata->matrix_key_map_size; i++) {
-               unsigned int key = pdata->matrix_key_map[i];
-               unsigned int row = KEY_ROW(key);
-               unsigned int col = KEY_COL(key);
-               unsigned int scancode = MATRIX_SCAN_CODE(row, col,
-                                                        MATRIX_ROW_SHIFT);
+       error = matrix_keypad_build_keymap(keymap_data, NULL,
+                                          pdata->matrix_key_rows,
+                                          pdata->matrix_key_cols,
+                                          keypad->keycodes, input_dev);
+       if (error)
+               return error;
 
-               keycode = KEY_VAL(key);
-               keypad->keycodes[scancode] = keycode;
-               __set_bit(keycode, input_dev->keybit);
-       }
+       /*
+        * The keycodes may not only include matrix keys but also the direct
+        * or rotary keys.
+        */
+       input_dev->keycodemax = ARRAY_SIZE(keypad->keycodes);
 
+       /* For direct keys. */
        for (i = 0; i < pdata->direct_key_num; i++) {
                keycode = pdata->direct_key_map[i];
                keypad->keycodes[MAX_MATRIX_KEY_NUM + i] = keycode;
@@ -178,6 +183,8 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad)
        }
 
        __clear_bit(KEY_RESERVED, input_dev->keybit);
+
+       return 0;
 }
 
 static void pxa27x_keypad_scan_matrix(struct pxa27x_keypad *keypad)
@@ -555,7 +562,11 @@ static int pxa27x_keypad_probe(struct platform_device *pdev)
        input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
        input_set_capability(input_dev, EV_MSC, MSC_SCAN);
 
-       pxa27x_keypad_build_keycode(keypad);
+       error = pxa27x_keypad_build_keycode(keypad);
+       if (error) {
+               dev_err(&pdev->dev, "failed to build keycode\n");
+               goto failed_put_clk;
+       }
 
        if ((pdata->enable_rotary0 && keypad->rotary_rel_code[0] != -1) ||
            (pdata->enable_rotary1 && keypad->rotary_rel_code[1] != -1)) {
index 5ce8d5e6ea518e7f4d0303b4d4ac066dcd294224..24625569d16df600ed258a9c23c7c69be89fbaca 100644 (file)
 struct pxa27x_keypad_platform_data {
 
        /* code map for the matrix keys */
+       const struct matrix_keymap_data *matrix_keymap_data;
        unsigned int    matrix_key_rows;
        unsigned int    matrix_key_cols;
-       unsigned int    *matrix_key_map;
-       int             matrix_key_map_size;
 
        /* direct keys */
        int             direct_key_num;