Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / input / mouse / amimouse.c
index 7baa09c..c8b2cc9 100644 (file)
@@ -33,19 +33,15 @@ MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
 MODULE_DESCRIPTION("Amiga mouse driver");
 MODULE_LICENSE("GPL");
 
-static int amimouse_used = 0;
 static int amimouse_lastx, amimouse_lasty;
-static struct input_dev amimouse_dev;
-
-static char *amimouse_name = "Amiga mouse";
-static char *amimouse_phys = "amimouse/input0";
+static struct input_dev *amimouse_dev;
 
 static irqreturn_t amimouse_interrupt(int irq, void *dummy, struct pt_regs *fp)
 {
        unsigned short joy0dat, potgor;
        int nx, ny, dx, dy;
 
-       joy0dat = custom.joy0dat;
+       joy0dat = amiga_custom.joy0dat;
 
        nx = joy0dat & 0xff;
        ny = joy0dat >> 8;
@@ -61,18 +57,18 @@ static irqreturn_t amimouse_interrupt(int irq, void *dummy, struct pt_regs *fp)
        amimouse_lastx = nx;
        amimouse_lasty = ny;
 
-       potgor = custom.potgor;
+       potgor = amiga_custom.potgor;
 
-       input_regs(&amimouse_dev, fp);
+       input_regs(amimouse_dev, fp);
 
-       input_report_rel(&amimouse_dev, REL_X, dx);
-       input_report_rel(&amimouse_dev, REL_Y, dy);
+       input_report_rel(amimouse_dev, REL_X, dx);
+       input_report_rel(amimouse_dev, REL_Y, dy);
 
-       input_report_key(&amimouse_dev, BTN_LEFT,   ciaa.pra & 0x40);
-       input_report_key(&amimouse_dev, BTN_MIDDLE, potgor & 0x0100);
-       input_report_key(&amimouse_dev, BTN_RIGHT,  potgor & 0x0400);
+       input_report_key(amimouse_dev, BTN_LEFT,   ciaa.pra & 0x40);
+       input_report_key(amimouse_dev, BTN_MIDDLE, potgor & 0x0100);
+       input_report_key(amimouse_dev, BTN_RIGHT,  potgor & 0x0400);
 
-       input_sync(&amimouse_dev);
+       input_sync(amimouse_dev);
 
        return IRQ_HANDLED;
 }
@@ -81,16 +77,12 @@ static int amimouse_open(struct input_dev *dev)
 {
        unsigned short joy0dat;
 
-        if (amimouse_used++)
-                return 0;
-
-       joy0dat = custom.joy0dat;
+       joy0dat = amiga_custom.joy0dat;
 
        amimouse_lastx = joy0dat & 0xff;
        amimouse_lasty = joy0dat >> 8;
 
        if (request_irq(IRQ_AMIGA_VERTB, amimouse_interrupt, 0, "amimouse", amimouse_interrupt)) {
-                amimouse_used--;
                 printk(KERN_ERR "amimouse.c: Can't allocate irq %d\n", IRQ_AMIGA_VERTB);
                 return -EBUSY;
         }
@@ -100,8 +92,7 @@ static int amimouse_open(struct input_dev *dev)
 
 static void amimouse_close(struct input_dev *dev)
 {
-        if (!--amimouse_used)
-               free_irq(IRQ_AMIGA_VERTB, amimouse_interrupt);
+       free_irq(IRQ_AMIGA_VERTB, amimouse_interrupt);
 }
 
 static int __init amimouse_init(void)
@@ -109,28 +100,30 @@ static int __init amimouse_init(void)
        if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(AMI_MOUSE))
                return -ENODEV;
 
-       amimouse_dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
-       amimouse_dev.relbit[0] = BIT(REL_X) | BIT(REL_Y);
-       amimouse_dev.keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);
-       amimouse_dev.open = amimouse_open;
-       amimouse_dev.close = amimouse_close;
+       if (!(amimouse_dev = input_allocate_device()))
+               return -ENOMEM;
+
+       amimouse_dev->name = "Amiga mouse";
+       amimouse_dev->phys = "amimouse/input0";
+       amimouse_dev->id.bustype = BUS_AMIGA;
+       amimouse_dev->id.vendor = 0x0001;
+       amimouse_dev->id.product = 0x0002;
+       amimouse_dev->id.version = 0x0100;
 
-       amimouse_dev.name = amimouse_name;
-       amimouse_dev.phys = amimouse_phys;
-       amimouse_dev.id.bustype = BUS_AMIGA;
-       amimouse_dev.id.vendor = 0x0001;
-       amimouse_dev.id.product = 0x0002;
-       amimouse_dev.id.version = 0x0100;
+       amimouse_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
+       amimouse_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y);
+       amimouse_dev->keybit[LONG(BTN_LEFT)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);
+       amimouse_dev->open = amimouse_open;
+       amimouse_dev->close = amimouse_close;
 
-       input_register_device(&amimouse_dev);
+       input_register_device(amimouse_dev);
 
-        printk(KERN_INFO "input: %s at joy0dat\n", amimouse_name);
        return 0;
 }
 
 static void __exit amimouse_exit(void)
 {
-        input_unregister_device(&amimouse_dev);
+        input_unregister_device(amimouse_dev);
 }
 
 module_init(amimouse_init);