Skip to contentSkip to conversation

usb: dwc3: core: Fix broken system suspend/resume on AM437x

PATCH New Roger Quadros 1 participant 1 message Mar 16, 2018

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 usb: dwc3: core: Fix broken system suspend/resume on AM437x

On TI's AM437x, the DWC3 controller looses state after a system suspend/resume. We are re-initializing the controller but we miss restoring the PRTCAP register. This causes USB host to break on AM437x after a system suspend/resume.

Fix this by restoring the PRTCAP register on system resume.

---
 drivers/usb/dwc3/core.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/usb/dwc3/core.c +2 -0
index e8890c0..5becd7f 100644
@@ -1374,6 +1374,7 @@ static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg)
 		if (ret)
 			return ret;
 
+		dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_DEVICE);
 		spin_lock_irqsave(&dwc->lock, flags);
 		dwc3_gadget_resume(dwc);
 		spin_unlock_irqrestore(&dwc->lock, flags);
@@ -1384,6 +1385,7 @@ static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg)
 			ret = dwc3_core_init(dwc);
 			if (ret)
 				return ret;
+			dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST);
 		}
 		break;
 	case DWC3_GCTL_PRTCAP_OTG: