diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 00dd717e65bb..b9195e242cca 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -1711,7 +1711,8 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) * bus_resume methods. */ if (hdev->parent) { /* normal device */ - usb_enable_autosuspend(hdev); + if (!(hdev->parent->quirks & USB_QUIRK_AUTO_SUSPEND)) + usb_enable_autosuspend(hdev); } else { /* root hub */ const struct hc_driver *drv = bus_to_hcd(hdev->bus)->driver; diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h index 1d0043dc34e4..56939098675e 100644 --- a/include/linux/usb/quirks.h +++ b/include/linux/usb/quirks.h @@ -50,4 +50,7 @@ /* device can't handle Link Power Management */ #define USB_QUIRK_NO_LPM BIT(10) +/* device can't support auto suspend function */ +#define USB_QUIRK_AUTO_SUSPEND BIT(11) + #endif /* __LINUX_USB_QUIRKS_H */