aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/serio
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor@insightbb.com>2007-01-18 00:42:31 -0500
committerDmitry Torokhov <dtor@insightbb.com>2007-01-18 00:42:31 -0500
commit19f3c3e37314a234998fd75f5ea9388dfb6ab00a (patch)
tree23d7dd40fe5e6852f40e0430dbf91371f4760201 /drivers/input/serio
parent65a2d2258e0f29371606aa0f7f4258e618ecebe8 (diff)
Input: i8042 - really suppress ACK/NAK during panic blink
On some boxes panic blink procedure manages to send both bytes to keyboard contoller before getting first ACK so we need to make i8042_suppress_kbd_ack a counter instead of boolean. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input/serio')
-rw-r--r--drivers/input/serio/i8042.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index debe9445488c..1364c7964db4 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
@@ -838,13 +838,14 @@ static long i8042_panic_blink(long count)
838 led ^= 0x01 | 0x04; 838 led ^= 0x01 | 0x04;
839 while (i8042_read_status() & I8042_STR_IBF) 839 while (i8042_read_status() & I8042_STR_IBF)
840 DELAY; 840 DELAY;
841 i8042_suppress_kbd_ack = 1; 841 dbg("%02x -> i8042 (panic blink)", 0xed);
842 i8042_suppress_kbd_ack = 2;
842 i8042_write_data(0xed); /* set leds */ 843 i8042_write_data(0xed); /* set leds */
843 DELAY; 844 DELAY;
844 while (i8042_read_status() & I8042_STR_IBF) 845 while (i8042_read_status() & I8042_STR_IBF)
845 DELAY; 846 DELAY;
846 DELAY; 847 DELAY;
847 i8042_suppress_kbd_ack = 1; 848 dbg("%02x -> i8042 (panic blink)", led);
848 i8042_write_data(led); 849 i8042_write_data(led);
849 DELAY; 850 DELAY;
850 last_blink = count; 851 last_blink = count;