]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/joystick/grip.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
[linux-2.6-omap-h63xx.git] / drivers / input / joystick / grip.c
index a936e7aedb103552e617010d7260a74664c6ff29..73eb5ab6f140caa4bc8b9dd5eb34346335f1b1c2 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]) {
@@ -282,7 +285,7 @@ static void grip_poll(struct gameport *gameport)
 
 static int grip_open(struct input_dev *dev)
 {
-       struct grip *grip = dev->private;
+       struct grip *grip = input_get_drvdata(dev);
 
        gameport_start_polling(grip->gameport);
        return 0;
@@ -290,7 +293,7 @@ static int grip_open(struct input_dev *dev)
 
 static void grip_close(struct input_dev *dev)
 {
-       struct grip *grip = dev->private;
+       struct grip *grip = input_get_drvdata(dev);
 
        gameport_stop_polling(grip->gameport);
 }
@@ -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];
@@ -359,8 +363,9 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv)
                input_dev->id.vendor = GAMEPORT_ID_VENDOR_GRAVIS;
                input_dev->id.product = grip->mode[i];
                input_dev->id.version = 0x0100;
-               input_dev->cdev.dev = &gameport->dev;
-               input_dev->private = grip;
+               input_dev->dev.parent = &gameport->dev;
+
+               input_set_drvdata(input_dev, grip);
 
                input_dev->open = grip_open;
                input_dev->close = grip_close;
@@ -381,12 +386,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 +419,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,