[U-Boot] [PATCH 05/16] musb-new: sunxi: a64: add support to select shared phy

Jagan Teki jagan at amarulasolutions.com
Tue Dec 12 06:58:20 UTC 2017


From: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>

Allwinner a64 has a shared PHY for MUSB and USB-OTG-HCI,
so add function to select the PHY route.

Signed-off-by: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
[jagan: reworked for remove func support]
Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>
---
 drivers/usb/musb-new/sunxi.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/drivers/usb/musb-new/sunxi.c b/drivers/usb/musb-new/sunxi.c
index 2e22497..45ddf20 100644
--- a/drivers/usb/musb-new/sunxi.c
+++ b/drivers/usb/musb-new/sunxi.c
@@ -45,6 +45,9 @@
 #define  USBC_REG_o_PHYCTL	0x0404
 #define  USBC_REG_o_PHYBIST	0x0408
 #define  USBC_REG_o_PHYTUNE	0x040c
+#if defined(CONFIG_MACH_SUN50I)
+#define	SUNXI_OTG_PHY_CFG	0x0420
+#endif
 
 #define  USBC_REG_o_VEND0	0x0043
 
@@ -162,6 +165,16 @@ static void USBC_ConfigFIFO_Base(void)
 	writel(reg_value, SUNXI_SRAMC_BASE + 0x04);
 }
 
+#if defined(CONFIG_MACH_SUN50I)
+static void USBC_SelectPhyToDevice(__iomem void *base, bool routePHYtoOTG)
+{
+	/* The OTG and HCI0 controllers share a single PHY in the A64.
+	 * Select either 'to OTG' (1) or 'to HCI' (0).
+	 */
+	clrsetbits_le32(base + SUNXI_OTG_PHY_CFG, 1, routePHYtoOTG ? 1 : 0);
+}
+#endif
+
 /******************************************************************************
  * Needed for the DFU polling magic
  ******************************************************************************/
@@ -267,6 +280,9 @@ static int sunxi_musb_init(struct musb *musb)
 	setbits_le32(&ccm->ahb_reset0_cfg, 1 << AHB_GATE_OFFSET_USB0);
 #endif
 	sunxi_usb_phy_init(0);
+#if defined(CONFIG_MACH_SUN50I)
+	USBC_SelectPhyToDevice(musb->mregs, true);
+#endif
 
 	USBC_ConfigFIFO_Base();
 	USBC_EnableDpDmPullUp(musb->mregs);
@@ -342,6 +358,9 @@ static int musb_usb_remove(struct udevice *dev)
 	musb_stop(host->host);
 
 	sunxi_usb_phy_exit(0);
+#if defined(CONFIG_MACH_SUN50I)
+	USBC_SelectPhyToDevice(host->host->mregs, false);
+#endif
 #ifdef CONFIG_SUNXI_GEN_SUN6I
 	clrbits_le32(&ccm->ahb_reset0_cfg, 1 << AHB_GATE_OFFSET_USB0);
 #endif
-- 
2.7.4



More information about the U-Boot mailing list