[PATCH] USB: fix OHCI PM regression
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>
This commit is contained in:
parent
7e713b8256
commit
db4cefaaea
|
@ -1805,6 +1805,12 @@ int usb_add_hcd(struct usb_hcd *hcd,
|
||||||
USB_SPEED_FULL;
|
USB_SPEED_FULL;
|
||||||
hcd->self.root_hub = rhdev;
|
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
|
/* "reset" is misnamed; its role is now one-time init. the controller
|
||||||
* should already have been reset (and boot firmware kicked off etc).
|
* 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;
|
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 */
|
/* NOTE: root hub and controller capabilities may not be the same */
|
||||||
if (device_can_wakeup(hcd->self.controller)
|
if (device_can_wakeup(hcd->self.controller)
|
||||||
&& device_can_wakeup(&hcd->self.root_hub->dev))
|
&& device_can_wakeup(&hcd->self.root_hub->dev))
|
||||||
|
|
Loading…
Reference in a new issue