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
