Messages in this thread Patch in this message | | | Date | Sun, 27 Jul 2003 21:29:34 +0100 | From | Alan Cox <> | Subject | PATCH: work around tosh keyboards |
| |
These produce double ups sometimes (Chris Heath)
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.6.0-test2/drivers/input/serio/i8042.c linux-2.6.0-test2-ac1/drivers/input/serio/i8042.c --- linux-2.6.0-test2/drivers/input/serio/i8042.c 2003-07-10 21:04:55.000000000 +0100 +++ linux-2.6.0-test2-ac1/drivers/input/serio/i8042.c 2003-07-23 15:37:45.000000000 +0100 @@ -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/
| |