From d130a7e01251e10cd681ea711fbdf75f53c14cd1 Mon Sep 17 00:00:00 2001 From: John Stultz Date: Wed, 15 Nov 2017 10:38:46 -0800 Subject: [PATCH] usb: dwc3: Get gadget mode working again Adapt from 4.15-rc changes that broke gadget mode Should be squished down with earlier patch. Signed-off-by: John Stultz --- drivers/usb/dwc3/core.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 8ef5a5a765d9..12154c7f5548 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1514,10 +1514,10 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg) switch (dwc->current_dr_role) { case DWC3_GCTL_PRTCAP_DEVICE: + case DWC3_GCTL_PRTCAP_OTG: spin_lock_irqsave(&dwc->lock, flags); dwc3_gadget_suspend(dwc); spin_unlock_irqrestore(&dwc->lock, flags); - dwc3_core_exit(dwc); break; case DWC3_GCTL_PRTCAP_HOST: if (!PMSG_IS_AUTO(msg)) { @@ -1559,6 +1559,8 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg) break; } + dwc3_core_exit(dwc); + return 0; } @@ -1568,12 +1570,16 @@ static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg) int ret; u32 reg; + ret = dwc3_core_init(dwc); + if (ret) + return ret; + switch (dwc->current_dr_role) { case DWC3_GCTL_PRTCAP_DEVICE: ret = dwc3_core_init_for_resume(dwc); if (ret) return ret; - + case DWC3_GCTL_PRTCAP_OTG: dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_DEVICE); spin_lock_irqsave(&dwc->lock, flags); dwc3_gadget_resume(dwc); @@ -1679,6 +1685,7 @@ static int dwc3_runtime_resume(struct device *dev) switch (dwc->current_dr_role) { case DWC3_GCTL_PRTCAP_DEVICE: + case DWC3_GCTL_PRTCAP_OTG: dwc3_gadget_process_pending_events(dwc); break; case DWC3_GCTL_PRTCAP_HOST: @@ -1688,7 +1695,6 @@ static int dwc3_runtime_resume(struct device *dev) } pm_runtime_mark_last_busy(dev); - /* maybe drop this? */ pm_runtime_get(dev); return 0; @@ -1700,6 +1706,7 @@ static int dwc3_runtime_idle(struct device *dev) switch (dwc->current_dr_role) { case DWC3_GCTL_PRTCAP_DEVICE: + case DWC3_GCTL_PRTCAP_OTG: if (dwc3_runtime_checks(dwc)) return -EBUSY; break; -- 2.34.1