|
@@ -765,11 +765,10 @@ static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg)
|
|
|
* dwc2_core_init() - Initializes the DWC_otg controller registers and
|
|
|
* prepares the core for device mode or host mode operation
|
|
|
*
|
|
|
- * @hsotg: Programming view of the DWC_otg controller
|
|
|
- * @select_phy: If true then also set the Phy type
|
|
|
- * @irq: If >= 0, the irq to register
|
|
|
+ * @hsotg: Programming view of the DWC_otg controller
|
|
|
+ * @initial_setup: If true then this is the first init for this instance.
|
|
|
*/
|
|
|
-int dwc2_core_init(struct dwc2_hsotg *hsotg, bool select_phy, int irq)
|
|
|
+int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup)
|
|
|
{
|
|
|
u32 usbcfg, otgctl;
|
|
|
int retval;
|
|
@@ -791,18 +790,26 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool select_phy, int irq)
|
|
|
|
|
|
dwc2_writel(usbcfg, hsotg->regs + GUSBCFG);
|
|
|
|
|
|
- /* Reset the Controller */
|
|
|
- retval = dwc2_core_reset(hsotg);
|
|
|
- if (retval) {
|
|
|
- dev_err(hsotg->dev, "%s(): Reset failed, aborting\n",
|
|
|
- __func__);
|
|
|
- return retval;
|
|
|
+ /*
|
|
|
+ * Reset the Controller
|
|
|
+ *
|
|
|
+ * We only need to reset the controller if this is a re-init.
|
|
|
+ * For the first init we know for sure that earlier code reset us (it
|
|
|
+ * needed to in order to properly detect various parameters).
|
|
|
+ */
|
|
|
+ if (!initial_setup) {
|
|
|
+ retval = dwc2_core_reset(hsotg);
|
|
|
+ if (retval) {
|
|
|
+ dev_err(hsotg->dev, "%s(): Reset failed, aborting\n",
|
|
|
+ __func__);
|
|
|
+ return retval;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* This needs to happen in FS mode before any other programming occurs
|
|
|
*/
|
|
|
- retval = dwc2_phy_init(hsotg, select_phy);
|
|
|
+ retval = dwc2_phy_init(hsotg, initial_setup);
|
|
|
if (retval)
|
|
|
return retval;
|
|
|
|