Input: matrix-keymap - uninline and prepare for device tree support
Change matrix-keymap helper to be out-of-line, like sparse keymap, allow the helper perform basic keymap validation and return errors, and prepare for device tree support. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
@@ -42,7 +42,8 @@
|
||||
#define KGET_RAW(n) (((n) & KEY0R) >> 3)
|
||||
#define KGET_COLUMN(n) ((n) & KEY0C)
|
||||
|
||||
#define W90P910_MAX_KEY_NUM (8 * 8)
|
||||
#define W90P910_NUM_ROWS 8
|
||||
#define W90P910_NUM_COLS 8
|
||||
#define W90P910_ROW_SHIFT 3
|
||||
|
||||
struct w90p910_keypad {
|
||||
@@ -51,7 +52,7 @@ struct w90p910_keypad {
|
||||
struct input_dev *input_dev;
|
||||
void __iomem *mmio_base;
|
||||
int irq;
|
||||
unsigned short keymap[W90P910_MAX_KEY_NUM];
|
||||
unsigned short keymap[W90P910_NUM_ROWS * W90P910_NUM_COLS];
|
||||
};
|
||||
|
||||
static void w90p910_keypad_scan_matrix(struct w90p910_keypad *keypad,
|
||||
@@ -190,17 +191,13 @@ static int __devinit w90p910_keypad_probe(struct platform_device *pdev)
|
||||
input_dev->close = w90p910_keypad_close;
|
||||
input_dev->dev.parent = &pdev->dev;
|
||||
|
||||
input_dev->keycode = keypad->keymap;
|
||||
input_dev->keycodesize = sizeof(keypad->keymap[0]);
|
||||
input_dev->keycodemax = ARRAY_SIZE(keypad->keymap);
|
||||
|
||||
input_set_drvdata(input_dev, keypad);
|
||||
|
||||
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
|
||||
input_set_capability(input_dev, EV_MSC, MSC_SCAN);
|
||||
|
||||
matrix_keypad_build_keymap(keymap_data, W90P910_ROW_SHIFT,
|
||||
input_dev->keycode, input_dev->keybit);
|
||||
error = matrix_keypad_build_keymap(keymap_data, NULL,
|
||||
W90P910_NUM_ROWS, W90P910_NUM_COLS,
|
||||
keypad->keymap, input_dev);
|
||||
if (error) {
|
||||
dev_err(&pdev->dev, "failed to build keymap\n");
|
||||
goto failed_put_clk;
|
||||
}
|
||||
|
||||
error = request_irq(keypad->irq, w90p910_keypad_irq_handler,
|
||||
0, pdev->name, keypad);
|
||||
@@ -209,6 +206,10 @@ static int __devinit w90p910_keypad_probe(struct platform_device *pdev)
|
||||
goto failed_put_clk;
|
||||
}
|
||||
|
||||
__set_bit(EV_REP, input_dev->evbit);
|
||||
input_set_capability(input_dev, EV_MSC, MSC_SCAN);
|
||||
input_set_drvdata(input_dev, keypad);
|
||||
|
||||
/* Register the input device */
|
||||
error = input_register_device(input_dev);
|
||||
if (error) {
|
||||
|
Reference in New Issue
Block a user