mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
media: rc: XBox DVD Remote uses 12 bits scancodes
Sean Young figured out that the Xbox Remote sends 24 bits, the first 12 bits are repeated and inverted so only 12 bits are used. Turns out this is a modified nec protocol. For increased accuracy and compliance with the upstream, replace the historic 8 bit report values with the proper 12 bit values. Signed-off-by: Benjamin Valentin <benpicco@googlemail.com> Signed-off-by: Sean Young <sean@mess.org>
This commit is contained in:
parent
96642c2a08
commit
2fdbd8a3bd
@ -1,4 +1,4 @@
|
|||||||
From 3a0776f16df87fcb0f001d721deac5986ba6d52b Mon Sep 17 00:00:00 2001
|
From 4d331d301222dc0585ab8864a842b3e460b1f744 Mon Sep 17 00:00:00 2001
|
||||||
From: Benjamin Valentin <benpicco@googlemail.com>
|
From: Benjamin Valentin <benpicco@googlemail.com>
|
||||||
Date: Thu, 4 Oct 2018 02:57:10 +0200
|
Date: Thu, 4 Oct 2018 02:57:10 +0200
|
||||||
Subject: [PATCH] media: rc: add driver for Xbox DVD Movie Playback Kit
|
Subject: [PATCH] media: rc: add driver for Xbox DVD Movie Playback Kit
|
||||||
@ -14,14 +14,15 @@ This driver is heaviely based on the ati_remote driver where all the
|
|||||||
boilerplate was taken from - I was mostly just removing code.
|
boilerplate was taken from - I was mostly just removing code.
|
||||||
|
|
||||||
Signed-off-by: Benjamin Valentin <benpicco@googlemail.com>
|
Signed-off-by: Benjamin Valentin <benpicco@googlemail.com>
|
||||||
|
Signed-off-by: Sean Young <sean@mess.org>
|
||||||
---
|
---
|
||||||
drivers/media/rc/Kconfig | 12 +
|
drivers/media/rc/Kconfig | 12 +
|
||||||
drivers/media/rc/Makefile | 1 +
|
drivers/media/rc/Makefile | 1 +
|
||||||
drivers/media/rc/keymaps/Makefile | 1 +
|
drivers/media/rc/keymaps/Makefile | 1 +
|
||||||
drivers/media/rc/keymaps/rc-xbox-dvd.c | 63 +++++
|
drivers/media/rc/keymaps/rc-xbox-dvd.c | 63 +++++
|
||||||
drivers/media/rc/xbox_remote.c | 305 +++++++++++++++++++++++++
|
drivers/media/rc/xbox_remote.c | 306 +++++++++++++++++++++++++
|
||||||
include/media/rc-map.h | 1 +
|
include/media/rc-map.h | 1 +
|
||||||
6 files changed, 383 insertions(+)
|
6 files changed, 384 insertions(+)
|
||||||
create mode 100644 drivers/media/rc/keymaps/rc-xbox-dvd.c
|
create mode 100644 drivers/media/rc/keymaps/rc-xbox-dvd.c
|
||||||
create mode 100644 drivers/media/rc/xbox_remote.c
|
create mode 100644 drivers/media/rc/xbox_remote.c
|
||||||
|
|
||||||
@ -69,7 +70,7 @@ index d6b913a3032d..5b1399af6b3a 100644
|
|||||||
rc-zx-irdec.o
|
rc-zx-irdec.o
|
||||||
diff --git a/drivers/media/rc/keymaps/rc-xbox-dvd.c b/drivers/media/rc/keymaps/rc-xbox-dvd.c
|
diff --git a/drivers/media/rc/keymaps/rc-xbox-dvd.c b/drivers/media/rc/keymaps/rc-xbox-dvd.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 000000000000..61da6706715c
|
index 000000000000..af387244636b
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/media/rc/keymaps/rc-xbox-dvd.c
|
+++ b/drivers/media/rc/keymaps/rc-xbox-dvd.c
|
||||||
@@ -0,0 +1,63 @@
|
@@ -0,0 +1,63 @@
|
||||||
@ -82,35 +83,35 @@ index 000000000000..61da6706715c
|
|||||||
+
|
+
|
||||||
+/* based on lircd.conf.xbox */
|
+/* based on lircd.conf.xbox */
|
||||||
+static struct rc_map_table xbox_dvd[] = {
|
+static struct rc_map_table xbox_dvd[] = {
|
||||||
+ {0x0b, KEY_OK},
|
+ {0xa0b, KEY_OK},
|
||||||
+ {0xa6, KEY_UP},
|
+ {0xaa6, KEY_UP},
|
||||||
+ {0xa7, KEY_DOWN},
|
+ {0xaa7, KEY_DOWN},
|
||||||
+ {0xa8, KEY_RIGHT},
|
+ {0xaa8, KEY_RIGHT},
|
||||||
+ {0xa9, KEY_LEFT},
|
+ {0xaa9, KEY_LEFT},
|
||||||
+ {0xc3, KEY_INFO},
|
+ {0xac3, KEY_INFO},
|
||||||
+
|
+
|
||||||
+ {0xc6, KEY_9},
|
+ {0xac6, KEY_9},
|
||||||
+ {0xc7, KEY_8},
|
+ {0xac7, KEY_8},
|
||||||
+ {0xc8, KEY_7},
|
+ {0xac8, KEY_7},
|
||||||
+ {0xc9, KEY_6},
|
+ {0xac9, KEY_6},
|
||||||
+ {0xca, KEY_5},
|
+ {0xaca, KEY_5},
|
||||||
+ {0xcb, KEY_4},
|
+ {0xacb, KEY_4},
|
||||||
+ {0xcc, KEY_3},
|
+ {0xacc, KEY_3},
|
||||||
+ {0xcd, KEY_2},
|
+ {0xacd, KEY_2},
|
||||||
+ {0xce, KEY_1},
|
+ {0xace, KEY_1},
|
||||||
+ {0xcf, KEY_0},
|
+ {0xacf, KEY_0},
|
||||||
+
|
+
|
||||||
+ {0xd5, KEY_ANGLE},
|
+ {0xad5, KEY_ANGLE},
|
||||||
+ {0xd8, KEY_BACK},
|
+ {0xad8, KEY_BACK},
|
||||||
+ {0xdd, KEY_PREVIOUSSONG},
|
+ {0xadd, KEY_PREVIOUSSONG},
|
||||||
+ {0xdf, KEY_NEXTSONG},
|
+ {0xadf, KEY_NEXTSONG},
|
||||||
+ {0xe0, KEY_STOP},
|
+ {0xae0, KEY_STOP},
|
||||||
+ {0xe2, KEY_REWIND},
|
+ {0xae2, KEY_REWIND},
|
||||||
+ {0xe3, KEY_FASTFORWARD},
|
+ {0xae3, KEY_FASTFORWARD},
|
||||||
+ {0xe5, KEY_TITLE},
|
+ {0xae5, KEY_TITLE},
|
||||||
+ {0xe6, KEY_PAUSE},
|
+ {0xae6, KEY_PAUSE},
|
||||||
+ {0xea, KEY_PLAY},
|
+ {0xaea, KEY_PLAY},
|
||||||
+ {0xf7, KEY_MENU},
|
+ {0xaf7, KEY_MENU},
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+static struct rc_map_list xbox_dvd_map = {
|
+static struct rc_map_list xbox_dvd_map = {
|
||||||
@ -138,10 +139,10 @@ index 000000000000..61da6706715c
|
|||||||
+MODULE_LICENSE("GPL");
|
+MODULE_LICENSE("GPL");
|
||||||
diff --git a/drivers/media/rc/xbox_remote.c b/drivers/media/rc/xbox_remote.c
|
diff --git a/drivers/media/rc/xbox_remote.c b/drivers/media/rc/xbox_remote.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 000000000000..55fa4b4aed60
|
index 000000000000..07ed9be24a60
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/media/rc/xbox_remote.c
|
+++ b/drivers/media/rc/xbox_remote.c
|
||||||
@@ -0,0 +1,305 @@
|
@@ -0,0 +1,306 @@
|
||||||
+// SPDX-License-Identifier: GPL-2.0+
|
+// SPDX-License-Identifier: GPL-2.0+
|
||||||
+// Driver for Xbox DVD Movie Playback Kit
|
+// Driver for Xbox DVD Movie Playback Kit
|
||||||
+// Copyright (c) 2018 by Benjamin Valentin <benpicco@googlemail.com>
|
+// Copyright (c) 2018 by Benjamin Valentin <benpicco@googlemail.com>
|
||||||
@ -199,7 +200,7 @@ index 000000000000..55fa4b4aed60
|
|||||||
+ struct usb_interface *interface;
|
+ struct usb_interface *interface;
|
||||||
+
|
+
|
||||||
+ struct urb *irq_urb;
|
+ struct urb *irq_urb;
|
||||||
+ unsigned char inbuf[DATA_BUFSIZE];
|
+ unsigned char inbuf[DATA_BUFSIZE] __aligned(sizeof(u16));
|
||||||
+
|
+
|
||||||
+ char rc_name[NAME_BUFSIZE];
|
+ char rc_name[NAME_BUFSIZE];
|
||||||
+ char rc_phys[NAME_BUFSIZE];
|
+ char rc_phys[NAME_BUFSIZE];
|
||||||
@ -239,7 +240,7 @@ index 000000000000..55fa4b4aed60
|
|||||||
+ * data[0] = 0x00
|
+ * data[0] = 0x00
|
||||||
+ * data[1] = length - always 0x06
|
+ * data[1] = length - always 0x06
|
||||||
+ * data[2] = the key code
|
+ * 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[4] = last_press_ms (low)
|
||||||
+ * data[5] = last_press_ms (high)
|
+ * data[5] = last_press_ms (high)
|
||||||
+ */
|
+ */
|
||||||
@ -251,7 +252,8 @@ index 000000000000..55fa4b4aed60
|
|||||||
+ return;
|
+ 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);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+/*
|
+/*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
From 3a0776f16df87fcb0f001d721deac5986ba6d52b Mon Sep 17 00:00:00 2001
|
From 4d331d301222dc0585ab8864a842b3e460b1f744 Mon Sep 17 00:00:00 2001
|
||||||
From: Benjamin Valentin <benpicco@googlemail.com>
|
From: Benjamin Valentin <benpicco@googlemail.com>
|
||||||
Date: Thu, 4 Oct 2018 02:57:10 +0200
|
Date: Thu, 4 Oct 2018 02:57:10 +0200
|
||||||
Subject: [PATCH] media: rc: add driver for Xbox DVD Movie Playback Kit
|
Subject: [PATCH] media: rc: add driver for Xbox DVD Movie Playback Kit
|
||||||
@ -14,14 +14,15 @@ This driver is heaviely based on the ati_remote driver where all the
|
|||||||
boilerplate was taken from - I was mostly just removing code.
|
boilerplate was taken from - I was mostly just removing code.
|
||||||
|
|
||||||
Signed-off-by: Benjamin Valentin <benpicco@googlemail.com>
|
Signed-off-by: Benjamin Valentin <benpicco@googlemail.com>
|
||||||
|
Signed-off-by: Sean Young <sean@mess.org>
|
||||||
---
|
---
|
||||||
drivers/media/rc/Kconfig | 12 +
|
drivers/media/rc/Kconfig | 12 +
|
||||||
drivers/media/rc/Makefile | 1 +
|
drivers/media/rc/Makefile | 1 +
|
||||||
drivers/media/rc/keymaps/Makefile | 1 +
|
drivers/media/rc/keymaps/Makefile | 1 +
|
||||||
drivers/media/rc/keymaps/rc-xbox-dvd.c | 63 +++++
|
drivers/media/rc/keymaps/rc-xbox-dvd.c | 63 +++++
|
||||||
drivers/media/rc/xbox_remote.c | 305 +++++++++++++++++++++++++
|
drivers/media/rc/xbox_remote.c | 306 +++++++++++++++++++++++++
|
||||||
include/media/rc-map.h | 1 +
|
include/media/rc-map.h | 1 +
|
||||||
6 files changed, 383 insertions(+)
|
6 files changed, 384 insertions(+)
|
||||||
create mode 100644 drivers/media/rc/keymaps/rc-xbox-dvd.c
|
create mode 100644 drivers/media/rc/keymaps/rc-xbox-dvd.c
|
||||||
create mode 100644 drivers/media/rc/xbox_remote.c
|
create mode 100644 drivers/media/rc/xbox_remote.c
|
||||||
|
|
||||||
@ -69,7 +70,7 @@ index d6b913a3032d..5b1399af6b3a 100644
|
|||||||
rc-zx-irdec.o
|
rc-zx-irdec.o
|
||||||
diff --git a/drivers/media/rc/keymaps/rc-xbox-dvd.c b/drivers/media/rc/keymaps/rc-xbox-dvd.c
|
diff --git a/drivers/media/rc/keymaps/rc-xbox-dvd.c b/drivers/media/rc/keymaps/rc-xbox-dvd.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 000000000000..61da6706715c
|
index 000000000000..af387244636b
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/media/rc/keymaps/rc-xbox-dvd.c
|
+++ b/drivers/media/rc/keymaps/rc-xbox-dvd.c
|
||||||
@@ -0,0 +1,63 @@
|
@@ -0,0 +1,63 @@
|
||||||
@ -82,35 +83,35 @@ index 000000000000..61da6706715c
|
|||||||
+
|
+
|
||||||
+/* based on lircd.conf.xbox */
|
+/* based on lircd.conf.xbox */
|
||||||
+static struct rc_map_table xbox_dvd[] = {
|
+static struct rc_map_table xbox_dvd[] = {
|
||||||
+ {0x0b, KEY_OK},
|
+ {0xa0b, KEY_OK},
|
||||||
+ {0xa6, KEY_UP},
|
+ {0xaa6, KEY_UP},
|
||||||
+ {0xa7, KEY_DOWN},
|
+ {0xaa7, KEY_DOWN},
|
||||||
+ {0xa8, KEY_RIGHT},
|
+ {0xaa8, KEY_RIGHT},
|
||||||
+ {0xa9, KEY_LEFT},
|
+ {0xaa9, KEY_LEFT},
|
||||||
+ {0xc3, KEY_INFO},
|
+ {0xac3, KEY_INFO},
|
||||||
+
|
+
|
||||||
+ {0xc6, KEY_9},
|
+ {0xac6, KEY_9},
|
||||||
+ {0xc7, KEY_8},
|
+ {0xac7, KEY_8},
|
||||||
+ {0xc8, KEY_7},
|
+ {0xac8, KEY_7},
|
||||||
+ {0xc9, KEY_6},
|
+ {0xac9, KEY_6},
|
||||||
+ {0xca, KEY_5},
|
+ {0xaca, KEY_5},
|
||||||
+ {0xcb, KEY_4},
|
+ {0xacb, KEY_4},
|
||||||
+ {0xcc, KEY_3},
|
+ {0xacc, KEY_3},
|
||||||
+ {0xcd, KEY_2},
|
+ {0xacd, KEY_2},
|
||||||
+ {0xce, KEY_1},
|
+ {0xace, KEY_1},
|
||||||
+ {0xcf, KEY_0},
|
+ {0xacf, KEY_0},
|
||||||
+
|
+
|
||||||
+ {0xd5, KEY_ANGLE},
|
+ {0xad5, KEY_ANGLE},
|
||||||
+ {0xd8, KEY_BACK},
|
+ {0xad8, KEY_BACK},
|
||||||
+ {0xdd, KEY_PREVIOUSSONG},
|
+ {0xadd, KEY_PREVIOUSSONG},
|
||||||
+ {0xdf, KEY_NEXTSONG},
|
+ {0xadf, KEY_NEXTSONG},
|
||||||
+ {0xe0, KEY_STOP},
|
+ {0xae0, KEY_STOP},
|
||||||
+ {0xe2, KEY_REWIND},
|
+ {0xae2, KEY_REWIND},
|
||||||
+ {0xe3, KEY_FASTFORWARD},
|
+ {0xae3, KEY_FASTFORWARD},
|
||||||
+ {0xe5, KEY_TITLE},
|
+ {0xae5, KEY_TITLE},
|
||||||
+ {0xe6, KEY_PAUSE},
|
+ {0xae6, KEY_PAUSE},
|
||||||
+ {0xea, KEY_PLAY},
|
+ {0xaea, KEY_PLAY},
|
||||||
+ {0xf7, KEY_MENU},
|
+ {0xaf7, KEY_MENU},
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+static struct rc_map_list xbox_dvd_map = {
|
+static struct rc_map_list xbox_dvd_map = {
|
||||||
@ -138,10 +139,10 @@ index 000000000000..61da6706715c
|
|||||||
+MODULE_LICENSE("GPL");
|
+MODULE_LICENSE("GPL");
|
||||||
diff --git a/drivers/media/rc/xbox_remote.c b/drivers/media/rc/xbox_remote.c
|
diff --git a/drivers/media/rc/xbox_remote.c b/drivers/media/rc/xbox_remote.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 000000000000..55fa4b4aed60
|
index 000000000000..07ed9be24a60
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/media/rc/xbox_remote.c
|
+++ b/drivers/media/rc/xbox_remote.c
|
||||||
@@ -0,0 +1,305 @@
|
@@ -0,0 +1,306 @@
|
||||||
+// SPDX-License-Identifier: GPL-2.0+
|
+// SPDX-License-Identifier: GPL-2.0+
|
||||||
+// Driver for Xbox DVD Movie Playback Kit
|
+// Driver for Xbox DVD Movie Playback Kit
|
||||||
+// Copyright (c) 2018 by Benjamin Valentin <benpicco@googlemail.com>
|
+// Copyright (c) 2018 by Benjamin Valentin <benpicco@googlemail.com>
|
||||||
@ -199,7 +200,7 @@ index 000000000000..55fa4b4aed60
|
|||||||
+ struct usb_interface *interface;
|
+ struct usb_interface *interface;
|
||||||
+
|
+
|
||||||
+ struct urb *irq_urb;
|
+ struct urb *irq_urb;
|
||||||
+ unsigned char inbuf[DATA_BUFSIZE];
|
+ unsigned char inbuf[DATA_BUFSIZE] __aligned(sizeof(u16));
|
||||||
+
|
+
|
||||||
+ char rc_name[NAME_BUFSIZE];
|
+ char rc_name[NAME_BUFSIZE];
|
||||||
+ char rc_phys[NAME_BUFSIZE];
|
+ char rc_phys[NAME_BUFSIZE];
|
||||||
@ -239,7 +240,7 @@ index 000000000000..55fa4b4aed60
|
|||||||
+ * data[0] = 0x00
|
+ * data[0] = 0x00
|
||||||
+ * data[1] = length - always 0x06
|
+ * data[1] = length - always 0x06
|
||||||
+ * data[2] = the key code
|
+ * 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[4] = last_press_ms (low)
|
||||||
+ * data[5] = last_press_ms (high)
|
+ * data[5] = last_press_ms (high)
|
||||||
+ */
|
+ */
|
||||||
@ -251,7 +252,8 @@ index 000000000000..55fa4b4aed60
|
|||||||
+ return;
|
+ 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);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+/*
|
+/*
|
||||||
|
@ -1,28 +1,28 @@
|
|||||||
# table xbox_dvd, type: unknown
|
# table xbox_dvd, type: unknown
|
||||||
0x0b KEY_OK
|
0xa0b KEY_OK
|
||||||
0xa6 KEY_UP
|
0xaa6 KEY_UP
|
||||||
0xa7 KEY_DOWN
|
0xaa7 KEY_DOWN
|
||||||
0xa8 KEY_RIGHT
|
0xaa8 KEY_RIGHT
|
||||||
0xa9 KEY_LEFT
|
0xaa9 KEY_LEFT
|
||||||
0xc3 KEY_INFO
|
0xac3 KEY_INFO
|
||||||
0xc6 KEY_9
|
0xac6 KEY_9
|
||||||
0xc7 KEY_8
|
0xac7 KEY_8
|
||||||
0xc8 KEY_7
|
0xac8 KEY_7
|
||||||
0xc9 KEY_6
|
0xac9 KEY_6
|
||||||
0xca KEY_5
|
0xaca KEY_5
|
||||||
0xcb KEY_4
|
0xacb KEY_4
|
||||||
0xcc KEY_3
|
0xacc KEY_3
|
||||||
0xcd KEY_2
|
0xacd KEY_2
|
||||||
0xce KEY_1
|
0xace KEY_1
|
||||||
0xcf KEY_0
|
0xacf KEY_0
|
||||||
0xd5 KEY_ANGLE
|
0xad5 KEY_ANGLE
|
||||||
0xd8 KEY_BACK
|
0xad8 KEY_BACK
|
||||||
0xdd KEY_PREVIOUSSONG
|
0xadd KEY_PREVIOUSSONG
|
||||||
0xdf KEY_NEXTSONG
|
0xadf KEY_NEXTSONG
|
||||||
0xe0 KEY_STOP
|
0xae0 KEY_STOP
|
||||||
0xe2 KEY_REWIND
|
0xae2 KEY_REWIND
|
||||||
0xe3 KEY_FASTFORWARD
|
0xae3 KEY_FASTFORWARD
|
||||||
0xe5 KEY_TITLE
|
0xae5 KEY_TITLE
|
||||||
0xe6 KEY_PAUSE
|
0xae6 KEY_PAUSE
|
||||||
0xea KEY_PLAY
|
0xaea KEY_PLAY
|
||||||
0xf7 KEY_MENU
|
0xaf7 KEY_MENU
|
||||||
|
Loading…
x
Reference in New Issue
Block a user