Direct key handling is better (and already) handled by gpio-keys.
Remove this support from the langwell keypad driver.

Signed-off-by: Kristen Carlson Accardi <[email protected]>
---
 drivers/input/keyboard/intel_mid_keypad.c |   79 +---------------------------
 include/linux/input/intel_mid_keypad.h    |    1 -
 2 files changed, 3 insertions(+), 77 deletions(-)

diff --git a/drivers/input/keyboard/intel_mid_keypad.c 
b/drivers/input/keyboard/intel_mid_keypad.c
index e5d6d77..b4de682 100644
--- a/drivers/input/keyboard/intel_mid_keypad.c
+++ b/drivers/input/keyboard/intel_mid_keypad.c
@@ -60,7 +60,6 @@
 /* bit definitions */
 #define KPC_MKRN(n)    ((((n) - 1) & 0x7) << 26) /* matrix key row number */
 #define KPC_MKCN(n)    ((((n) - 1) & 0x7) << 23) /* matrix key col number */
-#define KPC_DKN(n)     ((((n) - 1) & 0x7) << 6)  /* direct key number */
 
 #define KPC_AS          (0x1 << 30)  /* Automatic Scan bit */
 #define KPC_ASACT       (0x1 << 29)  /* Automatic Scan on Activity */
@@ -103,13 +102,11 @@
 
 #define        KEYPAD_MATRIX_GPIO_IN_PIN       24
 #define        KEYPAD_MATRIX_GPIO_OUT_PIN      32
-#define KEYPAD_DIRECT_GPIO_IN_PIN      40
 
 #define keypad_readl(off)      readl(keypad->mmio_base + (off))
 #define keypad_writel(off, v)  writel((v), keypad->mmio_base + (off))
 
 #define MAX_MATRIX_KEY_NUM     (8 * 8)
-#define MAX_DIRECT_KEY_NUM     (4)
 
 #define MAX_MATRIX_KEY_ROWS    (8)
 #define MAX_MATRIX_KEY_COLS    (8)
@@ -174,14 +171,6 @@ static unsigned int mrst_default_keymap[] = {
        KEY(7, 2, KEY_ENTER),
 };
 
-/* default direct key map */
-static const u32 mrst_default_direct_keymap[] = {
-       KEY(0, 0, KEY_VOLUMEUP),
-       KEY(0, 1, KEY_VOLUMEDOWN),
-       KEY(0, 2, KEY_HALFSHUTTER),
-       KEY(0, 3, KEY_FULLSHUTTER),
-};
-
 static const struct mrst_keypad_platform_data *mrst_keypad_pdata;
 
 static const struct matrix_keymap_data mrst_default_keymap_data = {
@@ -189,11 +178,6 @@ static const struct matrix_keymap_data 
mrst_default_keymap_data = {
        .keymap_size = ARRAY_SIZE(mrst_default_keymap),
 };
 
-static const struct matrix_keymap_data mrst_default_direct_keymap_data = {
-       .keymap = mrst_default_direct_keymap,
-       .keymap_size = ARRAY_SIZE(mrst_default_direct_keymap),
-};
-
 struct mrst_keypad {
        struct input_dev *input_dev;
        void __iomem *mmio_base;
@@ -207,43 +191,24 @@ struct mrst_keypad {
 
        /* state row bits of each column scan */
        uint32_t matrix_key_state[MAX_MATRIX_KEY_COLS];
-       uint32_t direct_key_state;
-
-       unsigned int direct_key_mask;
-
-       int direct_key_num;
-
-       const struct matrix_keymap_data *direct_keymap_data;
 
        unsigned short keycode[MAX_MATRIX_KEY_NUM];
-       unsigned short direct_keycode[MAX_DIRECT_KEY_NUM];
 };
 
 static void mrst_keypad_build_keycode(struct mrst_keypad *keypad)
 {
        struct input_dev *input_dev = keypad->input_dev;
        const struct matrix_keymap_data *keymap_data;
-       const struct matrix_keymap_data *direct_keymap_data;
 
        keymap_data = &mrst_default_keymap_data;
 
        if (mrst_keypad_pdata) {
-               if (mrst_keypad_pdata->keymap_data) {
+               if (mrst_keypad_pdata->keymap_data)
                        keymap_data = mrst_keypad_pdata->keymap_data;
-                       direct_keymap_data =
-                               mrst_keypad_pdata->direct_keymap_data ?:
-                               &mrst_default_direct_keymap_data;
-               }
        }
 
        matrix_keypad_build_keymap(keymap_data, keypad->row_shift,
                 input_dev->keycode, input_dev->keybit);
-
-       if (keypad->direct_key_num) {
-               matrix_keypad_build_keymap(direct_keymap_data,
-                               keypad->row_shift, keypad->direct_keycode,
-                               input_dev->keybit);
-       }
 }
 
 int __init mrst_keypad_set_pdata(const struct mrst_keypad_platform_data *data)
@@ -328,46 +293,11 @@ scan:
        memcpy(keypad->matrix_key_state, new_state, sizeof(new_state));
 }
 
-static void mrst_keypad_scan_direct(struct mrst_keypad *keypad)
-{
-       unsigned int new_state;
-       uint32_t kpdk, bits_changed;
-       int i;
-
-       kpdk = keypad_readl(KPDK);
-
-       if (!keypad->direct_key_num) {
-               keypad->direct_key_state = 0;
-               return;
-       }
-
-       new_state = KPDK_DK(kpdk) & keypad->direct_key_mask;
-       new_state = ~new_state;
-       bits_changed = keypad->direct_key_state ^ new_state;
-
-       if (bits_changed == 0)
-               return;
-
-       for (i = 0; i < keypad->direct_key_num; i++) {
-               if (bits_changed & (1 << i)) {
-                       input_report_key(keypad->input_dev,
-                                        keypad->direct_keycode[i],
-                                        (new_state & (1 << i)));
-               }
-       }
-
-       input_sync(keypad->input_dev);
-       keypad->direct_key_state = new_state;
-}
-
 static irqreturn_t mrst_keypad_irq_handler(int irq, void *dev_id)
 {
        struct mrst_keypad *keypad = dev_id;
        unsigned long kpc = keypad_readl(KPC);
 
-       if (kpc & KPC_DI)
-               mrst_keypad_scan_direct(keypad);
-
        if (kpc & KPC_MI)
                mrst_keypad_scan_matrix(keypad);
 
@@ -379,7 +309,7 @@ static int mrst_keypad_gpio_init(struct mrst_keypad *keypad)
 {
        int i, err, cnt = 0;
        int pins = KEYPAD_MATRIX_GPIO_IN_PIN + MAX_MATRIX_KEY_ROWS +
-           MAX_MATRIX_KEY_COLS + keypad->direct_key_num;
+           MAX_MATRIX_KEY_COLS;
 
        /* explicitely tell which pins have been occupied... */
        for (i = KEYPAD_MATRIX_GPIO_IN_PIN; i < pins; i++, cnt++) {
@@ -398,9 +328,6 @@ static int mrst_keypad_gpio_init(struct mrst_keypad *keypad)
                /* set action is executed in gpio_direction_output() */
                gpio_direction_output(KEYPAD_MATRIX_GPIO_OUT_PIN + i, 1);
 
-       for (i = 0; i < keypad->direct_key_num; i++)
-               gpio_direction_input(KEYPAD_DIRECT_GPIO_IN_PIN + i);
-
        return 0;
 
 err_request:
@@ -429,7 +356,7 @@ static void mrst_keypad_close(struct input_dev *dev)
 {
        struct mrst_keypad *keypad = input_get_drvdata(dev);
        int pins = KEYPAD_MATRIX_GPIO_IN_PIN + MAX_MATRIX_KEY_ROWS +
-           MAX_MATRIX_KEY_COLS + keypad->direct_key_num;
+           MAX_MATRIX_KEY_COLS;
 
        int i;
 
diff --git a/include/linux/input/intel_mid_keypad.h 
b/include/linux/input/intel_mid_keypad.h
index 8a64e34..4d5d160 100644
--- a/include/linux/input/intel_mid_keypad.h
+++ b/include/linux/input/intel_mid_keypad.h
@@ -22,7 +22,6 @@
 
 struct mrst_keypad_platform_data {
        const struct matrix_keymap_data *keymap_data;
-       const struct matrix_keymap_data *direct_keymap_data;
        int disable;
 };
 
-- 
1.7.3.1

_______________________________________________
MeeGo-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to