From 2068bea9ef21531754defc6e7e03da64c4aa6fe7 Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Fri, 10 Aug 2012 21:39:38 +0200 Subject: [PATCH] --- yaml --- r: 323413 b: refs/heads/master c: 0672120a2ee7c533dfec6db7c3e43450f439e5ff h: refs/heads/master i: 323411: 86b7a99a34c88e8f01ced305cf652cbeaf38c959 v: v3 --- [refs] | 2 +- trunk/drivers/input/input.c | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 02f1f570dd0c..c8c757860cc5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7c75bf99271139ca7cb2d0cca3be11f1f7c59efd +refs/heads/master: 0672120a2ee7c533dfec6db7c3e43450f439e5ff diff --git a/trunk/drivers/input/input.c b/trunk/drivers/input/input.c index fb3a2c112deb..f075fbbfb1e7 100644 --- a/trunk/drivers/input/input.c +++ b/trunk/drivers/input/input.c @@ -240,24 +240,30 @@ static void input_handle_event(struct input_dev *dev, break; case EV_KEY: - if (is_event_supported(code, dev->keybit, KEY_MAX) && - !!test_bit(code, dev->key) != value) { + if (is_event_supported(code, dev->keybit, KEY_MAX)) { + + /* auto-repeat bypasses state updates */ + if (value == 2) { + disposition = INPUT_PASS_TO_HANDLERS; + break; + } + + if (!!test_bit(code, dev->key) != !!value) { - if (value != 2) { __change_bit(code, dev->key); + disposition = INPUT_PASS_TO_HANDLERS; + if (value) input_start_autorepeat(dev, code); else input_stop_autorepeat(dev); } - - disposition = INPUT_PASS_TO_HANDLERS; } break; case EV_SW: if (is_event_supported(code, dev->swbit, SW_MAX) && - !!test_bit(code, dev->sw) != value) { + !!test_bit(code, dev->sw) != !!value) { __change_bit(code, dev->sw); disposition = INPUT_PASS_TO_HANDLERS; @@ -284,7 +290,7 @@ static void input_handle_event(struct input_dev *dev, case EV_LED: if (is_event_supported(code, dev->ledbit, LED_MAX) && - !!test_bit(code, dev->led) != value) { + !!test_bit(code, dev->led) != !!value) { __change_bit(code, dev->led); disposition = INPUT_PASS_TO_ALL;