forked from Minki/linux
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:
parent
1ca05b7fc2
commit
54e74b87e2
@ -458,21 +458,27 @@ static int ir_getkeycode(struct input_dev *idev,
|
|||||||
index = ir_lookup_by_scancode(rc_map, scancode);
|
index = ir_lookup_by_scancode(rc_map, scancode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index >= rc_map->len) {
|
if (index < rc_map->len) {
|
||||||
if (!(ke->flags & INPUT_KEYMAP_BY_INDEX))
|
entry = &rc_map->scan[index];
|
||||||
IR_dprintk(1, "unknown key for scancode 0x%04x\n",
|
|
||||||
scancode);
|
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;
|
retval = -EINVAL;
|
||||||
goto out;
|
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;
|
retval = 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
Loading…
Reference in New Issue
Block a user