diff options
Diffstat (limited to 'drivers/usb/host/ehci-hcd.c')
-rw-r--r-- | drivers/usb/host/ehci-hcd.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 663f748ffc..199b3a8b26 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -1675,3 +1675,69 @@ struct dm_usb_ops ehci_usb_ops = { }; #endif + +#ifdef CONFIG_PHY +int ehci_setup_phy(struct udevice *dev, struct phy *phy, int index) +{ + int ret; + + if (!phy) + return 0; + + ret = generic_phy_get_by_index(dev, index, phy); + if (ret) { + if (ret != -ENOENT) { + dev_err(dev, "failed to get usb phy\n"); + return ret; + } + } else { + ret = generic_phy_init(phy); + if (ret) { + dev_err(dev, "failed to init usb phy\n"); + return ret; + } + + ret = generic_phy_power_on(phy); + if (ret) { + dev_err(dev, "failed to power on usb phy\n"); + return generic_phy_exit(phy); + } + } + + return 0; +} + +int ehci_shutdown_phy(struct udevice *dev, struct phy *phy) +{ + int ret = 0; + + if (!phy) + return 0; + + if (generic_phy_valid(phy)) { + ret = generic_phy_power_off(phy); + if (ret) { + dev_err(dev, "failed to power off usb phy\n"); + return ret; + } + + ret = generic_phy_exit(phy); + if (ret) { + dev_err(dev, "failed to power off usb phy\n"); + return ret; + } + } + + return 0; +} +#else +int ehci_setup_phy(struct udevice *dev, struct phy *phy, int index) +{ + return 0; +} + +int ehci_shutdown_phy(struct udevice *dev, struct phy *phy) +{ + return 0; +} +#endif |