Loading drivers/usb/core/quirks.c +6 −0 Original line number Diff line number Diff line Loading @@ -152,4 +152,10 @@ void usb_detect_quirks(struct usb_device *udev) /* do any special quirk handling here if needed */ if (udev->quirks & USB_QUIRK_NO_AUTOSUSPEND) usb_autosuspend_quirk(udev); /* By default, disable autosuspend for all non-hubs */ #ifdef CONFIG_USB_SUSPEND if (udev->descriptor.bDeviceClass != USB_CLASS_HUB) udev->autosuspend_delay = -1; #endif } drivers/usb/storage/scsiglue.c +4 −9 Original line number Diff line number Diff line Loading @@ -285,15 +285,10 @@ static int device_reset(struct scsi_cmnd *srb) US_DEBUGP("%s called\n", __FUNCTION__); result = usb_autopm_get_interface(us->pusb_intf); if (result == 0) { /* lock the device pointers and do the reset */ mutex_lock(&(us->dev_mutex)); result = us->transport_reset(us); mutex_unlock(&us->dev_mutex); usb_autopm_put_interface(us->pusb_intf); } return result < 0 ? FAILED : SUCCESS; } Loading drivers/usb/storage/usb.c +7 −20 Original line number Diff line number Diff line Loading @@ -184,14 +184,16 @@ static int storage_suspend(struct usb_interface *iface, pm_message_t message) { struct us_data *us = usb_get_intfdata(iface); US_DEBUGP("%s\n", __FUNCTION__); /* Wait until no command is running */ mutex_lock(&us->dev_mutex); US_DEBUGP("%s\n", __FUNCTION__); if (us->suspend_resume_hook) (us->suspend_resume_hook)(us, US_SUSPEND); /* When runtime PM is working, we'll set a flag to indicate * whether we should autoresume when a SCSI request arrives. */ mutex_unlock(&us->dev_mutex); return 0; } Loading @@ -200,11 +202,13 @@ static int storage_resume(struct usb_interface *iface) { struct us_data *us = usb_get_intfdata(iface); US_DEBUGP("%s\n", __FUNCTION__); mutex_lock(&us->dev_mutex); US_DEBUGP("%s\n", __FUNCTION__); if (us->suspend_resume_hook) (us->suspend_resume_hook)(us, US_RESUME); mutex_unlock(&us->dev_mutex); return 0; } Loading Loading @@ -302,7 +306,6 @@ static int usb_stor_control_thread(void * __us) { struct us_data *us = (struct us_data *)__us; struct Scsi_Host *host = us_to_host(us); int autopm_rc; for(;;) { US_DEBUGP("*** thread sleeping.\n"); Loading @@ -311,9 +314,6 @@ static int usb_stor_control_thread(void * __us) US_DEBUGP("*** thread awakened.\n"); /* Autoresume the device */ autopm_rc = usb_autopm_get_interface(us->pusb_intf); /* lock the device pointers */ mutex_lock(&(us->dev_mutex)); Loading Loading @@ -372,12 +372,6 @@ static int usb_stor_control_thread(void * __us) us->srb->result = SAM_STAT_GOOD; } /* Did the autoresume fail? */ else if (autopm_rc < 0) { US_DEBUGP("Could not wake device\n"); us->srb->result = DID_ERROR << 16; } /* we've got a command, let's do it! */ else { US_DEBUG(usb_stor_show_command(us->srb)); Loading Loading @@ -420,10 +414,6 @@ static int usb_stor_control_thread(void * __us) /* unlock the device pointers */ mutex_unlock(&us->dev_mutex); /* Start an autosuspend */ if (autopm_rc == 0) usb_autopm_put_interface(us->pusb_intf); } /* for (;;) */ /* Wait until we are told to stop */ Loading Loading @@ -941,7 +931,6 @@ static int usb_stor_scan_thread(void * __us) /* Should we unbind if no devices were detected? */ } usb_autopm_put_interface(us->pusb_intf); complete_and_exit(&us->scanning_done, 0); } Loading Loading @@ -1027,7 +1016,6 @@ static int storage_probe(struct usb_interface *intf, goto BadDevice; } usb_autopm_get_interface(intf); /* dropped in the scanning thread */ wake_up_process(th); return 0; Loading Loading @@ -1065,7 +1053,6 @@ static struct usb_driver usb_storage_driver = { .pre_reset = storage_pre_reset, .post_reset = storage_post_reset, .id_table = storage_usb_ids, .supports_autosuspend = 1, }; static int __init usb_stor_init(void) Loading Loading
drivers/usb/core/quirks.c +6 −0 Original line number Diff line number Diff line Loading @@ -152,4 +152,10 @@ void usb_detect_quirks(struct usb_device *udev) /* do any special quirk handling here if needed */ if (udev->quirks & USB_QUIRK_NO_AUTOSUSPEND) usb_autosuspend_quirk(udev); /* By default, disable autosuspend for all non-hubs */ #ifdef CONFIG_USB_SUSPEND if (udev->descriptor.bDeviceClass != USB_CLASS_HUB) udev->autosuspend_delay = -1; #endif }
drivers/usb/storage/scsiglue.c +4 −9 Original line number Diff line number Diff line Loading @@ -285,15 +285,10 @@ static int device_reset(struct scsi_cmnd *srb) US_DEBUGP("%s called\n", __FUNCTION__); result = usb_autopm_get_interface(us->pusb_intf); if (result == 0) { /* lock the device pointers and do the reset */ mutex_lock(&(us->dev_mutex)); result = us->transport_reset(us); mutex_unlock(&us->dev_mutex); usb_autopm_put_interface(us->pusb_intf); } return result < 0 ? FAILED : SUCCESS; } Loading
drivers/usb/storage/usb.c +7 −20 Original line number Diff line number Diff line Loading @@ -184,14 +184,16 @@ static int storage_suspend(struct usb_interface *iface, pm_message_t message) { struct us_data *us = usb_get_intfdata(iface); US_DEBUGP("%s\n", __FUNCTION__); /* Wait until no command is running */ mutex_lock(&us->dev_mutex); US_DEBUGP("%s\n", __FUNCTION__); if (us->suspend_resume_hook) (us->suspend_resume_hook)(us, US_SUSPEND); /* When runtime PM is working, we'll set a flag to indicate * whether we should autoresume when a SCSI request arrives. */ mutex_unlock(&us->dev_mutex); return 0; } Loading @@ -200,11 +202,13 @@ static int storage_resume(struct usb_interface *iface) { struct us_data *us = usb_get_intfdata(iface); US_DEBUGP("%s\n", __FUNCTION__); mutex_lock(&us->dev_mutex); US_DEBUGP("%s\n", __FUNCTION__); if (us->suspend_resume_hook) (us->suspend_resume_hook)(us, US_RESUME); mutex_unlock(&us->dev_mutex); return 0; } Loading Loading @@ -302,7 +306,6 @@ static int usb_stor_control_thread(void * __us) { struct us_data *us = (struct us_data *)__us; struct Scsi_Host *host = us_to_host(us); int autopm_rc; for(;;) { US_DEBUGP("*** thread sleeping.\n"); Loading @@ -311,9 +314,6 @@ static int usb_stor_control_thread(void * __us) US_DEBUGP("*** thread awakened.\n"); /* Autoresume the device */ autopm_rc = usb_autopm_get_interface(us->pusb_intf); /* lock the device pointers */ mutex_lock(&(us->dev_mutex)); Loading Loading @@ -372,12 +372,6 @@ static int usb_stor_control_thread(void * __us) us->srb->result = SAM_STAT_GOOD; } /* Did the autoresume fail? */ else if (autopm_rc < 0) { US_DEBUGP("Could not wake device\n"); us->srb->result = DID_ERROR << 16; } /* we've got a command, let's do it! */ else { US_DEBUG(usb_stor_show_command(us->srb)); Loading Loading @@ -420,10 +414,6 @@ static int usb_stor_control_thread(void * __us) /* unlock the device pointers */ mutex_unlock(&us->dev_mutex); /* Start an autosuspend */ if (autopm_rc == 0) usb_autopm_put_interface(us->pusb_intf); } /* for (;;) */ /* Wait until we are told to stop */ Loading Loading @@ -941,7 +931,6 @@ static int usb_stor_scan_thread(void * __us) /* Should we unbind if no devices were detected? */ } usb_autopm_put_interface(us->pusb_intf); complete_and_exit(&us->scanning_done, 0); } Loading Loading @@ -1027,7 +1016,6 @@ static int storage_probe(struct usb_interface *intf, goto BadDevice; } usb_autopm_get_interface(intf); /* dropped in the scanning thread */ wake_up_process(th); return 0; Loading Loading @@ -1065,7 +1053,6 @@ static struct usb_driver usb_storage_driver = { .pre_reset = storage_pre_reset, .post_reset = storage_post_reset, .id_table = storage_usb_ids, .supports_autosuspend = 1, }; static int __init usb_stor_init(void) Loading