]> err.no Git - linux-2.6/blobdiff - drivers/input/joystick/amijoy.c
spi: spi_bfin5xx: remove unused label
[linux-2.6] / drivers / input / joystick / amijoy.c
index 8558a99f6635a653287563d7e31557cdf04080b5..deb9f825f92c34e6caffa165b480b013bc6dea5f 100644 (file)
 #include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/input.h>
 #include <linux/interrupt.h>
+#include <linux/mutex.h>
 
 #include <asm/system.h>
 #include <asm/amigahw.h>
@@ -49,14 +49,12 @@ static int amijoy[2] = { 0, 1 };
 module_param_array_named(map, amijoy, uint, NULL, 0);
 MODULE_PARM_DESC(map, "Map of attached joysticks in form of <a>,<b> (default is 0,1)");
 
-__obsolete_setup("amijoy=");
-
 static int amijoy_used;
-static DECLARE_MUTEX(amijoy_sem);
+static DEFINE_MUTEX(amijoy_mutex);
 static struct input_dev *amijoy_dev[2];
 static char *amijoy_phys[2] = { "amijoy/input0", "amijoy/input1" };
 
-static irqreturn_t amijoy_interrupt(int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t amijoy_interrupt(int irq, void *dummy)
 {
        int i, data = 0, button = 0;
 
@@ -64,12 +62,10 @@ static irqreturn_t amijoy_interrupt(int irq, void *dummy, struct pt_regs *fp)
                if (amijoy[i]) {
 
                        switch (i) {
-                               case 0: data = ~custom.joy0dat; button = (~ciaa.pra >> 6) & 1; break;
-                               case 1: data = ~custom.joy1dat; button = (~ciaa.pra >> 7) & 1; break;
+                               case 0: data = ~amiga_custom.joy0dat; button = (~ciaa.pra >> 6) & 1; break;
+                               case 1: data = ~amiga_custom.joy1dat; button = (~ciaa.pra >> 7) & 1; break;
                        }
 
-                       input_regs(amijoy_dev[i], fp);
-
                        input_report_key(amijoy_dev[i], BTN_TRIGGER, button);
 
                        input_report_abs(amijoy_dev[i], ABS_X, ((data >> 1) & 1) - ((data >> 9) & 1));
@@ -85,7 +81,7 @@ static int amijoy_open(struct input_dev *dev)
 {
        int err;
 
-       err = down_interruptible(&amijoy_sem);
+       err = mutex_lock_interruptible(&amijoy_mutex);
        if (err)
                return err;
 
@@ -97,16 +93,16 @@ static int amijoy_open(struct input_dev *dev)
 
        amijoy_used++;
 out:
-       up(&amijoy_sem);
+       mutex_unlock(&amijoy_mutex);
        return err;
 }
 
 static void amijoy_close(struct input_dev *dev)
 {
-       down(&amijoy_sem);
+       mutex_lock(&amijoy_mutex);
        if (!--amijoy_used)
                free_irq(IRQ_AMIGA_VERTB, amijoy_interrupt);
-       up(&amijoy_sem);
+       mutex_unlock(&amijoy_mutex);
 }
 
 static int __init amijoy_init(void)
@@ -140,15 +136,20 @@ static int __init amijoy_init(void)
                amijoy_dev[i]->open = amijoy_open;
                amijoy_dev[i]->close = amijoy_close;
 
-               amijoy_dev[i]->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
-               amijoy_dev[i]->absbit[0] = BIT(ABS_X) | BIT(ABS_Y);
-               amijoy_dev[i]->keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);
+               amijoy_dev[i]->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
+               amijoy_dev[i]->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y);
+               amijoy_dev[i]->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) |
+                       BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT);
                for (j = 0; j < 2; j++) {
                        amijoy_dev[i]->absmin[ABS_X + j] = -1;
                        amijoy_dev[i]->absmax[ABS_X + j] = 1;
                }
 
-               input_register_device(amijoy_dev[i]);
+               err = input_register_device(amijoy_dev[i]);
+               if (err) {
+                       input_free_device(amijoy_dev[i]);
+                       goto fail;
+               }
        }
        return 0;