-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3379 from HiassofT/le10-xbox-dvd
[le10] improve Xbox DVD remote response
- Loading branch information
Showing
10 changed files
with
1,400 additions
and
1 deletion.
There are no files selected for viewing
506 changes: 506 additions & 0 deletions
506
packages/linux/patches/default/linux-903-backport-rcmm-ir-decoder.patch
Large diffs are not rendered by default.
Oops, something went wrong.
158 changes: 158 additions & 0 deletions
158
packages/linux/patches/default/linux-904-improve-xbox-dvd-remote-performance.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
From 55096db50d8cdbf777c67f672b493ef565a12c38 Mon Sep 17 00:00:00 2001 | ||
From: Matthias Reichl <hias@horus.com> | ||
Date: Fri, 22 Mar 2019 12:26:17 +0100 | ||
Subject: [PATCH] media: rc: xbox_remote: add protocol and set timeout | ||
|
||
The timestamps in ir-keytable -t output showed that the Xbox DVD | ||
IR dongle decodes scancodes every 64ms. The last scancode of a | ||
longer button press is decodes 64ms after the last-but-one which | ||
indicates the decoder doesn't use a timeout but decodes on the last | ||
edge of the signal. | ||
|
||
267.042629: lirc protocol(unknown): scancode = 0xace | ||
267.042665: event type EV_MSC(0x04): scancode = 0xace | ||
267.042665: event type EV_KEY(0x01) key_down: KEY_1(0x0002) | ||
267.042665: event type EV_SYN(0x00). | ||
267.106625: lirc protocol(unknown): scancode = 0xace | ||
267.106643: event type EV_MSC(0x04): scancode = 0xace | ||
267.106643: event type EV_SYN(0x00). | ||
267.170623: lirc protocol(unknown): scancode = 0xace | ||
267.170638: event type EV_MSC(0x04): scancode = 0xace | ||
267.170638: event type EV_SYN(0x00). | ||
267.234621: lirc protocol(unknown): scancode = 0xace | ||
267.234636: event type EV_MSC(0x04): scancode = 0xace | ||
267.234636: event type EV_SYN(0x00). | ||
267.298623: lirc protocol(unknown): scancode = 0xace | ||
267.298638: event type EV_MSC(0x04): scancode = 0xace | ||
267.298638: event type EV_SYN(0x00). | ||
267.543345: event type EV_KEY(0x01) key_down: KEY_1(0x0002) | ||
267.543345: event type EV_SYN(0x00). | ||
267.570015: event type EV_KEY(0x01) key_up: KEY_1(0x0002) | ||
267.570015: event type EV_SYN(0x00). | ||
|
||
Add a protocol with the repeat value and set the timeout in the | ||
driver to 10ms (to have a bit of headroom for delays) so the Xbox | ||
DVD remote performs more responsive. | ||
|
||
Signed-off-by: Matthias Reichl <hias@horus.com> | ||
--- | ||
Documentation/media/lirc.h.rst.exceptions | 1 + | ||
drivers/media/rc/keymaps/rc-xbox-dvd.c | 2 +- | ||
drivers/media/rc/rc-main.c | 2 ++ | ||
drivers/media/rc/xbox_remote.c | 4 +++- | ||
include/media/rc-map.h | 4 +++- | ||
include/uapi/linux/lirc.h | 2 ++ | ||
6 files changed, 12 insertions(+), 3 deletions(-) | ||
|
||
diff --git a/Documentation/media/lirc.h.rst.exceptions b/Documentation/media/lirc.h.rst.exceptions | ||
index e7a41d4b3d46..f8b5f1a32b7d 100644 | ||
--- a/Documentation/media/lirc.h.rst.exceptions | ||
+++ b/Documentation/media/lirc.h.rst.exceptions | ||
@@ -61,6 +61,7 @@ ignore symbol RC_PROTO_IMON | ||
ignore symbol RC_PROTO_RCMM12 | ||
ignore symbol RC_PROTO_RCMM24 | ||
ignore symbol RC_PROTO_RCMM32 | ||
+ignore symbol RC_PROTO_XBOX_DVD | ||
|
||
# Undocumented macros | ||
|
||
diff --git a/drivers/media/rc/keymaps/rc-xbox-dvd.c b/drivers/media/rc/keymaps/rc-xbox-dvd.c | ||
index af387244636b..42815ab57bff 100644 | ||
--- a/drivers/media/rc/keymaps/rc-xbox-dvd.c | ||
+++ b/drivers/media/rc/keymaps/rc-xbox-dvd.c | ||
@@ -42,7 +42,7 @@ static struct rc_map_list xbox_dvd_map = { | ||
.map = { | ||
.scan = xbox_dvd, | ||
.size = ARRAY_SIZE(xbox_dvd), | ||
- .rc_proto = RC_PROTO_UNKNOWN, | ||
+ .rc_proto = RC_PROTO_XBOX_DVD, | ||
.name = RC_MAP_XBOX_DVD, | ||
} | ||
}; | ||
diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c | ||
index 78e79c37f208..7f1d5b226f68 100644 | ||
--- a/drivers/media/rc/rc-main.c | ||
+++ b/drivers/media/rc/rc-main.c | ||
@@ -76,6 +76,7 @@ static const struct { | ||
.scancode_bits = 0x00ffffff, .repeat_period = 114 }, | ||
[RC_PROTO_RCMM32] = { .name = "rc-mm-32", | ||
.scancode_bits = 0xffffffff, .repeat_period = 114 }, | ||
+ [RC_PROTO_XBOX_DVD] = { .name = "xbox-dvd", .repeat_period = 64 }, | ||
}; | ||
|
||
/* Used to keep track of known keymaps */ | ||
@@ -1027,6 +1028,7 @@ static const struct { | ||
{ RC_PROTO_BIT_RCMM12 | | ||
RC_PROTO_BIT_RCMM24 | | ||
RC_PROTO_BIT_RCMM32, "rc-mm", "ir-rcmm-decoder" }, | ||
+ { RC_PROTO_BIT_XBOX_DVD, "xbox-dvd", NULL }, | ||
}; | ||
|
||
/** | ||
diff --git a/drivers/media/rc/xbox_remote.c b/drivers/media/rc/xbox_remote.c | ||
index f959cbb94744..79470c09989e 100644 | ||
--- a/drivers/media/rc/xbox_remote.c | ||
+++ b/drivers/media/rc/xbox_remote.c | ||
@@ -148,7 +148,7 @@ static void xbox_remote_rc_init(struct xbox_remote *xbox_remote) | ||
struct rc_dev *rdev = xbox_remote->rdev; | ||
|
||
rdev->priv = xbox_remote; | ||
- rdev->allowed_protocols = RC_PROTO_BIT_UNKNOWN; | ||
+ rdev->allowed_protocols = RC_PROTO_BIT_XBOX_DVD; | ||
rdev->driver_name = "xbox_remote"; | ||
|
||
rdev->open = xbox_remote_rc_open; | ||
@@ -157,6 +157,8 @@ static void xbox_remote_rc_init(struct xbox_remote *xbox_remote) | ||
rdev->device_name = xbox_remote->rc_name; | ||
rdev->input_phys = xbox_remote->rc_phys; | ||
|
||
+ rdev->timeout = MS_TO_NS(10); | ||
+ | ||
usb_to_input_id(xbox_remote->udev, &rdev->input_id); | ||
rdev->dev.parent = &xbox_remote->interface->dev; | ||
} | ||
diff --git a/include/media/rc-map.h b/include/media/rc-map.h | ||
index e5e86d595645..a0000f392362 100644 | ||
--- a/include/media/rc-map.h | ||
+++ b/include/media/rc-map.h | ||
@@ -40,6 +40,7 @@ | ||
#define RC_PROTO_BIT_RCMM12 BIT_ULL(RC_PROTO_RCMM12) | ||
#define RC_PROTO_BIT_RCMM24 BIT_ULL(RC_PROTO_RCMM24) | ||
#define RC_PROTO_BIT_RCMM32 BIT_ULL(RC_PROTO_RCMM32) | ||
+#define RC_PROTO_BIT_XBOX_DVD BIT_ULL(RC_PROTO_XBOX_DVD) | ||
|
||
#define RC_PROTO_BIT_ALL \ | ||
(RC_PROTO_BIT_UNKNOWN | RC_PROTO_BIT_OTHER | \ | ||
@@ -55,7 +56,8 @@ | ||
RC_PROTO_BIT_RC6_MCE | RC_PROTO_BIT_SHARP | \ | ||
RC_PROTO_BIT_XMP | RC_PROTO_BIT_CEC | \ | ||
RC_PROTO_BIT_IMON | RC_PROTO_BIT_RCMM12 | \ | ||
- RC_PROTO_BIT_RCMM24 | RC_PROTO_BIT_RCMM32) | ||
+ RC_PROTO_BIT_RCMM24 | RC_PROTO_BIT_RCMM32 | \ | ||
+ RC_PROTO_BIT_XBOX_DVD) | ||
/* All rc protocols for which we have decoders */ | ||
#define RC_PROTO_BIT_ALL_IR_DECODER \ | ||
(RC_PROTO_BIT_RC5 | RC_PROTO_BIT_RC5X_20 | \ | ||
diff --git a/include/uapi/linux/lirc.h b/include/uapi/linux/lirc.h | ||
index 45fcbf99d72e..f99d9dcae667 100644 | ||
--- a/include/uapi/linux/lirc.h | ||
+++ b/include/uapi/linux/lirc.h | ||
@@ -195,6 +195,7 @@ struct lirc_scancode { | ||
* @RC_PROTO_RCMM12: RC-MM protocol 12 bits | ||
* @RC_PROTO_RCMM24: RC-MM protocol 24 bits | ||
* @RC_PROTO_RCMM32: RC-MM protocol 32 bits | ||
+ * @RC_PROTO_XBOX_DVD: Xbox DVD Movie Playback Kit protocol | ||
*/ | ||
enum rc_proto { | ||
RC_PROTO_UNKNOWN = 0, | ||
@@ -224,6 +225,7 @@ enum rc_proto { | ||
RC_PROTO_RCMM12 = 24, | ||
RC_PROTO_RCMM24 = 25, | ||
RC_PROTO_RCMM32 = 26, | ||
+ RC_PROTO_XBOX_DVD = 27, | ||
}; | ||
|
||
#endif | ||
-- | ||
2.20.1 | ||
|
Oops, something went wrong.