Skip to content

Commit 2740ac3

Browse files
birdayzgregkh
authored andcommitted
usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor
Add USB_QUIRK_NO_BOS quirk flag to skip requesting the BOS descriptor for devices that cannot handle it. Add Elgato 4K X (0fd9:009b) to the quirk table. This device hangs when the BOS descriptor is requested at SuperSpeed Plus (10Gbps). Link: https://bugzilla.kernel.org/show_bug.cgi?id=220027 Cc: stable <stable@kernel.org> Signed-off-by: Johannes Brüderl <johannes.bruederl@gmail.com> Link: https://patch.msgid.link/20251207090220.14807-1-johannes.bruederl@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 1d32389 commit 2740ac3

3 files changed

Lines changed: 11 additions & 0 deletions

File tree

drivers/usb/core/config.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,11 @@ int usb_get_bos_descriptor(struct usb_device *dev)
10401040
__u8 cap_type;
10411041
int ret;
10421042

1043+
if (dev->quirks & USB_QUIRK_NO_BOS) {
1044+
dev_dbg(ddev, "skipping BOS descriptor\n");
1045+
return -ENOMSG;
1046+
}
1047+
10431048
bos = kzalloc(sizeof(*bos), GFP_KERNEL);
10441049
if (!bos)
10451050
return -ENOMEM;

drivers/usb/core/quirks.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,9 @@ static const struct usb_device_id usb_quirk_list[] = {
450450
{ USB_DEVICE(0x0c45, 0x7056), .driver_info =
451451
USB_QUIRK_IGNORE_REMOTE_WAKEUP },
452452

453+
/* Elgato 4K X - BOS descriptor fetch hangs at SuperSpeed Plus */
454+
{ USB_DEVICE(0x0fd9, 0x009b), .driver_info = USB_QUIRK_NO_BOS },
455+
453456
/* Sony Xperia XZ1 Compact (lilac) smartphone in fastboot mode */
454457
{ USB_DEVICE(0x0fce, 0x0dde), .driver_info = USB_QUIRK_NO_LPM },
455458

include/linux/usb/quirks.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,7 @@
7575
/* short SET_ADDRESS request timeout */
7676
#define USB_QUIRK_SHORT_SET_ADDRESS_REQ_TIMEOUT BIT(16)
7777

78+
/* skip BOS descriptor request */
79+
#define USB_QUIRK_NO_BOS BIT(17)
80+
7881
#endif /* __LINUX_USB_QUIRKS_H */

0 commit comments

Comments
 (0)