diff options
author | Dmitry Torokhov <dtor@insightbb.com> | 2007-01-18 00:42:31 -0500 |
---|---|---|
committer | Dmitry Torokhov <dtor@insightbb.com> | 2007-01-18 00:42:31 -0500 |
commit | 19f3c3e37314a234998fd75f5ea9388dfb6ab00a (patch) | |
tree | 23d7dd40fe5e6852f40e0430dbf91371f4760201 /drivers/input/serio/i8042.c | |
parent | 65a2d2258e0f29371606aa0f7f4258e618ecebe8 (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/i8042.c')
-rw-r--r-- | drivers/input/serio/i8042.c | 7 |
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; |