summaryrefslogtreecommitdiff
path: root/drivers/usb/dwc3/dwc3-msm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/dwc3/dwc3-msm.c')
-rw-r--r--drivers/usb/dwc3/dwc3-msm.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/usb/dwc3/dwc3-msm.c b/drivers/usb/dwc3/dwc3-msm.c
index 7fec7b8e4dd9..b6b25c75b80c 100644
--- a/drivers/usb/dwc3/dwc3-msm.c
+++ b/drivers/usb/dwc3/dwc3-msm.c
@@ -2239,7 +2239,7 @@ static int dwc3_msm_suspend(struct dwc3_msm *mdwc, bool hibernation)
/* kick_sm if it is waiting for lpm sequence to finish */
if (test_and_clear_bit(WAIT_FOR_LPM, &mdwc->inputs))
- schedule_delayed_work(&mdwc->sm_work, 0);
+ queue_delayed_work(mdwc->sm_usb_wq, &mdwc->sm_work, 0);
mutex_unlock(&mdwc->suspend_resume_mutex);
@@ -2335,6 +2335,12 @@ static int dwc3_msm_resume(struct dwc3_msm *mdwc)
/* Resume HS PHY */
usb_phy_set_suspend(mdwc->hs_phy, 0);
+ /* Disable HSPHY auto suspend */
+ dwc3_msm_write_reg(mdwc->base, DWC3_GUSB2PHYCFG(0),
+ dwc3_msm_read_reg(mdwc->base, DWC3_GUSB2PHYCFG(0)) &
+ ~(DWC3_GUSB2PHYCFG_ENBLSLPM |
+ DWC3_GUSB2PHYCFG_SUSPHY));
+
/* Recover from controller power collapse */
if (mdwc->lpm_flags & MDWC3_POWER_COLLAPSE) {
dev_dbg(mdwc->dev, "%s: exit power collapse\n", __func__);
@@ -2349,12 +2355,6 @@ static int dwc3_msm_resume(struct dwc3_msm *mdwc)
/* enable power evt irq for IN P3 detection */
enable_irq(mdwc->pwr_event_irq);
- /* Disable HSPHY auto suspend */
- dwc3_msm_write_reg(mdwc->base, DWC3_GUSB2PHYCFG(0),
- dwc3_msm_read_reg(mdwc->base, DWC3_GUSB2PHYCFG(0)) &
- ~(DWC3_GUSB2PHYCFG_ENBLSLPM |
- DWC3_GUSB2PHYCFG_SUSPHY));
-
/* Disable wakeup capable for HS_PHY IRQ & SS_PHY_IRQ if enabled */
if (mdwc->lpm_flags & MDWC3_ASYNC_IRQ_WAKE_CAPABILITY) {
if (!mdwc->no_wakeup_src_in_hostmode)
@@ -3764,8 +3764,7 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on)
/* wait for LPM, to ensure h/w is reset after stop_host */
set_bit(WAIT_FOR_LPM, &mdwc->inputs);
- pm_runtime_mark_last_busy(mdwc->dev);
- pm_runtime_put_sync_autosuspend(mdwc->dev);
+ pm_runtime_put_sync_suspend(mdwc->dev);
dbg_event(0xFF, "StopHost psync",
atomic_read(&mdwc->dev->power.usage_count));
}