]> err.no Git - linux-2.6/blobdiff - drivers/input/joystick/tmdc.c
syncppp: Fix crashes.
[linux-2.6] / drivers / input / joystick / tmdc.c
index 60e2aac7d06ec955e873f40dc8c3cd5f97a3c947..0feeb8acb532a297a819d5713a3aa2bce3490af8 100644 (file)
@@ -265,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;
@@ -273,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);
 }
@@ -284,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];
@@ -326,13 +326,14 @@ 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;
 
-       input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
+       input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
 
        for (i = 0; i < port->absc && i < TMDC_ABS; i++)
                if (port->abs[i] >= 0)
@@ -347,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;
 }
 
 /*
@@ -424,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,