From: Frank Wang Date: Fri, 16 Dec 2016 07:14:13 +0000 (+0800) Subject: usb: dwc3: redo the mode setting at core init X-Git-Tag: firefly_0821_release~1020 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=5cd329fd35f4089eccdf9b2bce7d1e435259b6cd;p=firefly-linux-kernel-4.4.55.git 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 --- 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: