]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/input/serio/i8042.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
[karo-tx-linux.git] / drivers / input / serio / i8042.c
index 3888dc307e0ce09d47aebc89eeb983df02be5f40..11dafc0ee9942145b937a85bbebe27578ed073c6 100644 (file)
@@ -385,6 +385,8 @@ static int i8042_enable_kbd_port(void)
        i8042_ctr |= I8042_CTR_KBDINT;
 
        if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
+               i8042_ctr &= ~I8042_CTR_KBDINT;
+               i8042_ctr |= I8042_CTR_KBDDIS;
                printk(KERN_ERR "i8042.c: Failed to enable KBD port.\n");
                return -EIO;
        }
@@ -402,6 +404,8 @@ static int i8042_enable_aux_port(void)
        i8042_ctr |= I8042_CTR_AUXINT;
 
        if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
+               i8042_ctr &= ~I8042_CTR_AUXINT;
+               i8042_ctr |= I8042_CTR_AUXDIS;
                printk(KERN_ERR "i8042.c: Failed to enable AUX port.\n");
                return -EIO;
        }
@@ -512,6 +516,7 @@ static irqreturn_t __devinit i8042_aux_test_irq(int irq, void *dev_id)
 {
        unsigned long flags;
        unsigned char str, data;
+       int ret = 0;
 
        spin_lock_irqsave(&i8042_lock, flags);
        str = i8042_read_status();
@@ -520,10 +525,11 @@ static irqreturn_t __devinit i8042_aux_test_irq(int irq, void *dev_id)
                if (i8042_irq_being_tested &&
                    data == 0xa5 && (str & I8042_STR_AUXDATA))
                        complete(&i8042_aux_irq_delivered);
+               ret = 1;
        }
        spin_unlock_irqrestore(&i8042_lock, flags);
 
-       return IRQ_HANDLED;
+       return IRQ_RETVAL(ret);
 }
 
 /*
@@ -1038,7 +1044,7 @@ static void __devinit i8042_register_ports(void)
        }
 }
 
-static void __devinit i8042_unregister_ports(void)
+static void __devexit i8042_unregister_ports(void)
 {
        int i;