Commit 19f3c3e3 authored by Dmitry Torokhov's avatar Dmitry Torokhov

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: default avatarDmitry Torokhov <dtor@mail.ru>
parent 65a2d225
...@@ -371,7 +371,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id) ...@@ -371,7 +371,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id)
if (unlikely(i8042_suppress_kbd_ack)) if (unlikely(i8042_suppress_kbd_ack))
if (port_no == I8042_KBD_PORT_NO && if (port_no == I8042_KBD_PORT_NO &&
(data == 0xfa || data == 0xfe)) { (data == 0xfa || data == 0xfe)) {
i8042_suppress_kbd_ack = 0; i8042_suppress_kbd_ack--;
goto out; goto out;
} }
...@@ -838,13 +838,14 @@ static long i8042_panic_blink(long count) ...@@ -838,13 +838,14 @@ static long i8042_panic_blink(long count)
led ^= 0x01 | 0x04; led ^= 0x01 | 0x04;
while (i8042_read_status() & I8042_STR_IBF) while (i8042_read_status() & I8042_STR_IBF)
DELAY; DELAY;
i8042_suppress_kbd_ack = 1; dbg("%02x -> i8042 (panic blink)", 0xed);
i8042_suppress_kbd_ack = 2;
i8042_write_data(0xed); /* set leds */ i8042_write_data(0xed); /* set leds */
DELAY; DELAY;
while (i8042_read_status() & I8042_STR_IBF) while (i8042_read_status() & I8042_STR_IBF)
DELAY; DELAY;
DELAY; DELAY;
i8042_suppress_kbd_ack = 1; dbg("%02x -> i8042 (panic blink)", led);
i8042_write_data(led); i8042_write_data(led);
DELAY; DELAY;
last_blink = count; last_blink = count;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment