Tested-by: Benjamin Valentin <benpicco@xxxxxxxxxxxxxx> On Thu, 18 Oct 2018 12:27:17 +0100 Sean Young <sean@xxxxxxxx> wrote: > The xbox dvd remote sends 24 bits, the first 12 bits are repeated > and inverted so only 12 bits are used. The upper 4 bits can be read > at offset 3. Ensure we pass this to rc-core and update the keymap > accordingly. > > Signed-off-by: Sean Young <sean@xxxxxxxx> > --- > drivers/media/rc/keymaps/rc-xbox-dvd.c | 58 > +++++++++++++------------- drivers/media/rc/xbox_remote.c | > 7 ++-- 2 files changed, 33 insertions(+), 32 deletions(-) > > diff --git a/drivers/media/rc/keymaps/rc-xbox-dvd.c > b/drivers/media/rc/keymaps/rc-xbox-dvd.c index > 61da6706715c..af387244636b 100644 --- > a/drivers/media/rc/keymaps/rc-xbox-dvd.c +++ > b/drivers/media/rc/keymaps/rc-xbox-dvd.c @@ -7,35 +7,35 @@ > > /* based on lircd.conf.xbox */ > static struct rc_map_table xbox_dvd[] = { > - {0x0b, KEY_OK}, > - {0xa6, KEY_UP}, > - {0xa7, KEY_DOWN}, > - {0xa8, KEY_RIGHT}, > - {0xa9, KEY_LEFT}, > - {0xc3, KEY_INFO}, > - > - {0xc6, KEY_9}, > - {0xc7, KEY_8}, > - {0xc8, KEY_7}, > - {0xc9, KEY_6}, > - {0xca, KEY_5}, > - {0xcb, KEY_4}, > - {0xcc, KEY_3}, > - {0xcd, KEY_2}, > - {0xce, KEY_1}, > - {0xcf, KEY_0}, > - > - {0xd5, KEY_ANGLE}, > - {0xd8, KEY_BACK}, > - {0xdd, KEY_PREVIOUSSONG}, > - {0xdf, KEY_NEXTSONG}, > - {0xe0, KEY_STOP}, > - {0xe2, KEY_REWIND}, > - {0xe3, KEY_FASTFORWARD}, > - {0xe5, KEY_TITLE}, > - {0xe6, KEY_PAUSE}, > - {0xea, KEY_PLAY}, > - {0xf7, KEY_MENU}, > + {0xa0b, KEY_OK}, > + {0xaa6, KEY_UP}, > + {0xaa7, KEY_DOWN}, > + {0xaa8, KEY_RIGHT}, > + {0xaa9, KEY_LEFT}, > + {0xac3, KEY_INFO}, > + > + {0xac6, KEY_9}, > + {0xac7, KEY_8}, > + {0xac8, KEY_7}, > + {0xac9, KEY_6}, > + {0xaca, KEY_5}, > + {0xacb, KEY_4}, > + {0xacc, KEY_3}, > + {0xacd, KEY_2}, > + {0xace, KEY_1}, > + {0xacf, KEY_0}, > + > + {0xad5, KEY_ANGLE}, > + {0xad8, KEY_BACK}, > + {0xadd, KEY_PREVIOUSSONG}, > + {0xadf, KEY_NEXTSONG}, > + {0xae0, KEY_STOP}, > + {0xae2, KEY_REWIND}, > + {0xae3, KEY_FASTFORWARD}, > + {0xae5, KEY_TITLE}, > + {0xae6, KEY_PAUSE}, > + {0xaea, KEY_PLAY}, > + {0xaf7, KEY_MENU}, > }; > > static struct rc_map_list xbox_dvd_map = { > diff --git a/drivers/media/rc/xbox_remote.c > b/drivers/media/rc/xbox_remote.c index 141ef9253018..4d41e31369d2 > 100644 --- a/drivers/media/rc/xbox_remote.c > +++ b/drivers/media/rc/xbox_remote.c > @@ -55,7 +55,7 @@ struct xbox_remote { > struct usb_interface *interface; > > struct urb *irq_urb; > - unsigned char inbuf[DATA_BUFSIZE]; > + unsigned char inbuf[DATA_BUFSIZE] __aligned(sizeof(u16)); > > char rc_name[NAME_BUFSIZE]; > char rc_phys[NAME_BUFSIZE]; > @@ -95,7 +95,7 @@ static void xbox_remote_input_report(struct urb > *urb) > * data[0] = 0x00 > * data[1] = length - always 0x06 > * data[2] = the key code > - * data[3] = high part of key code? - always 0x0a > + * data[3] = high part of key code > * data[4] = last_press_ms (low) > * data[5] = last_press_ms (high) > */ > @@ -107,7 +107,8 @@ static void xbox_remote_input_report(struct urb > *urb) return; > } > > - rc_keydown(xbox_remote->rdev, RC_PROTO_UNKNOWN, data[2], 0); > + rc_keydown(xbox_remote->rdev, RC_PROTO_UNKNOWN, > + le16_to_cpup((__le16*)(data + 2)), 0); > } > > /*