Loading drivers/input/serio/i8042.c +11 −2 Original line number Original line Diff line number Diff line Loading @@ -106,6 +106,7 @@ static unsigned char i8042_ctr; static unsigned char i8042_mux_present; static unsigned char i8042_mux_present; static unsigned char i8042_kbd_irq_registered; static unsigned char i8042_kbd_irq_registered; static unsigned char i8042_aux_irq_registered; static unsigned char i8042_aux_irq_registered; static unsigned char i8042_suppress_kbd_ack; static struct platform_device *i8042_platform_device; static struct platform_device *i8042_platform_device; static irqreturn_t i8042_interrupt(int irq, void *dev_id); static irqreturn_t i8042_interrupt(int irq, void *dev_id); Loading Loading @@ -316,7 +317,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id) unsigned char str, data; unsigned char str, data; unsigned int dfl; unsigned int dfl; unsigned int port_no; unsigned int port_no; int ret; int ret = 1; spin_lock_irqsave(&i8042_lock, flags); spin_lock_irqsave(&i8042_lock, flags); str = i8042_read_status(); str = i8042_read_status(); Loading Loading @@ -378,10 +379,16 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id) dfl & SERIO_PARITY ? ", bad parity" : "", dfl & SERIO_PARITY ? ", bad parity" : "", dfl & SERIO_TIMEOUT ? ", timeout" : ""); 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)) if (likely(port->exists)) serio_interrupt(port->serio, data, dfl); serio_interrupt(port->serio, data, dfl); ret = 1; out: out: return IRQ_RETVAL(ret); return IRQ_RETVAL(ret); } } Loading Loading @@ -842,11 +849,13 @@ 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; 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; i8042_write_data(led); i8042_write_data(led); DELAY; DELAY; last_blink = count; last_blink = count; Loading Loading
drivers/input/serio/i8042.c +11 −2 Original line number Original line Diff line number Diff line Loading @@ -106,6 +106,7 @@ static unsigned char i8042_ctr; static unsigned char i8042_mux_present; static unsigned char i8042_mux_present; static unsigned char i8042_kbd_irq_registered; static unsigned char i8042_kbd_irq_registered; static unsigned char i8042_aux_irq_registered; static unsigned char i8042_aux_irq_registered; static unsigned char i8042_suppress_kbd_ack; static struct platform_device *i8042_platform_device; static struct platform_device *i8042_platform_device; static irqreturn_t i8042_interrupt(int irq, void *dev_id); static irqreturn_t i8042_interrupt(int irq, void *dev_id); Loading Loading @@ -316,7 +317,7 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id) unsigned char str, data; unsigned char str, data; unsigned int dfl; unsigned int dfl; unsigned int port_no; unsigned int port_no; int ret; int ret = 1; spin_lock_irqsave(&i8042_lock, flags); spin_lock_irqsave(&i8042_lock, flags); str = i8042_read_status(); str = i8042_read_status(); Loading Loading @@ -378,10 +379,16 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id) dfl & SERIO_PARITY ? ", bad parity" : "", dfl & SERIO_PARITY ? ", bad parity" : "", dfl & SERIO_TIMEOUT ? ", timeout" : ""); 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)) if (likely(port->exists)) serio_interrupt(port->serio, data, dfl); serio_interrupt(port->serio, data, dfl); ret = 1; out: out: return IRQ_RETVAL(ret); return IRQ_RETVAL(ret); } } Loading Loading @@ -842,11 +849,13 @@ 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; 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; i8042_write_data(led); i8042_write_data(led); DELAY; DELAY; last_blink = count; last_blink = count; Loading