diff options
Diffstat (limited to 'drivers/input/serio/i8042.c')
-rw-r--r-- | drivers/input/serio/i8042.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index debe9445488c..c3fdfc1f342a 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c | |||
@@ -371,7 +371,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id) | |||
371 | if (unlikely(i8042_suppress_kbd_ack)) | 371 | if (unlikely(i8042_suppress_kbd_ack)) |
372 | if (port_no == I8042_KBD_PORT_NO && | 372 | if (port_no == I8042_KBD_PORT_NO && |
373 | (data == 0xfa || data == 0xfe)) { | 373 | (data == 0xfa || data == 0xfe)) { |
374 | i8042_suppress_kbd_ack = 0; | 374 | i8042_suppress_kbd_ack--; |
375 | goto out; | 375 | goto out; |
376 | } | 376 | } |
377 | 377 | ||
@@ -543,6 +543,7 @@ static int __devinit i8042_check_aux(void) | |||
543 | { | 543 | { |
544 | int retval = -1; | 544 | int retval = -1; |
545 | int irq_registered = 0; | 545 | int irq_registered = 0; |
546 | int aux_loop_broken = 0; | ||
546 | unsigned long flags; | 547 | unsigned long flags; |
547 | unsigned char param; | 548 | unsigned char param; |
548 | 549 | ||
@@ -572,6 +573,8 @@ static int __devinit i8042_check_aux(void) | |||
572 | if (i8042_command(¶m, I8042_CMD_AUX_TEST) || | 573 | if (i8042_command(¶m, I8042_CMD_AUX_TEST) || |
573 | (param && param != 0xfa && param != 0xff)) | 574 | (param && param != 0xfa && param != 0xff)) |
574 | return -1; | 575 | return -1; |
576 | |||
577 | aux_loop_broken = 1; | ||
575 | } | 578 | } |
576 | 579 | ||
577 | /* | 580 | /* |
@@ -595,7 +598,7 @@ static int __devinit i8042_check_aux(void) | |||
595 | * used it for a PCI card or somethig else. | 598 | * used it for a PCI card or somethig else. |
596 | */ | 599 | */ |
597 | 600 | ||
598 | if (i8042_noloop) { | 601 | if (i8042_noloop || aux_loop_broken) { |
599 | /* | 602 | /* |
600 | * Without LOOP command we can't test AUX IRQ delivery. Assume the port | 603 | * Without LOOP command we can't test AUX IRQ delivery. Assume the port |
601 | * is working and hope we are right. | 604 | * is working and hope we are right. |
@@ -838,13 +841,14 @@ static long i8042_panic_blink(long count) | |||
838 | led ^= 0x01 | 0x04; | 841 | led ^= 0x01 | 0x04; |
839 | while (i8042_read_status() & I8042_STR_IBF) | 842 | while (i8042_read_status() & I8042_STR_IBF) |
840 | DELAY; | 843 | DELAY; |
841 | i8042_suppress_kbd_ack = 1; | 844 | dbg("%02x -> i8042 (panic blink)", 0xed); |
845 | i8042_suppress_kbd_ack = 2; | ||
842 | i8042_write_data(0xed); /* set leds */ | 846 | i8042_write_data(0xed); /* set leds */ |
843 | DELAY; | 847 | DELAY; |
844 | while (i8042_read_status() & I8042_STR_IBF) | 848 | while (i8042_read_status() & I8042_STR_IBF) |
845 | DELAY; | 849 | DELAY; |
846 | DELAY; | 850 | DELAY; |
847 | i8042_suppress_kbd_ack = 1; | 851 | dbg("%02x -> i8042 (panic blink)", led); |
848 | i8042_write_data(led); | 852 | i8042_write_data(led); |
849 | DELAY; | 853 | DELAY; |
850 | last_blink = count; | 854 | last_blink = count; |