[PATCH 4/4] usb: ohci-at91: Add USB PHY functionality
Sergiu Moga
sergiu.moga at microchip.com
Fri Dec 23 13:34:55 CET 2022
Add the ability to enable/disable whatever USB PHY's are
passed to the AT91 OHCI driver through DT.
Signed-off-by: Sergiu Moga <sergiu.moga at microchip.com>
Tested-by: Mihai Sain <mihai.sain at microchip.com>
---
drivers/usb/host/ohci-at91.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index 5cf8f283e5..217f31b402 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -74,6 +74,10 @@ int usb_cpu_init_fail(void)
#include <usb.h>
#include "ohci.h"
+#if CONFIG_IS_ENABLED(PHY_MICROCHIP_SAMA7_USB)
+#include <generic-phy.h>
+#endif
+
#define AT91_MAX_USBH_PORTS 3
#define at91_for_each_port(index) \
@@ -91,6 +95,10 @@ struct ohci_at91_priv {
struct clk *fclk;
struct clk *hclk;
bool clocked;
+
+#if CONFIG_IS_ENABLED(PHY_MICROCHIP_SAMA7_USB)
+ struct phy phy[AT91_MAX_USBH_PORTS];
+#endif
};
static void at91_start_clock(struct ohci_at91_priv *ohci_at91)
@@ -98,6 +106,13 @@ static void at91_start_clock(struct ohci_at91_priv *ohci_at91)
if (ohci_at91->clocked)
return;
+#if CONFIG_IS_ENABLED(PHY_MICROCHIP_SAMA7_USB)
+ int i;
+
+ at91_for_each_port(i)
+ generic_phy_power_on(&ohci_at91->phy[i]);
+#endif
+
clk_set_rate(ohci_at91->fclk, 48000000);
clk_prepare_enable(ohci_at91->hclk);
clk_prepare_enable(ohci_at91->iclk);
@@ -110,6 +125,13 @@ static void at91_stop_clock(struct ohci_at91_priv *ohci_at91)
if (!ohci_at91->clocked)
return;
+#if CONFIG_IS_ENABLED(PHY_MICROCHIP_SAMA7_USB)
+ int i;
+
+ at91_for_each_port(i)
+ generic_phy_power_off(&ohci_at91->phy[i]);
+#endif
+
clk_disable_unprepare(ohci_at91->fclk);
clk_disable_unprepare(ohci_at91->iclk);
clk_disable_unprepare(ohci_at91->hclk);
@@ -215,6 +237,14 @@ static int ohci_atmel_probe(struct udevice *dev)
goto fail;
}
+#if CONFIG_IS_ENABLED(PHY_MICROCHIP_SAMA7_USB)
+ at91_for_each_port(i) {
+ generic_phy_get_by_index(dev, i, &ohci_at91->phy[i]);
+ generic_phy_init(&ohci_at91->phy[i]);
+ generic_phy_configure(&ohci_at91->phy[i], NULL);
+ }
+#endif
+
at91_start_hc(dev);
return ohci_register(dev, regs);
@@ -229,6 +259,7 @@ fail:
static const struct udevice_id ohci_usb_ids[] = {
{ .compatible = "atmel,at91rm9200-ohci", },
+ { .compatible = "microchip,sama7g5-ohci", },
{ }
};
--
2.34.1
More information about the U-Boot
mailing list