Explorar o código

V4L/DVB (12600): dvb-usb-remote: return KEY_RESERVED if there's free space for new keys

The input subsystem checks if get_keycode works for a scan code. Due to that,
we need to return a valid value when there's some space at the table that
can be used by a scancode.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Mauro Carvalho Chehab %!s(int64=16) %!d(string=hai) anos
pai
achega
a4c1cbc781
Modificáronse 1 ficheiros con 13 adicións e 0 borrados
  1. 13 0
      drivers/media/dvb/dvb-usb/dvb-usb-remote.c

+ 13 - 0
drivers/media/dvb/dvb-usb/dvb-usb-remote.c

@@ -22,6 +22,19 @@ static int dvb_usb_getkeycode(struct input_dev *dev,
 			*keycode = keymap[i].event;
 			return 0;
 		}
+
+	/*
+	 * If is there extra space, returns KEY_RESERVED,
+	 * otherwise, input core won't let dvb_usb_setkeycode
+	 * to work
+	 */
+	for (i = 0; i < d->props.rc_key_map_size; i++)
+		if (keymap[i].event == KEY_RESERVED ||
+		    keymap[i].event == KEY_UNKNOWN) {
+			*keycode = KEY_RESERVED;
+			return 0;
+		}
+
 	return -EINVAL;
 }