Input: rc-keymap - return KEY_RESERVED for unknown mappings
Do not respond with -EINVAL to EVIOCGKEYCODE for not-yet-mapped scancodes, but rather return KEY_RESERVED. This fixes breakage with Ubuntu's input-kbd utility that stopped returning full keymaps for remote controls. Tested-by: Mauro Carvalho Chehab <mchehab@redhat.com> Tested-by: Mark Lord <kernel@teksavvy.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
1ca05b7fc2
Коммит
54e74b87e2
|
@ -458,21 +458,27 @@ static int ir_getkeycode(struct input_dev *idev,
|
|||
index = ir_lookup_by_scancode(rc_map, scancode);
|
||||
}
|
||||
|
||||
if (index >= rc_map->len) {
|
||||
if (!(ke->flags & INPUT_KEYMAP_BY_INDEX))
|
||||
IR_dprintk(1, "unknown key for scancode 0x%04x\n",
|
||||
scancode);
|
||||
if (index < rc_map->len) {
|
||||
entry = &rc_map->scan[index];
|
||||
|
||||
ke->index = index;
|
||||
ke->keycode = entry->keycode;
|
||||
ke->len = sizeof(entry->scancode);
|
||||
memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode));
|
||||
|
||||
} else if (!(ke->flags & INPUT_KEYMAP_BY_INDEX)) {
|
||||
/*
|
||||
* We do not really know the valid range of scancodes
|
||||
* so let's respond with KEY_RESERVED to anything we
|
||||
* do not have mapping for [yet].
|
||||
*/
|
||||
ke->index = index;
|
||||
ke->keycode = KEY_RESERVED;
|
||||
} else {
|
||||
retval = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
entry = &rc_map->scan[index];
|
||||
|
||||
ke->index = index;
|
||||
ke->keycode = entry->keycode;
|
||||
ke->len = sizeof(entry->scancode);
|
||||
memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode));
|
||||
|
||||
retval = 0;
|
||||
|
||||
out:
|
||||
|
|
Загрузка…
Ссылка в новой задаче