]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/joystick/grip.c
Merge ../linux-2.6
[linux-2.6-omap-h63xx.git] / drivers / input / joystick / grip.c
index a936e7aedb103552e617010d7260a74664c6ff29..17a90c436de85a35398ea2e1334c180b812954aa 100644 (file)
@@ -192,6 +192,9 @@ static void grip_poll(struct gameport *gameport)
        for (i = 0; i < 2; i++) {
 
                dev = grip->dev[i];
+               if (!dev)
+                       continue;
+
                grip->reads++;
 
                switch (grip->mode[i]) {
@@ -351,7 +354,8 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv)
                        goto fail3;
                }
 
-               sprintf(grip->phys[i], "%s/input%d", gameport->phys, i);
+               snprintf(grip->phys[i], sizeof(grip->phys[i]),
+                        "%s/input%d", gameport->phys, i);
 
                input_dev->name = grip_name[grip->mode[i]];
                input_dev->phys = grip->phys[i];
@@ -381,12 +385,15 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv)
                        if (t > 0)
                                set_bit(t, input_dev->keybit);
 
-               input_register_device(grip->dev[i]);
+               err = input_register_device(grip->dev[i]);
+               if (err)
+                       goto fail4;
        }
 
        return 0;
 
- fail3: for (i = 0; i < 2; i++)
+ fail4:        input_free_device(grip->dev[i]);
+ fail3:        while (--i >= 0)
                if (grip->dev[i])
                        input_unregister_device(grip->dev[i]);
  fail2:        gameport_close(gameport);
@@ -411,6 +418,7 @@ static void grip_disconnect(struct gameport *gameport)
 static struct gameport_driver grip_drv = {
        .driver         = {
                .name   = "grip",
+               .owner  = THIS_MODULE,
        },
        .description    = DRIVER_DESC,
        .connect        = grip_connect,