From: Tobias Jakobi <tjak...@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 <tjak...@math.uni-bielefeld.de>
Signed-off-by: Anand Moon <linux.am...@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

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to