diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2008-04-03 18:03:17 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-04-25 00:16:48 -0400 |
commit | 43bbb7e015c4380064796c5868b536437b165615 (patch) | |
tree | 6f4b8e184904917677ce00f600ebf3c8839f47f0 /drivers/usb/host/ohci-omap.c | |
parent | 7be7d7418776a41badce7ca00246e270d408e4b9 (diff) |
USB: OHCI: host-controller resumes leave root hub suspended
Drivers in the ohci-hcd family should perform certain tasks whenever
their controller device is resumed. These include checking for loss
of power during suspend, turning on port power, and enabling interrupt
requests.
Until now these jobs have been carried out when the root hub is
resumed, not when the controller is. Many drivers work around the
resulting awkwardness by automatically resuming their root hub
whenever the controller is resumed. But this is wasteful and
unnecessary.
To simplify the situation, this patch (as1066) adds a new core
routine, ohci_finish_controller_resume(), which can be used by all the
OHCI-variant drivers. They can call the new routine instead of
resuming their root hubs. And ohci-pci.c can call it instead of using
its own special-purpose handler.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/ohci-omap.c')
-rw-r--r-- | drivers/usb/host/ohci-omap.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c index 2aafa7b6c81f..3a7c24c03671 100644 --- a/drivers/usb/host/ohci-omap.c +++ b/drivers/usb/host/ohci-omap.c | |||
@@ -510,14 +510,15 @@ static int ohci_omap_suspend(struct platform_device *dev, pm_message_t message) | |||
510 | 510 | ||
511 | static int ohci_omap_resume(struct platform_device *dev) | 511 | static int ohci_omap_resume(struct platform_device *dev) |
512 | { | 512 | { |
513 | struct ohci_hcd *ohci = hcd_to_ohci(platform_get_drvdata(dev)); | 513 | struct usb_hcd *hcd = platform_get_drvdata(dev); |
514 | struct ohci_hcd *ohci = hcd_to_ohci(hcd); | ||
514 | 515 | ||
515 | if (time_before(jiffies, ohci->next_statechange)) | 516 | if (time_before(jiffies, ohci->next_statechange)) |
516 | msleep(5); | 517 | msleep(5); |
517 | ohci->next_statechange = jiffies; | 518 | ohci->next_statechange = jiffies; |
518 | 519 | ||
519 | omap_ohci_clock_power(1); | 520 | omap_ohci_clock_power(1); |
520 | usb_hcd_resume_root_hub(platform_get_drvdata(dev)); | 521 | ohci_finish_controller_resume(hcd); |
521 | return 0; | 522 | return 0; |
522 | } | 523 | } |
523 | 524 | ||