[U-Boot] [RFC 1/6] odroid: exynos: USB initialization on the U3/X2
Anand Moon
linux.amoon at gmail.com
Mon Apr 1 11:52:27 UTC 2019
From: Tobias Jakobi <tjakobi at math.uni-bielefeld.de>
Rename board_usb_init() to exynos_usb_init() and call it
early in the Exynos EHCI driver when probing.
This kind of works. After a 'usb start; usb stop; usb start'
cycle the attached devices are recognized.
Add small delay between gpio_direction_output to stable
initialization of usb gpio pins.
Signed-off-by: Tobias Jakobi <tjakobi at math.uni-bielefeld.de>
Signed-off-by: Anand Moon <linux.amoon at gmail.com>
---
Reoder the exynos_usb_init so that "usb start" command initialization
correcly.
---
---
board/samsung/odroid/odroid.c | 14 +++++++++-----
drivers/usb/host/ehci-exynos.c | 7 +++++++
2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/board/samsung/odroid/odroid.c b/board/samsung/odroid/odroid.c
index 3e594fd850..79d14ead01 100644
--- a/board/samsung/odroid/odroid.c
+++ b/board/samsung/odroid/odroid.c
@@ -468,8 +468,6 @@ struct dwc2_plat_otg_data s5pc210_otg_data = {
};
#endif
-#if defined(CONFIG_USB_GADGET) || defined(CONFIG_CMD_USB)
-
static void set_usb3503_ref_clk(void)
{
#ifdef CONFIG_BOARD_TYPES
@@ -490,9 +488,8 @@ static void set_usb3503_ref_clk(void)
#endif /* CONFIG_BOARD_TYPES */
}
-int board_usb_init(int index, enum usb_init_type init)
+int exynos_usb_init(void)
{
-#ifdef CONFIG_CMD_USB
struct udevice *dev;
int ret;
@@ -501,6 +498,7 @@ int board_usb_init(int index, enum usb_init_type init)
/* Disconnect, Reset, Connect */
gpio_direction_output(EXYNOS4X12_GPIO_X34, 0);
gpio_direction_output(EXYNOS4X12_GPIO_X35, 0);
+ sdelay(200000);
gpio_direction_output(EXYNOS4X12_GPIO_X35, 1);
gpio_direction_output(EXYNOS4X12_GPIO_X34, 1);
@@ -530,7 +528,13 @@ int board_usb_init(int index, enum usb_init_type init)
pr_err("Regulator %s value setting error: %d\n", dev->name, ret);
return ret;
}
-#endif
+
+ return 0;
+}
+
+#ifdef CONFIG_USB_GADGET
+int board_usb_init(int index, enum usb_init_type init)
+{
debug("USB_udc_probe\n");
return dwc2_udc_probe(&s5pc210_otg_data);
}
diff --git a/drivers/usb/host/ehci-exynos.c b/drivers/usb/host/ehci-exynos.c
index fabc662eb6..b0f7bd4936 100644
--- a/drivers/usb/host/ehci-exynos.c
+++ b/drivers/usb/host/ehci-exynos.c
@@ -31,6 +31,8 @@ struct exynos_ehci_platdata {
struct gpio_desc vbus_gpio;
};
+extern int exynos_usb_init(void);
+
/**
* Contains pointers to register base addresses
* for the usb controller.
@@ -152,6 +154,11 @@ static void exynos4412_setup_usb_phy(struct exynos4412_usb_phy *usb)
setbits_le32(&usb->usbphyrstcon, (RSTCON_HOSTPHY_SWRST | RSTCON_SWRST));
udelay(10);
clrbits_le32(&usb->usbphyrstcon, (RSTCON_HOSTPHY_SWRST | RSTCON_SWRST));
+
+ /*
+ * "usb start" initialize the usb driver
+ */
+ exynos_usb_init();
}
static void setup_usb_phy(struct exynos_usb_phy *usb)
--
2.21.0
More information about the U-Boot
mailing list