Messages in this thread Patch in this message | | | Date | Tue, 22 Jul 2003 18:37:47 -0400 | From | Chris Heath <> | Subject | [PATCH][2.6] Fix for Toshiba laptop keyboards |
| |
Here is a patch that fixes the problem we've seen on Toshiba laptop keyboards.
It has been tested on my regular keyboard, and Ralf Hildebrandt has confirmed that it fixes the problem on his Toshiba.
Chris
--- a/drivers/input/serio/i8042.c 2003-06-01 09:56:28.000000000 -0400 +++ b/drivers/input/serio/i8042.c 2003-07-21 22:19:53.000000000 -0400 @@ -59,6 +59,7 @@ static unsigned char i8042_initial_ctr; static unsigned char i8042_ctr; static unsigned char i8042_last_e0; +static unsigned char i8042_last_release; static unsigned char i8042_mux_open; struct timer_list i8042_timer; @@ -406,15 +407,22 @@ if (data > 0x7f) { unsigned char index = (data & 0x7f) | (i8042_last_e0 << 7); + /* work around hardware that doubles key releases */ + if (index == i8042_last_release) { + dbg("i8042 skipped double release (%d)\n", index); + continue; + } if (index == 0xaa || index == 0xb6) set_bit(index, i8042_unxlate_seen); if (test_and_clear_bit(index, i8042_unxlate_seen)) { serio_interrupt(&i8042_kbd_port, 0xf0, dfl, regs); data = i8042_unxlate_table[data & 0x7f]; + i8042_last_release = index; } } else { set_bit(data | (i8042_last_e0 << 7), i8042_unxlate_seen); data = i8042_unxlate_table[data]; + i8042_last_release = 0; } i8042_last_e0 = (data == 0xe0); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |