mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-06 06:37:59 +00:00
USB: cleanup the handling of the PM complete call
This eliminates the last instance of a function's behavior controlled by a parameter as Linus hates such things. Signed-off-by: Oliver Neukum <oneukum@suse.de> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
1493138af1
commit
98d9a82e5f
3 changed files with 23 additions and 19 deletions
|
@ -1335,35 +1335,38 @@ int usb_suspend(struct device *dev, pm_message_t msg)
|
||||||
return usb_suspend_both(udev, msg);
|
return usb_suspend_both(udev, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The device lock is held by the PM core */
|
||||||
|
int usb_resume_complete(struct device *dev)
|
||||||
|
{
|
||||||
|
struct usb_device *udev = to_usb_device(dev);
|
||||||
|
|
||||||
|
/* For PM complete calls, all we do is rebind interfaces
|
||||||
|
* whose needs_binding flag is set
|
||||||
|
*/
|
||||||
|
if (udev->state != USB_STATE_NOTATTACHED)
|
||||||
|
do_rebind_interfaces(udev);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* The device lock is held by the PM core */
|
/* The device lock is held by the PM core */
|
||||||
int usb_resume(struct device *dev, pm_message_t msg)
|
int usb_resume(struct device *dev, pm_message_t msg)
|
||||||
{
|
{
|
||||||
struct usb_device *udev = to_usb_device(dev);
|
struct usb_device *udev = to_usb_device(dev);
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
/* For PM complete calls, all we do is rebind interfaces
|
/* For all calls, take the device back to full power and
|
||||||
* whose needs_binding flag is set
|
|
||||||
*/
|
|
||||||
if (msg.event == PM_EVENT_ON) {
|
|
||||||
if (udev->state != USB_STATE_NOTATTACHED)
|
|
||||||
do_rebind_interfaces(udev);
|
|
||||||
status = 0;
|
|
||||||
|
|
||||||
/* For all other calls, take the device back to full power and
|
|
||||||
* tell the PM core in case it was autosuspended previously.
|
* tell the PM core in case it was autosuspended previously.
|
||||||
* Unbind the interfaces that will need rebinding later,
|
* Unbind the interfaces that will need rebinding later,
|
||||||
* because they fail to support reset_resume.
|
* because they fail to support reset_resume.
|
||||||
* (This can't be done in usb_resume_interface()
|
* (This can't be done in usb_resume_interface()
|
||||||
* above because it doesn't own the right set of locks.)
|
* above because it doesn't own the right set of locks.)
|
||||||
*/
|
*/
|
||||||
} else {
|
status = usb_resume_both(udev, msg);
|
||||||
status = usb_resume_both(udev, msg);
|
if (status == 0) {
|
||||||
if (status == 0) {
|
pm_runtime_disable(dev);
|
||||||
pm_runtime_disable(dev);
|
pm_runtime_set_active(dev);
|
||||||
pm_runtime_set_active(dev);
|
pm_runtime_enable(dev);
|
||||||
pm_runtime_enable(dev);
|
unbind_no_reset_resume_drivers_interfaces(udev);
|
||||||
unbind_no_reset_resume_drivers_interfaces(udev);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Avoid PM error messages for devices disconnected while suspended
|
/* Avoid PM error messages for devices disconnected while suspended
|
||||||
|
|
|
@ -274,7 +274,7 @@ static int usb_dev_prepare(struct device *dev)
|
||||||
static void usb_dev_complete(struct device *dev)
|
static void usb_dev_complete(struct device *dev)
|
||||||
{
|
{
|
||||||
/* Currently used only for rebinding interfaces */
|
/* Currently used only for rebinding interfaces */
|
||||||
usb_resume(dev, PMSG_ON); /* FIXME: change to PMSG_COMPLETE */
|
usb_resume_complete(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int usb_dev_suspend(struct device *dev)
|
static int usb_dev_suspend(struct device *dev)
|
||||||
|
|
|
@ -56,6 +56,7 @@ extern void usb_major_cleanup(void);
|
||||||
|
|
||||||
extern int usb_suspend(struct device *dev, pm_message_t msg);
|
extern int usb_suspend(struct device *dev, pm_message_t msg);
|
||||||
extern int usb_resume(struct device *dev, pm_message_t msg);
|
extern int usb_resume(struct device *dev, pm_message_t msg);
|
||||||
|
extern int usb_resume_complete(struct device *dev);
|
||||||
|
|
||||||
extern int usb_port_suspend(struct usb_device *dev, pm_message_t msg);
|
extern int usb_port_suspend(struct usb_device *dev, pm_message_t msg);
|
||||||
extern int usb_port_resume(struct usb_device *dev, pm_message_t msg);
|
extern int usb_port_resume(struct usb_device *dev, pm_message_t msg);
|
||||||
|
|
Loading…
Add table
Reference in a new issue