]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/joystick/sidewinder.c
Merge branch 'upstream-fixes' of git://lost.foo-projects.org/~ahkok/git/netdev-2...
[linux-2.6-omap-h63xx.git] / drivers / input / joystick / sidewinder.c
index 78dd163cd7021cb6d7f079a443c07d0dc5ce6562..95c0de7964a0803f788764a7426cb66b75f79867 100644 (file)
@@ -589,7 +589,7 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
        struct sw *sw;
        struct input_dev *input_dev;
        int i, j, k, l;
-       int err;
+       int err = 0;
        unsigned char *buf = NULL;      /* [SW_LENGTH] */
        unsigned char *idbuf = NULL;    /* [SW_LENGTH] */
        unsigned char m = 1;
@@ -736,7 +736,7 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
                sprintf(sw->name, "Microsoft SideWinder %s", sw_name[sw->type]);
                sprintf(sw->phys[i], "%s/input%d", gameport->phys, i);
 
-               input_dev = input_allocate_device();
+               sw->dev[i] = input_dev = input_allocate_device();
                if (!input_dev) {
                        err = -ENOMEM;
                        goto fail3;
@@ -771,19 +771,23 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
 
                dbg("%s%s [%d-bit id %d data %d]\n", sw->name, comment, m, l, k);
 
-               input_register_device(sw->dev[i]);
+               err = input_register_device(sw->dev[i]);
+               if (err)
+                       goto fail4;
        }
 
-       return 0;
+ out:  kfree(buf);
+       kfree(idbuf);
+
+       return err;
 
- fail3: while (--i >= 0)
+ fail4:        input_free_device(sw->dev[i]);
+ fail3:        while (--i >= 0)
                input_unregister_device(sw->dev[i]);
  fail2:        gameport_close(gameport);
  fail1:        gameport_set_drvdata(gameport, NULL);
        kfree(sw);
-       kfree(buf);
-       kfree(idbuf);
-       return err;
+       goto out;
 }
 
 static void sw_disconnect(struct gameport *gameport)
@@ -801,6 +805,7 @@ static void sw_disconnect(struct gameport *gameport)
 static struct gameport_driver sw_drv = {
        .driver         = {
                .name   = "sidewinder",
+               .owner  = THIS_MODULE,
        },
        .description    = DRIVER_DESC,
        .connect        = sw_connect,