diff options
| -rw-r--r-- | drivers/media/rc/rc-main.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c index 72be8a02118c..512a2f4ada0e 100644 --- a/drivers/media/rc/rc-main.c +++ b/drivers/media/rc/rc-main.c | |||
| @@ -458,21 +458,27 @@ static int ir_getkeycode(struct input_dev *idev, | |||
| 458 | index = ir_lookup_by_scancode(rc_map, scancode); | 458 | index = ir_lookup_by_scancode(rc_map, scancode); |
| 459 | } | 459 | } |
| 460 | 460 | ||
| 461 | if (index >= rc_map->len) { | 461 | if (index < rc_map->len) { |
| 462 | if (!(ke->flags & INPUT_KEYMAP_BY_INDEX)) | 462 | entry = &rc_map->scan[index]; |
| 463 | IR_dprintk(1, "unknown key for scancode 0x%04x\n", | 463 | |
| 464 | scancode); | 464 | ke->index = index; |
| 465 | ke->keycode = entry->keycode; | ||
| 466 | ke->len = sizeof(entry->scancode); | ||
| 467 | memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode)); | ||
| 468 | |||
| 469 | } else if (!(ke->flags & INPUT_KEYMAP_BY_INDEX)) { | ||
| 470 | /* | ||
| 471 | * We do not really know the valid range of scancodes | ||
| 472 | * so let's respond with KEY_RESERVED to anything we | ||
| 473 | * do not have mapping for [yet]. | ||
| 474 | */ | ||
| 475 | ke->index = index; | ||
| 476 | ke->keycode = KEY_RESERVED; | ||
| 477 | } else { | ||
| 465 | retval = -EINVAL; | 478 | retval = -EINVAL; |
| 466 | goto out; | 479 | goto out; |
| 467 | } | 480 | } |
| 468 | 481 | ||
| 469 | entry = &rc_map->scan[index]; | ||
| 470 | |||
| 471 | ke->index = index; | ||
| 472 | ke->keycode = entry->keycode; | ||
| 473 | ke->len = sizeof(entry->scancode); | ||
| 474 | memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode)); | ||
| 475 | |||
| 476 | retval = 0; | 482 | retval = 0; |
| 477 | 483 | ||
| 478 | out: | 484 | out: |
