Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: core: hub: Disable autosuspend for Cypress CY7C65632

The Cypress CY7C65632 appears to have an issue with auto suspend and
detecting devices, not too dissimilar to the SMSC 5534B hub. It is
easiest to reproduce by connecting multiple mass storage devices to
the hub at the same time. On a Lenovo Yoga, around 1 in 3 attempts
result in the devices not being detected. It is however possible to
make them appear using lsusb -v.

Disabling autosuspend for this hub resolves the issue.

Fixes: 1208f9e1d758 ("USB: hub: Fix the broken detection of USB3 device in SMSC hub")
Cc: stable@vger.kernel.org
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20210614155524.2228800-1-andrew@lunn.ch
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Andrew Lunn and committed by
Greg Kroah-Hartman
a7d8d1c7 60ed39db

+7
+7
drivers/usb/core/hub.c
··· 41 41 #define USB_VENDOR_GENESYS_LOGIC 0x05e3 42 42 #define USB_VENDOR_SMSC 0x0424 43 43 #define USB_PRODUCT_USB5534B 0x5534 44 + #define USB_VENDOR_CYPRESS 0x04b4 45 + #define USB_PRODUCT_CY7C65632 0x6570 44 46 #define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND 0x01 45 47 #define HUB_QUIRK_DISABLE_AUTOSUSPEND 0x02 46 48 ··· 5698 5696 .idVendor = USB_VENDOR_SMSC, 5699 5697 .idProduct = USB_PRODUCT_USB5534B, 5700 5698 .bInterfaceClass = USB_CLASS_HUB, 5699 + .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND}, 5700 + { .match_flags = USB_DEVICE_ID_MATCH_VENDOR 5701 + | USB_DEVICE_ID_MATCH_PRODUCT, 5702 + .idVendor = USB_VENDOR_CYPRESS, 5703 + .idProduct = USB_PRODUCT_CY7C65632, 5701 5704 .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND}, 5702 5705 { .match_flags = USB_DEVICE_ID_MATCH_VENDOR 5703 5706 | USB_DEVICE_ID_MATCH_INT_CLASS,