diff options
Diffstat (limited to 'drivers/usb/core/quirks.c')
| -rw-r--r-- | drivers/usb/core/quirks.c | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index ab93918d9207..f073c5cb4e7b 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c @@ -103,10 +103,19 @@ void usb_detect_quirks(struct usb_device *udev)  		dev_dbg(&udev->dev, "USB quirks for this device: %x\n",  				udev->quirks); -	/* By default, disable autosuspend for all non-hubs */  #ifdef	CONFIG_USB_SUSPEND -	if (udev->descriptor.bDeviceClass != USB_CLASS_HUB) -		udev->autosuspend_disabled = 1; + +	/* By default, disable autosuspend for all devices.  The hub driver +	 * will enable it for hubs. +	 */ +	usb_disable_autosuspend(udev); + +	/* Autosuspend can also be disabled if the initial autosuspend_delay +	 * is negative. +	 */ +	if (udev->autosuspend_delay < 0) +		usb_autoresume_device(udev); +  #endif  	/* For the present, all devices default to USB-PERSIST enabled */ @@ -120,6 +129,7 @@ void usb_detect_quirks(struct usb_device *udev)  	 * for all devices.  It will affect things like hub resets  	 * and EMF-related port disables.  	 */ -	udev->persist_enabled = 1; +	if (!(udev->quirks & USB_QUIRK_RESET_MORPHS)) +		udev->persist_enabled = 1;  #endif	/* CONFIG_PM */  }  |