]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/joystick/adi.c
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[linux-2.6-omap-h63xx.git] / drivers / input / joystick / adi.c
index 9d95459f4bcbf4839b0aa3489c3b3b908b1e436e..6279ced8a35b61d07bf9f27ec8c97ead8a7306f1 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/input.h>
 #include <linux/gameport.h>
 #include <linux/init.h>
+#include <linux/jiffies.h>
 
 #define DRIVER_DESC    "Logitech ADI joystick family driver"
 
@@ -520,11 +521,19 @@ static int adi_connect(struct gameport *gameport, struct gameport_driver *drv)
        for (i = 0; i < 2; i++)
                if (port->adi[i].length > 0) {
                        adi_init_center(port->adi + i);
-                       input_register_device(port->adi[i].dev);
+                       err = input_register_device(port->adi[i].dev);
+                       if (err)
+                               goto fail3;
                }
 
        return 0;
 
+ fail3: while (--i >= 0) {
+               if (port->adi[i].length > 0) {
+                       input_unregister_device(port->adi[i].dev);
+                       port->adi[i].dev = NULL;
+               }
+       }
  fail2:        for (i = 0; i < 2; i++)
                if (port->adi[i].dev)
                        input_free_device(port->adi[i].dev);