USB: Enhance usage of pm_message_t
This patch (as1177) modifies the USB core suspend and resume routines. The resume functions now will take a pm_message_t argument, so they will know what sort of resume is occurring. The new argument is also passed to the port suspend/resume and bus suspend/resume routines (although they don't use it for anything but debugging). In addition, special pm_message_t values are used for user-initiated, device-initiated (i.e., remote wakeup), and automatic suspend/resume. By testing these values, drivers can tell whether or not a particular suspend was an autosuspend. Unfortunately, they can't do the same for resumes -- not until the pm_message_t argument is also passed to the drivers' resume methods. That will require a bigger change. IMO, the whole Power Management framework should have been set up this way in the first place. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
4ec06d6296
commit
65bfd2967c
@@ -200,18 +200,18 @@ static int generic_suspend(struct usb_device *udev, pm_message_t msg)
|
||||
* interfaces manually by doing a bus (or "global") suspend.
|
||||
*/
|
||||
if (!udev->parent)
|
||||
rc = hcd_bus_suspend(udev);
|
||||
rc = hcd_bus_suspend(udev, msg);
|
||||
|
||||
/* Non-root devices don't need to do anything for FREEZE or PRETHAW */
|
||||
else if (msg.event == PM_EVENT_FREEZE || msg.event == PM_EVENT_PRETHAW)
|
||||
rc = 0;
|
||||
else
|
||||
rc = usb_port_suspend(udev);
|
||||
rc = usb_port_suspend(udev, msg);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int generic_resume(struct usb_device *udev)
|
||||
static int generic_resume(struct usb_device *udev, pm_message_t msg)
|
||||
{
|
||||
int rc;
|
||||
|
||||
@@ -221,9 +221,9 @@ static int generic_resume(struct usb_device *udev)
|
||||
* interfaces manually by doing a bus (or "global") resume.
|
||||
*/
|
||||
if (!udev->parent)
|
||||
rc = hcd_bus_resume(udev);
|
||||
rc = hcd_bus_resume(udev, msg);
|
||||
else
|
||||
rc = usb_port_resume(udev);
|
||||
rc = usb_port_resume(udev, msg);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user