[PATCH v2] usb: core: quirks: Skip device qualifier for BEITONG BTP-PG01A

From: Weiqin Zhu

Date: Mon Oct 26 2026 - 11:10:46 EST


The BEITONG BTP-PG01A wireless controller dongle initially enumerates as
4131:800c. Device qualifier requests fail with -EPIPE, followed by
failures to read the configuration descriptor. After port recovery,
the dongle can enumerate as 045e:028e with only two interfaces, leaving
the vendor configuration software unusable in a Windows guest.

Add USB_QUIRK_DEVICE_QUALIFIER for 4131:800c to skip device qualifier
requests. The dongle then enumerates as 20bc:5162 with five interfaces,
including three HID interfaces, and the vendor software works through
USB passthrough to a Windows VM.

Tested both usbcore.quirks=4131:800c:i and the built-in entry on an xHCI
host. The patched kernel was tested without a dynamic usbcore.quirks
entry. The configuration-request size quirk alone did not resolve the
enumeration failure.

Signed-off-by: Weiqin Zhu <zwq939681378@xxxxxxxxx>
---
Changes in v2:
- Correct my name to Weiqin Zhu for the author and DCO signoff.
- No changes to the code or test results.

v1: https://lore.kernel.org/linux-usb/20261026133448.10185-1-zwq939681378@xxxxxxxxx/

Tested the built-in entry with kernel 7.3.0-pg01a+ on an xHCI host through
the original hub chain, with no dynamic usbcore.quirks entry. The dongle
enumerated as 20bc:5162 with a 146-byte configuration and five interfaces,
including three HID interfaces. The submitter also confirmed successful
USB passthrough to a Windows VM and use of the vendor software. Secure
Boot remained enabled using the host's existing enrolled MOK.

The changed source file compiled without warnings with W=1 using both
x86_64_defconfig and the host's USB module configuration. The full
host-configured kernel and Debian packages also built successfully with
debug information disabled.

The available usbmon capture covers the unsuccessful configuration-request
size quirk experiment. No capture of the successful path or cold-replug
trial count is available.

AI assistance: OpenAI GPT helped analyze the original enumeration problem.
Codex used the supplied handoff and USB traces to check the upstream code,
prepare the device-table entry, and draft this commit message and workflow.
The submitter performed the hardware experiments and confirmed the VM and
vendor-software tests. Codex collected the running kernel, boot parameters
and cached USB descriptors locally after the static-patch test.

drivers/usb/core/quirks.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index a4bcbe9c9..c01c5cfe1 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -615,6 +615,10 @@ static const struct usb_device_id usb_quirk_list[] = {
/* GameSir G7 SE */
{ USB_DEVICE(0x3537, 0x10a0), .driver_info = USB_QUIRK_WINDOWS_CONFIG_REQ_SIZE },

+ /* BEITONG BTP-PG01A wireless controller dongle */
+ { USB_DEVICE(0x4131, 0x800c), .driver_info =
+ USB_QUIRK_DEVICE_QUALIFIER },
+
/* DELL USB GEN2 */
{ USB_DEVICE(0x413c, 0xb062), .driver_info = USB_QUIRK_NO_LPM | USB_QUIRK_RESET_RESUME },


base-commit: 21a7f44fd0765fcc5194130b28767786eba1d1e7
--
2.47.3