
In case PHY support is enabled, use the generic EHCI PHY support to start and stop the PHY.
Signed-off-by: Marek Vasut marex@denx.de Cc: Fabio Estevam festevam@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Stefano Babic sbabic@denx.de Cc: Ye Li ye.li@nxp.com Cc: uboot-imx uboot-imx@nxp.com --- V2: Shift ifdefs around error handling goto labels to avoid warnings that the labels are defined but not used --- drivers/usb/host/ehci-mx6.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c index 68f6ecc872..8e20941855 100644 --- a/drivers/usb/host/ehci-mx6.c +++ b/drivers/usb/host/ehci-mx6.c @@ -425,6 +425,7 @@ struct ehci_mx6_priv_data { struct usb_ehci *ehci; struct udevice *vbus_supply; struct clk clk; + struct phy phy; enum usb_init_type init_type; int portnr; void __iomem *phy_addr; @@ -684,22 +685,32 @@ static int ehci_usb_probe(struct udevice *dev)
mdelay(10);
+#if defined(CONFIG_PHY) + ret = ehci_setup_phy(dev, &priv->phy, 0); + if (ret) + goto err_regulator; +#endif + hccr = (struct ehci_hccr *)((uint32_t)&ehci->caplength); hcor = (struct ehci_hcor *)((uint32_t)hccr + HC_LENGTH(ehci_readl(&(hccr)->cr_capbase)));
ret = ehci_register(dev, hccr, hcor, &mx6_ehci_ops, 0, priv->init_type); if (ret) - goto err_regulator; + goto err_phy;
return ret;
+err_phy: +#if defined(CONFIG_PHY) + ehci_shutdown_phy(dev, &priv->phy); err_regulator: +#endif #if CONFIG_IS_ENABLED(DM_REGULATOR) if (priv->vbus_supply) regulator_set_enable(priv->vbus_supply, false); -#endif err_clk: +#endif #if CONFIG_IS_ENABLED(CLK) clk_disable(&priv->clk); #else @@ -715,6 +726,10 @@ int ehci_usb_remove(struct udevice *dev)
ehci_deregister(dev);
+#if defined(CONFIG_PHY) + ehci_shutdown_phy(dev, &priv->phy); +#endif + #if CONFIG_IS_ENABLED(DM_REGULATOR) if (priv->vbus_supply) regulator_set_enable(priv->vbus_supply, false);