The LDP uses both TWL4030 and GPIO's for its keypad inputs.
This patch changes the LDP board file to make use of both the TWL4030
and GPIO keypad drivers. 

Signed-off-by: Dominic Curran <[EMAIL PROTECTED]>
---
 arch/arm/mach-omap2/board-ldp.c |  131 +++++++++++++++++++++++++--------------
 1 files changed, 84 insertions(+), 47 deletions(-)

diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c
index 47a0ba2..290d469 100644
--- a/arch/arm/mach-omap2/board-ldp.c
+++ b/arch/arm/mach-omap2/board-ldp.c
@@ -16,6 +16,7 @@
 #include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/input.h>
+#include <linux/gpio_keys.h>
 #include <linux/workqueue.h>
 #include <linux/err.h>
 #include <linux/clk.h>
@@ -226,15 +227,10 @@ static int ldp_twl4030_keymap[] = {
        KEY(0, 0, KEY_1),
        KEY(1, 0, KEY_2),
        KEY(2, 0, KEY_3),
-       KEY(3, 0, KEY_ENTER),
-       KEY(4, 0, KEY_F1),
-       KEY(5, 0, KEY_F2),
        KEY(0, 1, KEY_4),
        KEY(1, 1, KEY_5),
        KEY(2, 1, KEY_6),
        KEY(3, 1, KEY_F5),
-       KEY(4, 1, KEY_F3),
-       KEY(5, 1, KEY_F4),
        KEY(0, 2, KEY_7),
        KEY(1, 2, KEY_8),
        KEY(2, 2, KEY_9),
@@ -242,62 +238,103 @@ static int ldp_twl4030_keymap[] = {
        KEY(0, 3, KEY_F7),
        KEY(1, 3, KEY_0),
        KEY(2, 3, KEY_F8),
-       KEY(0, 4, KEY_RIGHT),
-       KEY(1, 4, KEY_UP),
-       KEY(2, 4, KEY_DOWN),
-       KEY(3, 4, KEY_LEFT),
        KEY(5, 4, KEY_MUTE),
        KEY(4, 4, KEY_VOLUMEUP),
        KEY(5, 5, KEY_VOLUMEDOWN),
        0
 };
 
-#define GPIO_KEY(gpio, key)  ((gpio<<16) | (key))
-
-static unsigned int ldp_omap_gpio_keymap[] = {
-       GPIO_KEY(101, KEY_ENTER), /*select*/
-       GPIO_KEY(102, KEY_F1),    /*S7*/
-       GPIO_KEY(103, KEY_F2),    /*S3*/
-       GPIO_KEY(104, KEY_F3),    /*S1*/
-       GPIO_KEY(105, KEY_F4),    /*S2*/
-       GPIO_KEY(106, KEY_LEFT),  /*left*/
-       GPIO_KEY(107, KEY_RIGHT), /*right*/
-       GPIO_KEY(108, KEY_UP),    /*up*/
-       GPIO_KEY(109, KEY_DOWN),  /*down*/
-       0
-};
-
-/* OMAP3430 LDP Keymaps:
- * OMAP LDP uses both TWL4030 GPIO's and OMAP GPIO's to get key presses.
- * This is why there are two keymaps:
- *  - ldp_twl4030_keymap (TWL4030)
- *  - ldp_omap_gpio_keymap (OMAP GPIO's)
- * Unfortunately the input subsystem requires all the keymaps to be
- * listed in one place (.keymap) in order for a key to be a valid input.
- * This is why some keys appear in both keymaps.
- * If a key does appear in both keymaps then its entry in
- * ldp_twl4030_keymap is purely to keep the input subsystem happy and
- * its row/col values have no meaning.
- */
-static struct omap_kp_platform_data ldp_kp_data = {
+static struct twl4030_keypad_data ldp_kp_twl4030_data = {
        .rows           = 6,
        .cols           = 6,
-       .keymap         = ldp_twl4030_keymap,
-       .keymapsize     = ARRAY_SIZE(ldp_twl4030_keymap),
+       .keymap         = ldp_twl4030_keymap,
+       .keymapsize     = ARRAY_SIZE(ldp_twl4030_keymap),
        .rep            = 1,
        .irq            = TWL4030_MODIRQ_KEYPAD,
-       /* Use row_gpios as a way to pass the OMAP GPIO keymap pointer */
-       .row_gpios      = ldp_omap_gpio_keymap,
 };
 
-static struct platform_device ldp_kp_device = {
-       .name           = "omap_twl4030keypad",
-       .id             = -1,
+
+static struct gpio_keys_button ldp_gpio_keys_buttons[] = {
+       [0] = {
+               .code           = KEY_ENTER,
+               .gpio           = 101,
+               .desc           = "enter sw",
+               .active_low = 1,
+               .debounce_interval = 30,
+       },
+       [1] = {
+               .code           = KEY_F1,
+               .gpio           = 102,
+               .desc           = "func 1",
+               .active_low = 1,
+               .debounce_interval = 30,
+       },
+       [2] = {
+               .code           = KEY_F2,
+               .gpio           = 103,
+               .desc           = "func 2",
+               .active_low = 1,
+               .debounce_interval = 30,
+       },
+       [3] = {
+               .code           = KEY_F3,
+               .gpio           = 104,
+               .desc           = "func 3",
+               .active_low = 1,
+               .debounce_interval = 30,
+       },
+       [4] = {
+               .code           = KEY_F4,
+               .gpio           = 105,
+               .desc           = "func 4",
+               .active_low = 1,
+               .debounce_interval = 30,
+       },
+       [5] = {
+               .code           = KEY_LEFT,
+               .gpio           = 106,
+               .desc           = "left sw",
+               .active_low = 1,
+               .debounce_interval = 30,
+       },
+       [6] = {
+               .code           = KEY_RIGHT,
+               .gpio           = 107,
+               .desc           = "right sw",
+               .active_low = 1,
+               .debounce_interval = 30,
+       },
+       [7] = {
+               .code           = KEY_UP,
+               .gpio           = 108,
+               .desc           = "up sw",
+               .active_low = 1,
+               .debounce_interval = 30,
+       },
+       [8] = {
+               .code           = KEY_DOWN,
+               .gpio           = 109,
+               .desc           = "down sw",
+               .active_low = 1,
+               .debounce_interval = 30,
+       },
+};
+
+static struct gpio_keys_platform_data ldp_gpio_keys = {
+       .buttons                = ldp_gpio_keys_buttons,
+       .nbuttons               = ARRAY_SIZE(ldp_gpio_keys_buttons),
+       .rep                    = 1,
+};
+
+static struct platform_device ldp_gpio_keys_device = {
+       .name           = "gpio-keys",
+       .id                     = -1,
        .dev            = {
-               .platform_data = &ldp_kp_data,
+               .platform_data  = &ldp_gpio_keys,
        },
 };
 
+
 static int ts_gpio;
 
 static int __init msecure_init(void)
@@ -444,7 +481,7 @@ static struct spi_board_info ldp_spi_board_info[] 
__initdata = {
 
 static struct platform_device *ldp_devices[] __initdata = {
        &ldp_smc911x_device,
-       &ldp_kp_device,
+       &ldp_gpio_keys_device,
 };
 
 static inline void __init ldp_init_smc911x(void)
@@ -536,7 +573,7 @@ static struct twl4030_platform_data ldp_twldata = {
        .madc           = &ldp_madc_data,
        .usb            = &ldp_usb_data,
        .gpio           = &ldp_gpio_data,
-       //.keypad         = &sdp3430_kp_data,
+       .keypad         = &ldp_kp_twl4030_data,
 };
 
 static struct i2c_board_info __initdata ldp_i2c_boardinfo[] = {
-- 
1.5.4.1

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to