]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/keyboard/sunkbd.c
Merge /pub/scm/linux/kernel/git/torvalds/linux-2.6
[linux-2.6-omap-h63xx.git] / drivers / input / keyboard / sunkbd.c
index 6cd887c5eb0a1082560d61172e1dc9bef1b7f0e9..1d4e39624cfecf08d1a4ef4f6a81fce8da3b5112 100644 (file)
@@ -146,7 +146,7 @@ out:
 
 static int sunkbd_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
 {
-       struct sunkbd *sunkbd = dev->private;
+       struct sunkbd *sunkbd = input_get_drvdata(dev);
 
        switch (type) {
 
@@ -225,7 +225,7 @@ static void sunkbd_reinit(struct work_struct *work)
 static void sunkbd_enable(struct sunkbd *sunkbd, int enable)
 {
        serio_pause_rx(sunkbd->serio);
-       sunkbd->enabled = 1;
+       sunkbd->enabled = enable;
        serio_continue_rx(sunkbd->serio);
 }
 
@@ -243,7 +243,7 @@ static int sunkbd_connect(struct serio *serio, struct serio_driver *drv)
        sunkbd = kzalloc(sizeof(struct sunkbd), GFP_KERNEL);
        input_dev = input_allocate_device();
        if (!sunkbd || !input_dev)
-               goto fail;
+               goto fail1;
 
        sunkbd->serio = serio;
        sunkbd->dev = input_dev;
@@ -255,11 +255,11 @@ static int sunkbd_connect(struct serio *serio, struct serio_driver *drv)
 
        err = serio_open(serio, drv);
        if (err)
-               goto fail;
+               goto fail2;
 
        if (sunkbd_initialize(sunkbd) < 0) {
-               serio_close(serio);
-               goto fail;
+               err = -ENODEV;
+               goto fail3;
        }
 
        snprintf(sunkbd->name, sizeof(sunkbd->name), "Sun Type %d keyboard", sunkbd->type);
@@ -271,8 +271,10 @@ static int sunkbd_connect(struct serio *serio, struct serio_driver *drv)
        input_dev->id.vendor  = SERIO_SUNKBD;
        input_dev->id.product = sunkbd->type;
        input_dev->id.version = 0x0100;
-       input_dev->cdev.dev = &serio->dev;
-       input_dev->private = sunkbd;
+       input_dev->dev.parent = &serio->dev;
+
+       input_set_drvdata(input_dev, sunkbd);
+
        input_dev->event = sunkbd_event;
 
        input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_SND) | BIT(EV_REP);
@@ -287,11 +289,17 @@ static int sunkbd_connect(struct serio *serio, struct serio_driver *drv)
        clear_bit(0, input_dev->keybit);
 
        sunkbd_enable(sunkbd, 1);
-       input_register_device(sunkbd->dev);
+
+       err = input_register_device(sunkbd->dev);
+       if (err)
+               goto fail4;
+
        return 0;
 
- fail: serio_set_drvdata(serio, NULL);
-       input_free_device(input_dev);
+ fail4:        sunkbd_enable(sunkbd, 0);
+ fail3:        serio_close(serio);
+ fail2:        serio_set_drvdata(serio, NULL);
+ fail1:        input_free_device(input_dev);
        kfree(sunkbd);
        return err;
 }
@@ -346,8 +354,7 @@ static struct serio_driver sunkbd_drv = {
 
 static int __init sunkbd_init(void)
 {
-       serio_register_driver(&sunkbd_drv);
-       return 0;
+       return serio_register_driver(&sunkbd_drv);
 }
 
 static void __exit sunkbd_exit(void)