* [PATCH v2 0/1] HID: usbhid: skip interrupt IN polling for devices with no input reports
@ 2026-08-28 10:42 Ahmed Yaseen
2026-08-28 10:42 ` [PATCH v2] " Ahmed Yaseen
0 siblings, 1 reply; 2+ messages in thread
From: Ahmed Yaseen @ 2026-08-28 10:42 UTC (permalink / raw)
To: Jiri Kosina, Benjamin Tissoires
Cc: Denis Benato, Antheas Kapenekakis, Ilpo Järvinen,
Dmitry Torokhov, Alan Stern, Kerim Kabirov, GameBurrow,
regressions, linux-usb, linux-input, linux-kernel, Ahmed Yaseen
On some ASUS ROG N-Key keyboards, a second input-less interface is
exposed for RGB control. Polling this interface causes keypress reports
on the first keyboard interface to be dropped: a lost key-down drops a
letter, a lost key-up leaves the key stuck. Any hidraw reader opening
the node is enough to trigger it, including SDL/Steam Input or a plain
cat.
This patch skips the poll if no input reports exist for an interface. A
device with no input reports has no benefit from being polled, so
instead of adding a new quirk, I have opted to skip it entirely.
Devices other than the ASUS ones are unaffected. HID core already
discards whatever arrives on the interrupt IN endpoint of an interface
that declares no input reports: hid_get_report() matches nothing, so
neither ->raw_event() nor hidraw and hiddev are ever reached.
The affected machines are 2024-2025 Strix SCAR 16/18 (G635L/G835L) and
G16/G18 (G615L/G815L) laptops, and the bug is widely reported across
distributions, so I would appreciate this being considered for the
current cycle. Reports:
https://discuss.cachyos.org/t/keyboard-input-issues-on-asus-rog-strix-16-2025-with-cachyos-during-gaming/30823
https://github.com/ublue-os/bazzite/issues/4590
v1: https://lore.kernel.org/all/20260605113952.38435-1-yaseen@ghoul.dev
Changes since v1:
- Added a short comment above the condition in usbhid_open() explaining
the reason for skipping there.
- Added Cc: stable@vger.kernel.org; v1 was not marked for backport. The
bug reaches every tree carrying 4ac74ea68f64, i.e. v7.0 onwards.
- Added Link: tags for two of the downstream bug reports.
- No functional change: the hunk is byte-identical to v1 apart from the
new comment, so the Tested-by and Reviewed-by tags carry over.
Since v1, this patch has been adopted by three downstream kernels, with
no regressions reported by any user since:
- OGC kernel: from v7.1.3-ogc5 (2026-07-21) onwards
- Nobara kernel: from 7.1.4 onwards
- G14 kernel: from 7.1.4 onwards
Ahmed Yaseen (1):
HID: usbhid: skip interrupt IN polling for devices with no input
reports
drivers/hid/usbhid/hid-core.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
base-commit: 8d3ae59288f1e7d58d76558a6ee96d533bc5019f
--
2.55.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH v2] HID: usbhid: skip interrupt IN polling for devices with no input reports
2026-08-28 10:42 [PATCH v2 0/1] HID: usbhid: skip interrupt IN polling for devices with no input reports Ahmed Yaseen
@ 2026-08-28 10:42 ` Ahmed Yaseen
0 siblings, 0 replies; 2+ messages in thread
From: Ahmed Yaseen @ 2026-08-28 10:42 UTC (permalink / raw)
To: Jiri Kosina, Benjamin Tissoires
Cc: Denis Benato, Antheas Kapenekakis, Ilpo Järvinen,
Dmitry Torokhov, Alan Stern, Kerim Kabirov, GameBurrow,
regressions, linux-usb, linux-input, linux-kernel, Ahmed Yaseen,
stable
usbhid starts polling a device's interrupt IN endpoint on open
(usbhid_open() -> hid_start_in()). If the report descriptor declares no
input reports there is nothing to read there, so the poll is useless,
and on some composite devices it is also harmful.
The ASUS ROG N-Key keyboards expose a second, input-less interface used
only for RGB control via feature reports. Opening its hidraw node (any
hidraw reader does, including SDL/Steam Input or a plain cat) starts the
pointless IN poll and keypress reports on the keyboard interface get
dropped for as long as the node stays open: a lost key-down drops a
letter, a lost key-up leaves the key stuck. usbmon shows the dropped
reports never reach the URB layer.
The useless poll itself is long-standing; commit 4ac74ea68f64 ("HID:
asus: early return for ROG devices") is what exposes it on these
devices by keeping the input-less interface alive instead of ejecting
it, so its hidraw node can be opened and the poll started.
Skip the poll in usbhid_open() when the device has no input reports.
Feature reports and hidraw output keep working over the control and OUT
endpoints, so the interface is otherwise unaffected.
Fixes: 4ac74ea68f64 ("HID: asus: early return for ROG devices")
Link: https://discuss.cachyos.org/t/keyboard-input-issues-on-asus-rog-strix-16-2025-with-cachyos-during-gaming/30823
Link: https://github.com/ublue-os/bazzite/issues/4590
Cc: stable@vger.kernel.org
Tested-by: Kerim Kabirov <the.privat33r+linux@pm.me>
Tested-by: GameBurrow <gameburrow@pm.me>
Signed-off-by: Ahmed Yaseen <yaseen@ghoul.dev>
Reviewed-by: Denis Benato <denis.benato@linux.dev>
---
drivers/hid/usbhid/hid-core.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 96b0181cf819..d7cf2b56e117 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -688,7 +688,14 @@ static int usbhid_open(struct hid_device *hid)
set_bit(HID_OPENED, &usbhid->iofl);
- if (hid->quirks & HID_QUIRK_ALWAYS_POLL) {
+ /*
+ * ALWAYS_POLL devices are already polled from usbhid_start(), and a
+ * device with no input reports has nothing to send on the interrupt
+ * IN endpoint. In some cases polling is harmful: on the ASUS ROG
+ * N-Key keyboards it makes the sibling interface drop keypresses.
+ */
+ if ((hid->quirks & HID_QUIRK_ALWAYS_POLL) ||
+ list_empty(&hid->report_enum[HID_INPUT_REPORT].report_list)) {
res = 0;
goto Done;
}
base-commit: 8d3ae59288f1e7d58d76558a6ee96d533bc5019f
--
2.55.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-08-28 10:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-28 10:42 [PATCH v2 0/1] HID: usbhid: skip interrupt IN polling for devices with no input reports Ahmed Yaseen
2026-08-28 10:42 ` [PATCH v2] " Ahmed Yaseen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox