Hi Vikram,

This patch fixes the keypad for LDP on the OMAPZOOM tree.

- Adds dependency on MACH_LDP for TWL4030 KEYPAD menuconfig option.
- Adds correct keypad IRQ to LDP board file.
- Adds the struct omap_keypad to GPIO part of the T2 keypad driver.

Regards,
dom


Signed-off-by: Dominic Curran <[EMAIL PROTECTED]>
---
 arch/arm/mach-omap2/board-ldp.c                    |    1 +
 drivers/input/keyboard/Kconfig                     |    2 +-
 drivers/input/keyboard/omap-twl4030keypad.c        |   25 ++++++++++++--------
 3 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c
index 175668e..58f56a2 100644
--- a/arch/arm/mach-omap2/board-ldp.c
+++ b/arch/arm/mach-omap2/board-ldp.c
@@ -286,6 +286,7 @@ static struct omap_kp_platform_data ldp_kp_data = {
        .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,
 };
diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
index e4d0436..c8abf13 100644
--- a/drivers/input/keyboard/Kconfig
+++ b/drivers/input/keyboard/Kconfig
@@ -261,7 +261,7 @@ config KEYBOARD_OMAP

 config KEYBOARD_TWL4030
        tristate "TI TWL4030 keypad support"
-       depends on TWL4030_CORE && (MACH_OMAP_2430SDP || MACH_OMAP2EVM || 
MACH_OMAP_3430SDP || MACH_OMAP3EVM)
+       depends on TWL4030_CORE && (MACH_OMAP_2430SDP || MACH_OMAP2EVM || 
MACH_OMAP_3430SDP || MACH_OMAP3EVM || MACH_OMAP_LDP)
        help
          Say Y here if you want to use the OMAP TWL4030 keypad.

diff --git a/drivers/input/keyboard/omap-twl4030keypad.c 
b/drivers/input/keyboard/omap-twl4030keypad.c
index 1ca2987..87ee1dd 100644
--- a/drivers/input/keyboard/omap-twl4030keypad.c
+++ b/drivers/input/keyboard/omap-twl4030keypad.c
@@ -38,6 +38,7 @@
 #include <linux/i2c.h>
 #include <linux/i2c/twl4030.h>
 #include <linux/irq.h>
+#include <mach/gpio.h>
 #include <mach/keypad.h>
 #include "twl4030-keypad.h"

@@ -241,7 +242,7 @@ static irqreturn_t do_kp_irq(int irq, void *_kp)
 }

 #ifdef CONFIG_MACH_OMAP_LDP
-static void omap_gpio_kp_scan(void)
+static void omap_gpio_kp_scan(struct omap_keypad *kp)
 {
        unsigned int new_gpio;
        int idx = 0, chg = 0, key, state;
@@ -254,7 +255,7 @@ static void omap_gpio_kp_scan(void)
                if (chg) {
                        key = GET_KEY(omap_gpios[idx]);
                        state = (new_gpio == 0);
-                       input_report_key(omap_twl4030kp, key, state);
+                       input_report_key(kp->omap_twl4030kp, key, state);
                }

                if (!new_gpio)
@@ -281,10 +282,12 @@ static void omap_gpio_kp_scan(void)
 /*
  * Keypad interrupt handler for OMAP GPIO's.
  */
-static irqreturn_t do_kp_gpio_irq(int irq, void *dev_id)
+static irqreturn_t do_kp_gpio_irq(int irq, void *_kp)
 {
+       struct omap_keypad *kp = _kp;
+
        /* Scan keypad for any changes in GPIO keys. */
-       omap_gpio_kp_scan();
+       omap_gpio_kp_scan(kp);

        return IRQ_HANDLED;
 }
@@ -292,10 +295,12 @@ static irqreturn_t do_kp_gpio_irq(int irq, void *dev_id)

 static void omap_gpio_kp_timer(unsigned long arg)
 {
-       omap_gpio_kp_scan();
+       struct omap_keypad *kp = (struct omap_keypad*)arg;
+       omap_gpio_kp_scan(kp);
 }

-static int omap_gpio_kp_probe(unsigned int *gpio_keymap)
+static int
+omap_gpio_kp_probe(struct omap_keypad *kp, unsigned int *gpio_keymap)
 {
        int i, idx = 0, irq_idx = 0;

@@ -321,18 +326,18 @@ static int omap_gpio_kp_probe(unsigned int *gpio_keymap)
        while (omap_gpios[irq_idx] != 0) {
                if (request_irq(OMAP_GPIO_IRQ(GET_GPIO(omap_gpios[irq_idx])),
                                do_kp_gpio_irq, IRQF_TRIGGER_FALLING,
-                               "omap-keypad", NULL) < 0)
+                               "omap-keypad", kp) < 0)
                        goto err2;
                irq_idx++;
        }

        /* Initialize GPIO timer */
        gpio_timer.function = omap_gpio_kp_timer;
-       gpio_timer.data     = (unsigned long)NULL;
+       gpio_timer.data     = (unsigned long)kp;
        init_timer(&gpio_timer);

        /* scan current key state */
-       omap_gpio_kp_scan();
+       omap_gpio_kp_scan(kp);

        return 0;

@@ -503,7 +508,7 @@ static int __init omap_kp_probe(struct platform_device 
*pdev)
                goto err4;

 #ifdef CONFIG_MACH_OMAP_LDP
-       omap_gpio_kp_probe(pdata->row_gpios);
+       omap_gpio_kp_probe(kp, pdata->row_gpios);
 #endif

        return ret;
--
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