OSDN Git Service

[PATCH] USB: fix OHCI PM regression
authorDavid Brownell <david-b@pacbell.net>
Tue, 2 May 2006 05:07:13 +0000 (22:07 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 9 May 2006 06:43:55 +0000 (23:43 -0700)
This fixes a small regression in USB controller power usage for many
OHCI controllers, notably including every non-PCI version of OHCI:  on
those systems, the runtime autosuspend mechanism is no longer enabled.

The change moves to saner defaults.  All root hubs are expected to handle
remote wakeup (and hence autosuspend), although drivers for buggy silicon
may override that default.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/core/hcd.c

index fbd938d..e2e00ba 100644 (file)
@@ -1805,6 +1805,12 @@ int usb_add_hcd(struct usb_hcd *hcd,
                        USB_SPEED_FULL;
        hcd->self.root_hub = rhdev;
 
+       /* wakeup flag init defaults to "everything works" for root hubs,
+        * but drivers can override it in reset() if needed, along with
+        * recording the overall controller's system wakeup capability.
+        */
+       device_init_wakeup(&rhdev->dev, 1);
+
        /* "reset" is misnamed; its role is now one-time init. the controller
         * should already have been reset (and boot firmware kicked off etc).
         */
@@ -1813,13 +1819,6 @@ int usb_add_hcd(struct usb_hcd *hcd,
                goto err_hcd_driver_setup;
        }
 
-       /* wakeup flag init is in transition; for now we can't rely on PCI to
-        * initialize these bits properly, so we let reset() override it.
-        * This init should _precede_ the reset() once PCI behaves.
-        */
-       device_init_wakeup(&rhdev->dev,
-                       device_can_wakeup(hcd->self.controller));
-
        /* NOTE: root hub and controller capabilities may not be the same */
        if (device_can_wakeup(hcd->self.controller)
                        && device_can_wakeup(&hcd->self.root_hub->dev))