ARM: OMAP3: SDRC: add timing data for Micron MT46H32M32LF-6, v2
[safe/jmp/linux-2.6] / drivers / input / keyboard / lkkbd.c
index 77c4d96..4730ef3 100644 (file)
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Should you need to contact me, the author, you can do so either by
- * email or by paper mail:
- * Jan-Benedict Glaw, Lilienstraße 16, 33790 Hörste (near Halle/Westf.),
- * Germany.
  */
 
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/module.h>
-#include <linux/moduleparam.h>
 #include <linux/interrupt.h>
 #include <linux/init.h>
 #include <linux/input.h>
@@ -384,18 +378,21 @@ lkkbd_detection_done (struct lkkbd *lk)
         */
        switch (lk->id[4]) {
                case 1:
-                       sprintf (lk->name, "DEC LK201 keyboard");
+                       strlcpy (lk->name, "DEC LK201 keyboard",
+                                sizeof (lk->name));
 
                        if (lk201_compose_is_alt)
                                lk->keycode[0xb1] = KEY_LEFTALT;
                        break;
 
                case 2:
-                       sprintf (lk->name, "DEC LK401 keyboard");
+                       strlcpy (lk->name, "DEC LK401 keyboard",
+                                sizeof (lk->name));
                        break;
 
                default:
-                       sprintf (lk->name, "Unknown DEC keyboard");
+                       strlcpy (lk->name, "Unknown DEC keyboard",
+                                sizeof (lk->name));
                        printk (KERN_ERR "lkkbd: keyboard on %s is unknown, "
                                        "please report to Jan-Benedict Glaw "
                                        "<jbglaw@lug-owl.de>\n", lk->phys);
@@ -450,8 +447,7 @@ lkkbd_detection_done (struct lkkbd *lk)
  * is received.
  */
 static irqreturn_t
-lkkbd_interrupt (struct serio *serio, unsigned char data, unsigned int flags,
-               struct pt_regs *regs)
+lkkbd_interrupt (struct serio *serio, unsigned char data, unsigned int flags)
 {
        struct lkkbd *lk = serio_get_drvdata (serio);
        int i;
@@ -470,7 +466,6 @@ lkkbd_interrupt (struct serio *serio, unsigned char data, unsigned int flags,
 
        switch (data) {
                case LK_ALL_KEYS_UP:
-                       input_regs (lk->dev, regs);
                        for (i = 0; i < ARRAY_SIZE (lkkbd_keycode); i++)
                                if (lk->keycode[i] != KEY_RESERVED)
                                        input_report_key (lk->dev, lk->keycode[i], 0);
@@ -498,7 +493,6 @@ lkkbd_interrupt (struct serio *serio, unsigned char data, unsigned int flags,
 
                default:
                        if (lk->keycode[data] != KEY_RESERVED) {
-                               input_regs (lk->dev, regs);
                                if (!test_bit (lk->keycode[data], lk->dev->key))
                                        input_report_key (lk->dev, lk->keycode[data], 1);
                                else
@@ -520,7 +514,7 @@ static int
 lkkbd_event (struct input_dev *dev, unsigned int type, unsigned int code,
                int value)
 {
-       struct lkkbd *lk = dev->private;
+       struct lkkbd *lk = input_get_drvdata (dev);
        unsigned char leds_on = 0;
        unsigned char leds_off = 0;
 
@@ -544,11 +538,11 @@ lkkbd_event (struct input_dev *dev, unsigned int type, unsigned int code,
                        switch (code) {
                                case SND_CLICK:
                                        if (value == 0) {
-                                               DBG ("%s: Deactivating key clicks\n", __FUNCTION__);
+                                               DBG ("%s: Deactivating key clicks\n", __func__);
                                                lk->serio->write (lk->serio, LK_CMD_DISABLE_KEYCLICK);
                                                lk->serio->write (lk->serio, LK_CMD_DISABLE_CTRCLICK);
                                        } else {
-                                               DBG ("%s: Activating key clicks\n", __FUNCTION__);
+                                               DBG ("%s: Activating key clicks\n", __func__);
                                                lk->serio->write (lk->serio, LK_CMD_ENABLE_KEYCLICK);
                                                lk->serio->write (lk->serio, volume_to_hw (lk->keyclick_volume));
                                                lk->serio->write (lk->serio, LK_CMD_ENABLE_CTRCLICK);
@@ -566,7 +560,7 @@ lkkbd_event (struct input_dev *dev, unsigned int type, unsigned int code,
 
                default:
                        printk (KERN_ERR "%s (): Got unknown type %d, code %d, value %d\n",
-                                       __FUNCTION__, type, code, value);
+                                       __func__, type, code, value);
        }
 
        return -1;
@@ -577,9 +571,9 @@ lkkbd_event (struct input_dev *dev, unsigned int type, unsigned int code,
  * were in.
  */
 static void
-lkkbd_reinit (void *data)
+lkkbd_reinit (struct work_struct *work)
 {
-       struct lkkbd *lk = data;
+       struct lkkbd *lk = container_of(work, struct lkkbd, tq);
        int division;
        unsigned char leds_on = 0;
        unsigned char leds_off = 0;
@@ -651,12 +645,12 @@ lkkbd_connect (struct serio *serio, struct serio_driver *drv)
        input_dev = input_allocate_device ();
        if (!lk || !input_dev) {
                err = -ENOMEM;
-               goto fail;
+               goto fail1;
        }
 
        lk->serio = serio;
        lk->dev = input_dev;
-       INIT_WORK (&lk->tq, lkkbd_reinit, lk);
+       INIT_WORK (&lk->tq, lkkbd_reinit);
        lk->bell_volume = bell_volume;
        lk->keyclick_volume = keyclick_volume;
        lk->ctrlclick_volume = ctrlclick_volume;
@@ -671,9 +665,10 @@ lkkbd_connect (struct serio *serio, struct serio_driver *drv)
        input_dev->id.vendor = SERIO_LKKBD;
        input_dev->id.product = 0;
        input_dev->id.version = 0x0100;
-       input_dev->cdev.dev = &serio->dev;
+       input_dev->dev.parent = &serio->dev;
        input_dev->event = lkkbd_event;
-       input_dev->private = lk;
+
+       input_set_drvdata (input_dev, lk);
 
        set_bit (EV_KEY, input_dev->evbit);
        set_bit (EV_LED, input_dev->evbit);
@@ -696,15 +691,19 @@ lkkbd_connect (struct serio *serio, struct serio_driver *drv)
 
        err = serio_open (serio, drv);
        if (err)
-               goto fail;
+               goto fail2;
+
+       err = input_register_device (lk->dev);
+       if (err)
+               goto fail3;
 
-       input_register_device (lk->dev);
        lk->serio->write (lk->serio, LK_CMD_POWERCYCLE_RESET);
 
        return 0;
 
- fail: serio_set_drvdata (serio, NULL);
-       input_free_device (input_dev);
+ fail3:        serio_close (serio);
+ fail2:        serio_set_drvdata (serio, NULL);
+ fail1:        input_free_device (input_dev);
        kfree (lk);
        return err;
 }
@@ -754,8 +753,7 @@ static struct serio_driver lkkbd_drv = {
 static int __init
 lkkbd_init (void)
 {
-       serio_register_driver(&lkkbd_drv);
-       return 0;
+       return serio_register_driver(&lkkbd_drv);
 }
 
 static void __exit