Commit fec225a0 authored by Sean Young's avatar Sean Young Committed by Mauro Carvalho Chehab

media: rc: some events are dropped by userspace

libevdev (which is used by libinput) gets a list of keycodes from the
input device on creation. Any events with keycodes which are not in this
list are silently dropped. So, set all keycodes on device creation since
we do not know which will be used if the keymap changes.
Signed-off-by: default avatarSean Young <sean@mess.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent be9c03e4
...@@ -274,7 +274,6 @@ static unsigned int ir_update_mapping(struct rc_dev *dev, ...@@ -274,7 +274,6 @@ static unsigned int ir_update_mapping(struct rc_dev *dev,
unsigned int new_keycode) unsigned int new_keycode)
{ {
int old_keycode = rc_map->scan[index].keycode; int old_keycode = rc_map->scan[index].keycode;
int i;
/* Did the user wish to remove the mapping? */ /* Did the user wish to remove the mapping? */
if (new_keycode == KEY_RESERVED || new_keycode == KEY_UNKNOWN) { if (new_keycode == KEY_RESERVED || new_keycode == KEY_UNKNOWN) {
...@@ -289,20 +288,9 @@ static unsigned int ir_update_mapping(struct rc_dev *dev, ...@@ -289,20 +288,9 @@ static unsigned int ir_update_mapping(struct rc_dev *dev,
old_keycode == KEY_RESERVED ? "New" : "Replacing", old_keycode == KEY_RESERVED ? "New" : "Replacing",
rc_map->scan[index].scancode, new_keycode); rc_map->scan[index].scancode, new_keycode);
rc_map->scan[index].keycode = new_keycode; rc_map->scan[index].keycode = new_keycode;
__set_bit(new_keycode, dev->input_dev->keybit);
} }
if (old_keycode != KEY_RESERVED) { if (old_keycode != KEY_RESERVED) {
/* A previous mapping was updated... */
__clear_bit(old_keycode, dev->input_dev->keybit);
/* ... but another scancode might use the same keycode */
for (i = 0; i < rc_map->len; i++) {
if (rc_map->scan[i].keycode == old_keycode) {
__set_bit(old_keycode, dev->input_dev->keybit);
break;
}
}
/* Possibly shrink the keytable, failure is not a problem */ /* Possibly shrink the keytable, failure is not a problem */
ir_resize_table(dev, rc_map, GFP_ATOMIC); ir_resize_table(dev, rc_map, GFP_ATOMIC);
} }
...@@ -1759,6 +1747,8 @@ static int rc_prepare_rx_device(struct rc_dev *dev) ...@@ -1759,6 +1747,8 @@ static int rc_prepare_rx_device(struct rc_dev *dev)
set_bit(EV_REP, dev->input_dev->evbit); set_bit(EV_REP, dev->input_dev->evbit);
set_bit(EV_MSC, dev->input_dev->evbit); set_bit(EV_MSC, dev->input_dev->evbit);
set_bit(MSC_SCAN, dev->input_dev->mscbit); set_bit(MSC_SCAN, dev->input_dev->mscbit);
bitmap_fill(dev->input_dev->keybit, KEY_CNT);
if (dev->open) if (dev->open)
dev->input_dev->open = ir_open; dev->input_dev->open = ir_open;
if (dev->close) if (dev->close)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment