diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index b9ea217f2983..34f16ba1b104 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -1770,7 +1770,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 a1be64c9940f..9afb0c972bfc 100644 --- a/include/linux/usb/quirks.h +++ b/include/linux/usb/quirks.h @@ -69,4 +69,7 @@ /* Hub needs extra delay after resetting its port. */ #define USB_QUIRK_HUB_SLOW_RESET BIT(14) +/* device can't support auto suspend function */ +#define USB_QUIRK_AUTO_SUSPEND BIT(15) + #endif /* __LINUX_USB_QUIRKS_H */