mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-15 01:01:56 -04:00
usb: xhci-plat: Remove system PM call backs
system PM callbacks are just calling xhci_suspend() and xhci_resume() functions which are already called from runtime PM callbacks. Calling it from system PM again results into un-clocked register access. Change-Id: I4e3216773246e5f4ec94d8e921b98c51fff2654d Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
This commit is contained in:
parent
4c5b785727
commit
896836350b
1 changed files with 26 additions and 25 deletions
|
|
@ -390,33 +390,21 @@ static int xhci_plat_remove(struct platform_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int __maybe_unused xhci_plat_suspend(struct device *dev)
|
||||
static int __maybe_unused xhci_plat_runtime_idle(struct device *dev)
|
||||
{
|
||||
struct usb_hcd *hcd = dev_get_drvdata(dev);
|
||||
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
||||
|
||||
/*
|
||||
* xhci_suspend() needs `do_wakeup` to know whether host is allowed
|
||||
* to do wakeup during suspend. Since xhci_plat_suspend is currently
|
||||
* only designed for system suspend, device_may_wakeup() is enough
|
||||
* to dertermine whether host is allowed to do wakeup. Need to
|
||||
* reconsider this when xhci_plat_suspend enlarges its scope, e.g.,
|
||||
* also applies to runtime suspend.
|
||||
* When pm_runtime_put_autosuspend() is called on this device,
|
||||
* after this idle callback returns the PM core will schedule the
|
||||
* autosuspend if there is any remaining time until expiry. However,
|
||||
* when reaching this point because the child_count becomes 0, the
|
||||
* core does not honor autosuspend in that case and results in
|
||||
* idle/suspend happening immediately. In order to have a delay
|
||||
* before suspend we have to call pm_runtime_autosuspend() manually.
|
||||
*/
|
||||
return xhci_suspend(xhci, device_may_wakeup(dev));
|
||||
}
|
||||
|
||||
static int __maybe_unused xhci_plat_resume(struct device *dev)
|
||||
{
|
||||
struct usb_hcd *hcd = dev_get_drvdata(dev);
|
||||
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
||||
int ret;
|
||||
|
||||
ret = xhci_priv_resume_quirk(hcd);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return xhci_resume(xhci, 0);
|
||||
pm_runtime_mark_last_busy(dev);
|
||||
pm_runtime_autosuspend(dev);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
static int __maybe_unused xhci_plat_runtime_suspend(struct device *dev)
|
||||
|
|
@ -431,12 +419,25 @@ static int __maybe_unused xhci_plat_runtime_resume(struct device *dev)
|
|||
{
|
||||
struct usb_hcd *hcd = dev_get_drvdata(dev);
|
||||
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
||||
int ret;
|
||||
|
||||
return xhci_resume(xhci, 0);
|
||||
if (!xhci)
|
||||
return 0;
|
||||
|
||||
dev_dbg(dev, "xhci-plat runtime resume\n");
|
||||
|
||||
ret = xhci_priv_resume_quirk(hcd);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = xhci_resume(xhci, false);
|
||||
pm_runtime_mark_last_busy(dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops xhci_plat_pm_ops = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(xhci_plat_suspend, xhci_plat_resume)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(NULL, NULL)
|
||||
|
||||
SET_RUNTIME_PM_OPS(xhci_plat_runtime_suspend,
|
||||
xhci_plat_runtime_resume,
|
||||
|
|
|
|||
Loading…
Reference in a new issue