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