[PATCH] HID: steelseries: space Arctis 7 status requests
DORMANTno replies
From: Erik Håkansson <hidden>
Date: 2026-10-24 16:41:00
Also in:
lkml
Subsystem:
hid core layer, the rest · Maintainers:
Jiri Kosina, Benjamin Tissoires, Linus Torvalds
A user reports that the Arctis 7 (2018) frequently reports a battery capacity of 3% before returning the correct value about 30 ms later, causing false low-battery notifications. In the reporter's tests, this occurs when the receiver is connected through a USB hub, but not when connected directly to a root port. The driver sends connection (0x14) and battery (0x18) requests back to back. The spurious battery value, 0x03, matches the connection reply's connected value, suggesting that the firmware may return stale buffer contents when the requests arrive too close together. Add a 10 ms sleep between the requests. Arctis Sound Manager uses the same minimum spacing for this device family, citing the behaviour of the proprietary SteelSeries GG software in its configuration comments. The reporter tested both versions on CachyOS Linux 7.3.0 with receiver 1038:12ad behind a USB hub. During separate 60-second runs, the stock module produced eight false battery reports of 3%, whereas the patched module did not exhibit the issue. Reported and tested by a user who wishes to remain anonymous. Link: https://github.com/loteran/Arctis-Sound-Manager/blob/342194fb24873b343a4b38336aa14bffabfe6e09/src/arctis_sound_manager/devices/arctis_7.yaml#L2-L3 Fixes: 7e749a797282 ("HID: steelseries: Add support for Arctis 7 (2018)") Signed-off-by: Erik Håkansson <redacted> Assisted-by: LLM --- Add spacing between the connection and battery requests to prevent spurious low-battery reports on the Arctis 7 (2018). The reporter confirmed the fix in an A/B comparison on CachyOS Linux 7.3.0, with the receiver connected through a USB hub. Their reporting and testing contributions are credited anonymously at their request. checkpatch warns that msleep() below 20 ms can sleep for up to 20 ms. That is acceptable here: the delay enforces minimum command spacing, and status polling repeats approximately every three seconds. --- drivers/hid/hid-steelseries-arctis.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/drivers/hid/hid-steelseries-arctis.c b/drivers/hid/hid-steelseries-arctis.c
index df61fa33d4c6..dc5a421e8d76 100644
--- a/drivers/hid/hid-steelseries-arctis.c
+++ b/drivers/hid/hid-steelseries-arctis.c@@ -6,6 +6,7 @@ * Copyright (c) 2026 Sriman Achanta */ +#include <linux/delay.h> #include <linux/device.h> #include <linux/hid.h> #include <linux/kref.h>
@@ -111,6 +112,12 @@ static int steelseries_arctis_7_2018_request_status(struct hid_device *hdev) if (ret) return ret; + /* + * Back-to-back requests may cause the device to return stale buffer + * contents, resulting in incorrect battery reports. + */ + msleep(10); + return steelseries_send_output_report(hdev, battery, sizeof(battery)); }
--- base-commit: c03c1a14507dfaf8b856c2608f9ac216021fc222 change-id: 20261024-feature-arctis7-2dbf70d7ce38 Best regards, -- Erik Håkansson [off-list ref]