Re: [PATCH 2/3] HID: valve-index: Reboot headset on system power transitions

From: Mario Limonciello

Date: Fri Sep 11 2026 - 02:02:02 EST




On 9/11/26 00:54, Greg Kroah-Hartman wrote:
On Thu, Sep 10, 2026 at 12:02:53PM -0500, Mario Limonciello wrote:
The Valve Index HMD stops serving its EDID after the host disables the
DisplayPort PHY. The headset remains powered by its breakout box across
suspend and shutdown, so the bad state survives and the next connector
detection reports "No EDID read". The HMD then appears as a synthesized
640x480 display until it is power-cycled.

The 64-byte HID output report 0x16 with command 0x01 reboots the headset
and restores its EDID service. Add a device-specific driver which sends
this report for system sleep transitions and orderly shutdown while leaving
runtime autosuspend alone.

Resume a runtime-suspended interface for a shutdown request and restrict
the command to the composite interface which declares report 0x16.

Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/4333
Link: https://github.com/ValveSoftware/SteamVR-for-Linux/issues/939
Assisted-by: LLM
Co-developed-by: Curtis Vogt <curtis.vogt@xxxxxxxxx>
Signed-off-by: Curtis Vogt <curtis.vogt@xxxxxxxxx>
Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>
---
.../ABI/testing/sysfs-driver-hid-valve-index | 12 ++
drivers/hid/Kconfig | 11 ++
drivers/hid/Makefile | 1 +
drivers/hid/hid-ids.h | 1 +
drivers/hid/hid-valve-index.c | 142 ++++++++++++++++++
5 files changed, 167 insertions(+)
create mode 100644 Documentation/ABI/testing/sysfs-driver-hid-valve-index
create mode 100644 drivers/hid/hid-valve-index.c

diff --git a/Documentation/ABI/testing/sysfs-driver-hid-valve-index b/Documentation/ABI/testing/sysfs-driver-hid-valve-index
new file mode 100644
index 0000000000000..47d8c26b1eace
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-driver-hid-valve-index
@@ -0,0 +1,12 @@
+What: /sys/bus/hid/devices/<bus>:<vid>:<pid>.<n>/reboot
+Date: October 2026
+Contact: linux-input@xxxxxxxxxxxxxxx
+Description:
+ Writing a boolean true value reboots the Valve Index headset to
+ recover its EDID service. Writing a boolean false value has no
+ effect. This file is write-only.

Shouldn't this just be a debugfs file? Making it a sysfs file seems
"risky" as it's not a normal operation.

Yeah I guess that makes sense.


+ The Valve Index is a composite HID device. The reboot command is
+ only supported by the interface that provides the headset's 64-byte
+ output report. Writing true to this file on another interface fails
+ with -ENODEV.

Why would it be present on "another interface'? That feels wrong.

thanks,

greg k-h