From 5cd329fd35f4089eccdf9b2bce7d1e435259b6cd Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Fri, 16 Dec 2016 15:14:13 +0800 Subject: [PATCH] usb: dwc3: redo the mode setting at core init When dwc3 core enters into suspend mode, the PD may turn off for power saving, which will cause dwc3 controller lost the mode operation when resuming time. This adds redo the mode setting into dwc3_core_init() function to avoid this issue. BUG=Redmine: Defect#110481 TEST=rk3399-sapphire-excavator-box(CVTE), check if USB3.0 HUB can be enumerated after PM resume. Change-Id: I61c512e9c368afc665cd4d5900367079ed22a34e Signed-off-by: Frank Wang --- drivers/usb/dwc3/core.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index cc8f5abfac09..00eb077e9b51 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -689,6 +689,18 @@ static int dwc3_core_init(struct dwc3 *dwc) goto err4; } + switch (dwc->dr_mode) { + case USB_DR_MODE_PERIPHERAL: + dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE); + break; + case USB_DR_MODE_HOST: + dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST); + break; + default: + dev_dbg(dwc->dev, "Unsupported mode %d\n", dwc->dr_mode); + break; + } + return 0; err4: