diff options
Diffstat (limited to 'drivers/usb/dwc3/core.c')
| -rw-r--r-- | drivers/usb/dwc3/core.c | 30 | 
1 files changed, 13 insertions, 17 deletions
| diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 01866dcb953b..0104a80b185e 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -264,19 +264,6 @@ static int dwc3_core_soft_reset(struct dwc3 *dwc)  {  	u32		reg;  	int		retries = 1000; -	int		ret; - -	usb_phy_init(dwc->usb2_phy); -	usb_phy_init(dwc->usb3_phy); -	ret = phy_init(dwc->usb2_generic_phy); -	if (ret < 0) -		return ret; - -	ret = phy_init(dwc->usb3_generic_phy); -	if (ret < 0) { -		phy_exit(dwc->usb2_generic_phy); -		return ret; -	}  	/*  	 * We're resetting only the device side because, if we're in host mode, @@ -310,9 +297,6 @@ static int dwc3_core_soft_reset(struct dwc3 *dwc)  			udelay(1);  	} while (--retries); -	phy_exit(dwc->usb3_generic_phy); -	phy_exit(dwc->usb2_generic_phy); -  	return -ETIMEDOUT;  done: @@ -982,9 +966,21 @@ static int dwc3_core_init(struct dwc3 *dwc)  		dwc->phys_ready = true;  	} +	usb_phy_init(dwc->usb2_phy); +	usb_phy_init(dwc->usb3_phy); +	ret = phy_init(dwc->usb2_generic_phy); +	if (ret < 0) +		goto err0a; + +	ret = phy_init(dwc->usb3_generic_phy); +	if (ret < 0) { +		phy_exit(dwc->usb2_generic_phy); +		goto err0a; +	} +  	ret = dwc3_core_soft_reset(dwc);  	if (ret) -		goto err0a; +		goto err1;  	if (hw_mode == DWC3_GHWPARAMS0_MODE_DRD &&  	    !DWC3_VER_IS_WITHIN(DWC3, ANY, 194A)) { |