fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / input / joystick / iforce / iforce-serio.c
index 11f5190..ec4be53 100644 (file)
@@ -81,7 +81,7 @@ static void iforce_serio_write_wakeup(struct serio *serio)
 }
 
 static irqreturn_t iforce_serio_irq(struct serio *serio,
-               unsigned char data, unsigned int flags, struct pt_regs *regs)
+               unsigned char data, unsigned int flags)
 {
        struct iforce *iforce = serio_get_drvdata(serio);
 
@@ -115,7 +115,7 @@ static irqreturn_t iforce_serio_irq(struct serio *serio,
        }
 
        if (iforce->idx == iforce->len) {
-               iforce_process_packet(iforce, (iforce->id << 8) | iforce->idx, iforce->data, regs);
+               iforce_process_packet(iforce, (iforce->id << 8) | iforce->idx, iforce->data);
                iforce->pkt = 0;
                iforce->id  = 0;
                iforce->len = 0;
@@ -131,38 +131,36 @@ static int iforce_serio_connect(struct serio *serio, struct serio_driver *drv)
        struct iforce *iforce;
        int err;
 
-       if (!(iforce = kmalloc(sizeof(struct iforce), GFP_KERNEL)))
+       iforce = kzalloc(sizeof(struct iforce), GFP_KERNEL);
+       if (!iforce)
                return -ENOMEM;
 
-       memset(iforce, 0, sizeof(struct iforce));
-
        iforce->bus = IFORCE_232;
        iforce->serio = serio;
 
        serio_set_drvdata(serio, iforce);
 
        err = serio_open(serio, drv);
-       if (err) {
-               serio_set_drvdata(serio, NULL);
-               kfree(iforce);
-               return err;
-       }
+       if (err)
+               goto fail1;
 
-       if (iforce_init_device(iforce)) {
-               serio_close(serio);
-               serio_set_drvdata(serio, NULL);
-               kfree(iforce);
-               return -ENODEV;
-       }
+       err = iforce_init_device(iforce);
+       if (err)
+               goto fail2;
 
        return 0;
+
+ fail2:        serio_close(serio);
+ fail1:        serio_set_drvdata(serio, NULL);
+       kfree(iforce);
+       return err;
 }
 
 static void iforce_serio_disconnect(struct serio *serio)
 {
        struct iforce *iforce = serio_get_drvdata(serio);
 
-       input_unregister_device(&iforce->dev);
+       input_unregister_device(iforce->dev);
        serio_close(serio);
        serio_set_drvdata(serio, NULL);
        kfree(iforce);