USB: cleanup the handling of the PM complete call
authorOliver Neukum <oliver@neukum.org>
Wed, 11 Jan 2012 07:38:35 +0000 (08:38 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 24 Jan 2012 22:23:49 +0000 (14:23 -0800)
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>
drivers/usb/core/driver.c
drivers/usb/core/usb.c
drivers/usb/core/usb.h

index b7dfdecc7fda56e2a4d4bcee39ce1317002ba019..d77daf3683da857397dec1c5cff34df7fdd2eb4b 100644 (file)
@@ -1336,34 +1336,37 @@ int usb_suspend(struct device *dev, pm_message_t msg)
 }
 
 /* The device lock is held by the PM core */
-int usb_resume(struct device *dev, pm_message_t msg)
+int usb_resume_complete(struct device *dev)
 {
-       struct usb_device       *udev = to_usb_device(dev);
-       int                     status;
+       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 (msg.event == PM_EVENT_ON) {
-               if (udev->state != USB_STATE_NOTATTACHED)
-                       do_rebind_interfaces(udev);
-               status = 0;
+       if (udev->state != USB_STATE_NOTATTACHED)
+               do_rebind_interfaces(udev);
+       return 0;
+}
 
-       /* For all other calls, take the device back to full power and
+/* The device lock is held by the PM core */
+int usb_resume(struct device *dev, pm_message_t msg)
+{
+       struct usb_device       *udev = to_usb_device(dev);
+       int                     status;
+
+       /* For all calls, take the device back to full power and
         * tell the PM core in case it was autosuspended previously.
         * Unbind the interfaces that will need rebinding later,
         * because they fail to support reset_resume.
         * (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);
-               if (status == 0) {
-                       pm_runtime_disable(dev);
-                       pm_runtime_set_active(dev);
-                       pm_runtime_enable(dev);
-                       unbind_no_reset_resume_drivers_interfaces(udev);
-               }
+       status = usb_resume_both(udev, msg);
+       if (status == 0) {
+               pm_runtime_disable(dev);
+               pm_runtime_set_active(dev);
+               pm_runtime_enable(dev);
+               unbind_no_reset_resume_drivers_interfaces(udev);
        }
 
        /* Avoid PM error messages for devices disconnected while suspended
index 8ca9f994a280c625096f8f227d830cb5af6febad..c74ba7bbc7483e7ce106c32129f9aa6d1d693b9c 100644 (file)
@@ -274,7 +274,7 @@ static int usb_dev_prepare(struct device *dev)
 static void usb_dev_complete(struct device *dev)
 {
        /* 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)
index 45e8479c377ddb66e4cfd387ad184d8b301b4b4e..71648dcbe4386a98cf5e571516b3186d3b3ba749 100644 (file)
@@ -56,6 +56,7 @@ extern void usb_major_cleanup(void);
 
 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_complete(struct device *dev);
 
 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);