]> err.no Git - linux-2.6/blobdiff - drivers/input/joystick/tmdc.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/herbert/crypto-2.6
[linux-2.6] / drivers / input / joystick / tmdc.c
index 3a7d1bb46472b7c616c22ace3706029ea2c70edd..3b36ee04f7261848e87c0c61c45b9e517e1bf218 100644 (file)
@@ -38,6 +38,7 @@
 #include <linux/init.h>
 #include <linux/gameport.h>
 #include <linux/input.h>
+#include <linux/jiffies.h>
 
 #define DRIVER_DESC    "ThrustMaster DirectConnect joystick driver"
 
@@ -264,7 +265,7 @@ static void tmdc_poll(struct gameport *gameport)
 
 static int tmdc_open(struct input_dev *dev)
 {
-       struct tmdc *tmdc = dev->private;
+       struct tmdc *tmdc = input_get_drvdata(dev);
 
        gameport_start_polling(tmdc->gameport);
        return 0;
@@ -272,7 +273,7 @@ static int tmdc_open(struct input_dev *dev)
 
 static void tmdc_close(struct input_dev *dev)
 {
-       struct tmdc *tmdc = dev->private;
+       struct tmdc *tmdc = input_get_drvdata(dev);
 
        gameport_stop_polling(tmdc->gameport);
 }
@@ -283,13 +284,13 @@ static int tmdc_setup_port(struct tmdc *tmdc, int idx, unsigned char *data)
        struct tmdc_port *port;
        struct input_dev *input_dev;
        int i, j, b = 0;
+       int err;
 
        tmdc->port[idx] = port = kzalloc(sizeof (struct tmdc_port), GFP_KERNEL);
        input_dev = input_allocate_device();
        if (!port || !input_dev) {
-               kfree(port);
-               input_free_device(input_dev);
-               return -ENOMEM;
+               err = -ENOMEM;
+               goto fail;
        }
 
        port->mode = data[TMDC_BYTE_ID];
@@ -325,8 +326,9 @@ static int tmdc_setup_port(struct tmdc *tmdc, int idx, unsigned char *data)
        input_dev->id.vendor = GAMEPORT_ID_VENDOR_THRUSTMASTER;
        input_dev->id.product = model->id;
        input_dev->id.version = 0x0100;
-       input_dev->cdev.dev = &tmdc->gameport->dev;
-       input_dev->private = tmdc;
+       input_dev->dev.parent = &tmdc->gameport->dev;
+
+       input_set_drvdata(input_dev, tmdc);
 
        input_dev->open = tmdc_open;
        input_dev->close = tmdc_close;
@@ -346,9 +348,15 @@ static int tmdc_setup_port(struct tmdc *tmdc, int idx, unsigned char *data)
                b += port->btnc[i];
        }
 
-       input_register_device(port->dev);
+       err = input_register_device(port->dev);
+       if (err)
+               goto fail;
 
        return 0;
+
+ fail: input_free_device(input_dev);
+       kfree(port);
+       return err;
 }
 
 /*
@@ -423,6 +431,7 @@ static void tmdc_disconnect(struct gameport *gameport)
 static struct gameport_driver tmdc_drv = {
        .driver         = {
                .name   = "tmdc",
+               .owner  = THIS_MODULE,
        },
        .description    = DRIVER_DESC,
        .connect        = tmdc_connect,