diff options
| author | Shreyas Narayan <shrena@codeaurora.org> | 2020-09-14 17:13:33 +0530 |
|---|---|---|
| committer | Shreyas Narayan <shrena@codeaurora.org> | 2020-09-14 17:15:00 +0530 |
| commit | db4c33c3dd0f75e698d0f924bf95e9817d6965a6 (patch) | |
| tree | 5f6e5a494afcd5a50e4186f4b7590541c1603f8f /drivers/input/input.c | |
| parent | bd9d4a22f03f5170047c381f0ec94ee2d48cd4e2 (diff) | |
| parent | 353b81f1fbec379322908cec16dcb7f6b3167fb6 (diff) | |
Merge commit '353b81f1fbec379322908cec16dcb7f6b3167fb6' into HEAD
Change-Id: Iafd90cd872113e0aaceb66ff7bae9607dd073428
Signed-off-by: Shreyas Narayan <shrena@codeaurora.org>
Diffstat (limited to 'drivers/input/input.c')
| -rw-r--r-- | drivers/input/input.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c index baaddd168804..857917086cb0 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -851,16 +851,18 @@ static int input_default_setkeycode(struct input_dev *dev, } } - __clear_bit(*old_keycode, dev->keybit); - __set_bit(ke->keycode, dev->keybit); - - for (i = 0; i < dev->keycodemax; i++) { - if (input_fetch_keycode(dev, i) == *old_keycode) { - __set_bit(*old_keycode, dev->keybit); - break; /* Setting the bit twice is useless, so break */ + if (*old_keycode <= KEY_MAX) { + __clear_bit(*old_keycode, dev->keybit); + for (i = 0; i < dev->keycodemax; i++) { + if (input_fetch_keycode(dev, i) == *old_keycode) { + __set_bit(*old_keycode, dev->keybit); + /* Setting the bit twice is useless, so break */ + break; + } } } + __set_bit(ke->keycode, dev->keybit); return 0; } @@ -916,9 +918,13 @@ int input_set_keycode(struct input_dev *dev, * Simulate keyup event if keycode is not present * in the keymap anymore */ - if (test_bit(EV_KEY, dev->evbit) && - !is_event_supported(old_keycode, dev->keybit, KEY_MAX) && - __test_and_clear_bit(old_keycode, dev->key)) { + if (old_keycode > KEY_MAX) { + dev_warn(dev->dev.parent ?: &dev->dev, + "%s: got too big old keycode %#x\n", + __func__, old_keycode); + } else if (test_bit(EV_KEY, dev->evbit) && + !is_event_supported(old_keycode, dev->keybit, KEY_MAX) && + __test_and_clear_bit(old_keycode, dev->key)) { struct input_value vals[] = { { EV_KEY, old_keycode, 0 }, input_value_sync |
