]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/joystick/analog.c
Pull acpi-debug into release branch
[linux-2.6-omap-h63xx.git] / drivers / input / joystick / analog.c
index e9a02db36eccc3b0d431f1276f94fe090d4f2923..bdd157c1ebf8929b763a9d56815ce209c5d906f2 100644 (file)
@@ -53,13 +53,11 @@ MODULE_LICENSE("GPL");
 #define ANALOG_PORTS           16
 
 static char *js[ANALOG_PORTS];
-static int js_nargs;
+static unsigned int js_nargs;
 static int analog_options[ANALOG_PORTS];
 module_param_array_named(map, js, charp, &js_nargs, 0);
 MODULE_PARM_DESC(map, "Describes analog joysticks type/capabilities");
 
-__obsolete_setup("js=");
-
 /*
  * Times, feature definitions.
  */
@@ -345,7 +343,7 @@ static void analog_poll(struct gameport *gameport)
 
 static int analog_open(struct input_dev *dev)
 {
-       struct analog_port *port = dev->private;
+       struct analog_port *port = input_get_drvdata(dev);
 
        gameport_start_polling(port->gameport);
        return 0;
@@ -357,7 +355,7 @@ static int analog_open(struct input_dev *dev)
 
 static void analog_close(struct input_dev *dev)
 {
-       struct analog_port *port = dev->private;
+       struct analog_port *port = input_get_drvdata(dev);
 
        gameport_stop_polling(port->gameport);
 }
@@ -434,6 +432,7 @@ static int analog_init_device(struct analog_port *port, struct analog *analog, i
 {
        struct input_dev *input_dev;
        int i, j, t, v, w, x, y, z;
+       int error;
 
        analog_name(analog);
        snprintf(analog->phys, sizeof(analog->phys),
@@ -450,10 +449,13 @@ static int analog_init_device(struct analog_port *port, struct analog *analog, i
        input_dev->id.vendor = GAMEPORT_ID_VENDOR_ANALOG;
        input_dev->id.product = analog->mask >> 4;
        input_dev->id.version = 0x0100;
+       input_dev->dev.parent = &port->gameport->dev;
+
+       input_set_drvdata(input_dev, port);
 
        input_dev->open = analog_open;
        input_dev->close = analog_close;
-       input_dev->private = port;
+
        input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
 
        for (i = j = 0; i < 4; i++)
@@ -505,7 +507,11 @@ static int analog_init_device(struct analog_port *port, struct analog *analog, i
 
        analog_decode(analog, port->axes, port->initial, port->buttons);
 
-       input_register_device(analog->dev);
+       error = input_register_device(analog->dev);
+       if (error) {
+               input_free_device(analog->dev);
+               return error;
+       }
 
        return 0;
 }
@@ -668,7 +674,8 @@ static int analog_connect(struct gameport *gameport, struct gameport_driver *drv
        return 0;
 
  fail3: while (--i >= 0)
-               input_unregister_device(port->analog[i].dev);
+               if (port->analog[i].mask)
+                       input_unregister_device(port->analog[i].dev);
  fail2:        gameport_close(gameport);
  fail1:        gameport_set_drvdata(gameport, NULL);
        kfree(port);