usb: dwc2: gadget: Move gadget phy init into core phy init
authorJules Maselbas <jmaselbas@kalray.eu>
Fri, 5 Apr 2019 13:35:33 +0000 (15:35 +0200)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Fri, 3 May 2019 06:13:48 +0000 (09:13 +0300)
Most of the phy initialization is shared between host and gadget,
this adds the turnaround configuration only used by gadgets to
the global phy init.

Acked-by: Minas Harutyunyan <hminas@synopsys.com>
Signed-off-by: Jules Maselbas <jmaselbas@kalray.eu>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc2/core.c
drivers/usb/dwc2/gadget.c

index 01ac4a0..8b499d6 100644 (file)
@@ -1152,6 +1152,15 @@ static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
                usbcfg &= ~(GUSBCFG_ULPI_UTMI_SEL | GUSBCFG_PHYIF16);
                if (hsotg->params.phy_utmi_width == 16)
                        usbcfg |= GUSBCFG_PHYIF16;
+
+               /* Set turnaround time */
+               if (dwc2_is_device_mode(hsotg)) {
+                       usbcfg &= ~GUSBCFG_USBTRDTIM_MASK;
+                       if (hsotg->params.phy_utmi_width == 16)
+                               usbcfg |= 5 << GUSBCFG_USBTRDTIM_SHIFT;
+                       else
+                               usbcfg |= 9 << GUSBCFG_USBTRDTIM_SHIFT;
+               }
                break;
        default:
                dev_err(hsotg->dev, "FS PHY selected at HS!\n");
index 614f8c3..2e2f9cb 100644 (file)
@@ -3314,29 +3314,14 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
 
        /* keep other bits untouched (so e.g. forced modes are not lost) */
        usbcfg = dwc2_readl(hsotg, GUSBCFG);
-       /* remove the HNP/SRP */
-       usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP |
-               GUSBCFG_HNPCAP);
+       usbcfg &= ~GUSBCFG_TOUTCAL_MASK;
        usbcfg |= GUSBCFG_TOUTCAL(7);
 
-       if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS &&
-           (hsotg->params.speed == DWC2_SPEED_PARAM_FULL ||
-            hsotg->params.speed == DWC2_SPEED_PARAM_LOW)) {
-               /* FS/LS Dedicated Transceiver Interface */
-               usbcfg |= GUSBCFG_PHYSEL;
-       } else if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_UTMI) {
-               if (hsotg->params.phy_utmi_width == 16)
-                       usbcfg |= GUSBCFG_PHYIF16;
-
-               /* Set turnaround time */
-               usbcfg &= ~GUSBCFG_USBTRDTIM_MASK;
-               if (hsotg->params.phy_utmi_width == 16)
-                       usbcfg |= 5 << GUSBCFG_USBTRDTIM_SHIFT;
-               else
-                       usbcfg |= 9 << GUSBCFG_USBTRDTIM_SHIFT;
-       }
+       /* remove the HNP/SRP and set the PHY */
+       usbcfg &= ~(GUSBCFG_SRPCAP | GUSBCFG_HNPCAP);
+        dwc2_writel(hsotg, usbcfg, GUSBCFG);
 
-       dwc2_writel(hsotg, usbcfg, GUSBCFG);
+       dwc2_phy_init(hsotg, true);
 
        dwc2_hsotg_init_fifo(hsotg);