Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 39655
b: refs/heads/master
c: 817e6ba
h: refs/heads/master
i:
  39653: 22acbbe
  39651: 3ed2c73
  39647: 0850d3d
v: v3
  • Loading branch information
Dmitry Torokhov committed Oct 11, 2006
1 parent 7e83621 commit cd9e8d7
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 80fc9f532d8c05d4cb12d55660624ce53a378349
refs/heads/master: 817e6ba3623de9cdc66c6aba90eae30b5588ff11
13 changes: 11 additions & 2 deletions trunk/drivers/input/serio/i8042.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ static unsigned char i8042_ctr;
static unsigned char i8042_mux_present;
static unsigned char i8042_kbd_irq_registered;
static unsigned char i8042_aux_irq_registered;
static unsigned char i8042_suppress_kbd_ack;
static struct platform_device *i8042_platform_device;

static irqreturn_t i8042_interrupt(int irq, void *dev_id);
Expand Down Expand Up @@ -316,7 +317,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id)
unsigned char str, data;
unsigned int dfl;
unsigned int port_no;
int ret;
int ret = 1;

spin_lock_irqsave(&i8042_lock, flags);
str = i8042_read_status();
Expand Down Expand Up @@ -378,10 +379,16 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id)
dfl & SERIO_PARITY ? ", bad parity" : "",
dfl & SERIO_TIMEOUT ? ", timeout" : "");

if (unlikely(i8042_suppress_kbd_ack))
if (port_no == I8042_KBD_PORT_NO &&
(data == 0xfa || data == 0xfe)) {
i8042_suppress_kbd_ack = 0;
goto out;
}

if (likely(port->exists))
serio_interrupt(port->serio, data, dfl);

ret = 1;
out:
return IRQ_RETVAL(ret);
}
Expand Down Expand Up @@ -842,11 +849,13 @@ static long i8042_panic_blink(long count)
led ^= 0x01 | 0x04;
while (i8042_read_status() & I8042_STR_IBF)
DELAY;
i8042_suppress_kbd_ack = 1;
i8042_write_data(0xed); /* set leds */
DELAY;
while (i8042_read_status() & I8042_STR_IBF)
DELAY;
DELAY;
i8042_suppress_kbd_ack = 1;
i8042_write_data(led);
DELAY;
last_blink = count;
Expand Down

0 comments on commit cd9e8d7

Please sign in to comment.