Merge branch 'drm-patches' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied...
[pandora-kernel.git] / drivers / input / joystick / grip_mp.c
index a0ba93c..8120a9c 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/input.h>
 #include <linux/delay.h>
 #include <linux/proc_fs.h>
+#include <linux/jiffies.h>
 
 #define DRIVER_DESC    "Gravis Grip Multiport driver"
 
@@ -52,17 +53,8 @@ struct grip_port {
 struct grip_mp {
        struct gameport *gameport;
        struct grip_port *port[GRIP_MAX_PORTS];
-//     struct input_dev *dev[4];
-//     int mode[4];
-//     int registered[4];
        int reads;
        int bads;
-
-       /* individual gamepad states */
-//     int buttons[4];
-//     int xaxes[4];
-//     int yaxes[4];
-//     int dirty[4];     /* has the state been updated? */
 };
 
 /*
@@ -431,7 +423,10 @@ static int get_and_decode_packet(struct grip_mp *grip, int flags)
 
                if (!port->registered) {
                        dbg("New Grip pad in multiport slot %d.\n", slot);
-                       register_slot(slot, grip);
+                       if (register_slot(slot, grip)) {
+                               port->mode = GRIP_MODE_RESET;
+                               port->dirty = 0;
+                       }
                }
                return flags;
        }
@@ -593,6 +588,7 @@ static int register_slot(int slot, struct grip_mp *grip)
        struct grip_port *port = grip->port[slot];
        struct input_dev *input_dev;
        int j, t;
+       int err;
 
        port->dev = input_dev = input_allocate_device();
        if (!input_dev)
@@ -618,7 +614,12 @@ static int register_slot(int slot, struct grip_mp *grip)
                if (t > 0)
                        set_bit(t, input_dev->keybit);
 
-       input_register_device(port->dev);
+       err = input_register_device(port->dev);
+       if (err) {
+               input_free_device(port->dev);
+               return err;
+       }
+
        port->registered = 1;
 
        if (port->dirty)                    /* report initial state, if any */