[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