Input: matrix-keymap - uninline and prepare for device tree support
[linux-2.6-microblaze.git] / drivers / input / keyboard / w90p910_keypad.c
index 99bbb7e..085ede4 100644 (file)
@@ -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) {