From 828c8ddd4ee10cefc64122bbe8ffbd47e99b38e7 Mon Sep 17 00:00:00 2001 From: BANANASJIM Date: Wed, 3 Jun 2026 17:04:17 -0700 Subject: [PATCH] fix(vader5): block only xpad so the pad stays discoverable (#355) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit padctl self-detaches the kernel HID driver when it libusb-claims IF1/IF2/IF3, so blocking hid_generic/usbhid at udev was redundant — and it removed the hidraw node that padctl's discovery depends on, leaving the daemon with "no devices connected" (regression from #357). Block only xpad: usbhid stays bound so the hidraw node exists for discovery, and the libusb claim still detaches it at runtime and hides the pad from Steam. --- devices/flydigi/vader5.toml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/devices/flydigi/vader5.toml b/devices/flydigi/vader5.toml index 7c84b7c..25c3225 100644 --- a/devices/flydigi/vader5.toml +++ b/devices/flydigi/vader5.toml @@ -2,15 +2,14 @@ name = "Flydigi Vader 5 Pro" vid = 0x37d7 pid = 0x2401 -block_kernel_drivers = ["xpad", "hid_generic", "usbhid"] - -# The pad exposes three HID interfaces (IF1 vendor 0xffa0, IF2 Mouse, IF3 -# vendor 0xffee), each producing a hidraw node via hid-generic. padctl claims -# all three so the kernel exposes no hidraw/evdev node for the physical pad; -# Steam reads hidraw directly, so any kernel-owned node would still surface -# the pad as a generic Xbox controller. IF1 is read for input + rumble + init; -# IF2/IF3 are claimed suppress-only — never read or written, only evicted from -# hid-generic so their hidraw nodes vanish. +block_kernel_drivers = ["xpad"] + +# The pad exposes a vendor interface (IF0, no driver) plus three HID interfaces +# (IF1 input, IF2 mouse, IF3 vendor HID). padctl claims IF1 via libusb (read EP +# 0x82 / write EP 0x06) and IF2/IF3 suppress-only; libusb_claim detaches the +# kernel HID driver, so their hidraw nodes vanish and Steam sees only the +# virtual Elite pad. Only xpad is blocked at udev — hid_generic/usbhid must keep +# binding so a hidraw node exists for discovery before padctl claims it. [[device.interface]] id = 1 class = "vendor" # EP2 IN 32B extended input, EP6 OUT 32B config commands