]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/keyboard/jornada720_kbd.c
Input: add MODULE_ALIAS() to hotpluggable platform modules
[linux-2.6-omap-h63xx.git] / drivers / input / keyboard / jornada720_kbd.c
index dd8a037f72811a0c3ac8ea07b4ff9d3b41e75b6f..a1164a0c7736c4b557daa942bd3014e2861c8dc2 100644 (file)
@@ -17,7 +17,6 @@
  */
 #include <linux/device.h>
 #include <linux/errno.h>
-#include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/init.h>
 #include <linux/input.h>
@@ -59,7 +58,8 @@ static irqreturn_t jornada720_kbd_interrupt(int irq, void *dev_id)
 {
        struct platform_device *pdev = dev_id;
        struct jornadakbd *jornadakbd = platform_get_drvdata(pdev);
-       u8 count, kbd_data;
+       struct input_dev *input = jornadakbd->input;
+       u8 count, kbd_data, scan_code;
 
        /* startup ssp with spinlock */
        jornada_ssp_start();
@@ -77,11 +77,12 @@ static irqreturn_t jornada720_kbd_interrupt(int irq, void *dev_id)
                while (count--) {
                        /* Exchange TxDummy for location (keymap[kbddata]) */
                        kbd_data = jornada_ssp_byte(TXDUMMY);
+                       scan_code = kbd_data & 0x7f;
 
-                       input_report_key(jornadakbd->input,
-                                        jornadakbd->keymap[kbd_data & 0x7f],
+                       input_event(input, EV_MSC, MSC_SCAN, scan_code);
+                       input_report_key(input, jornadakbd->keymap[scan_code],
                                         !(kbd_data & 0x80));
-                       input_sync(jornadakbd->input);
+                       input_sync(input);
                }
        }
 
@@ -123,6 +124,8 @@ static int __devinit jornada720_kbd_probe(struct platform_device *pdev)
                __set_bit(jornadakbd->keymap[i], input_dev->keybit);
        __clear_bit(KEY_RESERVED, input_dev->keybit);
 
+       input_set_capability(input_dev, EV_MSC, MSC_SCAN);
+
        err = request_irq(IRQ_GPIO0,
                          jornada720_kbd_interrupt,
                          IRQF_DISABLED | IRQF_TRIGGER_FALLING,
@@ -159,9 +162,13 @@ static int __devexit jornada720_kbd_remove(struct platform_device *pdev)
        return 0;
 }
 
+/* work with hotplug and coldplug */
+MODULE_ALIAS("platform:jornada720_kbd");
+
 static struct platform_driver jornada720_kbd_driver = {
        .driver  = {
                .name    = "jornada720_kbd",
+               .owner  = THIS_MODULE,
         },
        .probe   = jornada720_kbd_probe,
        .remove  = __devexit_p(jornada720_kbd_remove),