|
@@ -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 (!(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;
|
|
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:
|