aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/serio/i8042.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/serio/i8042.c')
-rw-r--r--drivers/input/serio/i8042.c12
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(&param, I8042_CMD_AUX_TEST) || 573 if (i8042_command(&param, 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;