diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-01-29 23:17:52 -0800 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-01-29 23:43:21 -0800 |
commit | e7b5c1ef4d87426da0b689a0a4fa67edda02ea5c (patch) | |
tree | 937c51ff46caa827092da1389e344fbfaeb90481 /drivers/input/input.c | |
parent | b0ee0d3eb31a163c958f2960906c44bcdfdc607b (diff) |
Input: stop autorepeat timer on key release
Whenever you press and then release a key, the CPU wakes up
three times:
* press
* release
* autorepeat timer exactly 250ms after press
The autorepeat timer has nothing to do, obviously, since you already
have released the key, so stop it on key release.
[dtor@mail.ru: This changes autorepeat behavior a bit since we now stop
autorepeat even if key that is being released is not the one that is
being auto-repeated, but I believe the new behavior is better.]
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input/input.c')
-rw-r--r-- | drivers/input/input.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c index 1730d7331a5d..46e9ce195064 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -132,6 +132,11 @@ static void input_start_autorepeat(struct input_dev *dev, int code) } } +static void input_stop_autorepeat(struct input_dev *dev) +{ + del_timer(&dev->timer); +} + #define INPUT_IGNORE_EVENT 0 #define INPUT_PASS_TO_HANDLERS 1 #define INPUT_PASS_TO_DEVICE 2 @@ -167,6 +172,8 @@ static void input_handle_event(struct input_dev *dev, __change_bit(code, dev->key); if (value) input_start_autorepeat(dev, code); + else + input_stop_autorepeat(dev); } disposition = INPUT_PASS_TO_HANDLERS; |