DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0);
-#define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val))
-
-static int test_keymap[] = {
- KEY(0, 0, KEY_F4),
- KEY(1, 0, KEY_LEFT),
- KEY(2, 0, KEY_F1),
- KEY(0, 1, KEY_DOWN),
- KEY(1, 1, KEY_ENTER),
- KEY(2, 1, KEY_UP),
- KEY(0, 2, KEY_F3),
- KEY(1, 2, KEY_RIGHT),
- KEY(2, 2, KEY_F2),
- 0
-};
-
static int *keymap;
static unsigned int *row_gpios;
static unsigned int *col_gpios;
continue;
kp_cur_group = key & GROUP_MASK;
- input_report_key(omap_kp_data->input, key,
- new_state[col] & (1 << row));
+ input_report_key(omap_kp_data->input, key & ~GROUP_MASK,
+ !!(new_state[col] & (1 << row)));
#endif
}
}
struct omap_kp_platform_data *pdata = pdev->dev.platform_data;
int i;
- if (!pdata->rows || !pdata->cols) {
- printk(KERN_ERR "No rows and cols from pdata\n");
+ if (!pdata->rows || !pdata->cols || !pdata->keymap) {
+ printk(KERN_ERR "No rows, cols or keymap from pdata\n");
return -EINVAL;
}
if (!cpu_is_omap24xx())
omap_writew(1, OMAP_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT);
- if (!pdata->keymap)
- keymap = test_keymap;
- else
- keymap = pdata->keymap;
+ keymap = pdata->keymap;
if (pdata->rep)
set_bit(EV_REP, input_dev->evbit);
/* setup input device */
set_bit(EV_KEY, input_dev->evbit);
for (i = 0; keymap[i] != 0; i++)
- set_bit(keymap[i] & 0x00ffffff, input_dev->keybit);
+ set_bit(keymap[i] & KEY_MAX, input_dev->keybit);
input_dev->name = "omap-keypad";
input_dev->cdev.dev = &pdev->dev;
input_dev->private = omap_kp;
* keys pressed in the same group are considered as pressed. This is
* in order to workaround certain crappy HW designs that produce ghost
* keypresses. */
-#define GROUP_0 (0 << 10)
-#define GROUP_1 (1 << 10)
-#define GROUP_2 (2 << 10)
-#define GROUP_3 (3 << 10)
+#define GROUP_0 (0 << 16)
+#define GROUP_1 (1 << 16)
+#define GROUP_2 (2 << 16)
+#define GROUP_3 (3 << 16)
#define GROUP_MASK GROUP_3
#define KEY(col, row, val) (((col) << 28) | ((row) << 24) | (val))