From: Dmitry Torokhov correctly perform PS/2 (mousedev) emulation for touchpads generating absolute events (do not stop with the first client) drivers/input/mousedev.c | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-) diff -puN drivers/input/mousedev.c~input-mousedev-ps2-emulation-fix drivers/input/mousedev.c --- 25/drivers/input/mousedev.c~input-mousedev-ps2-emulation-fix 2003-12-25 01:40:22.000000000 -0800 +++ 25-akpm/drivers/input/mousedev.c 2003-12-25 01:40:22.000000000 -0800 @@ -148,14 +148,16 @@ static void mousedev_event(struct input_ break; case EV_KEY: + if (code == BTN_TOUCH && test_bit(BTN_TOOL_FINGER, handle->dev->keybit)) { + /* Handle touchpad data */ + list->touch = value; + if (!list->touch) + list->pkt_count = 0; + break; + } + switch (code) { - case BTN_TOUCH: /* Handle touchpad data */ - if (test_bit(BTN_TOOL_FINGER, handle->dev->keybit)) { - list->touch = value; - if (!list->touch) - list->pkt_count = 0; - return; - } + case BTN_TOUCH: case BTN_0: case BTN_FORWARD: case BTN_LEFT: index = 0; break; _