Arndale board has AX88760, which is USB 2.0 Hub & USB 2.0 Ethernet Combo
controller, connected to HSIC Phy of USB host controller via USB3503 hub.

This patch implements a board specific board_usb_init function in ehci driver
to perform reset sequence for USB3503 hub and enables the relevant config
options for network to work.

Signed-off-by: Inderpal Singh <[email protected]>
Signed-off-by: Chander Kashyap <[email protected]>
---
 board/samsung/arndale/arndale.c |   13 +++++++++++++
 drivers/usb/host/ehci-exynos.c  |   10 ++++++++++
 include/configs/arndale.h       |    4 ++++
 3 files changed, 27 insertions(+)

diff --git a/board/samsung/arndale/arndale.c b/board/samsung/arndale/arndale.c
index 052fecd..deca348 100644
--- a/board/samsung/arndale/arndale.c
+++ b/board/samsung/arndale/arndale.c
@@ -7,10 +7,23 @@
 #include <common.h>
 #include <asm/arch/pinmux.h>
 #include <asm/arch/dwmmc.h>
+#include <asm/arch/gpio.h>
 #include <asm/arch/power.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#ifdef CONFIG_USB_EHCI_EXYNOS
+void exynos_board_usb_init(int value)
+{
+       struct exynos5_gpio_part1 *gpio = (struct exynos5_gpio_part1 *)
+                                               samsung_get_base_gpio_part1();
+
+       /* Configure gpios for usb 3503 hub's reset and connect */
+       s5p_gpio_direction_output(&gpio->x3, 5, value);
+       s5p_gpio_direction_output(&gpio->d1, 7, value);
+}
+#endif
+
 int board_init(void)
 {
        gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL);
diff --git a/drivers/usb/host/ehci-exynos.c b/drivers/usb/host/ehci-exynos.c
index 88e6466..4be6a60 100644
--- a/drivers/usb/host/ehci-exynos.c
+++ b/drivers/usb/host/ehci-exynos.c
@@ -175,6 +175,12 @@ static void reset_usb_phy(struct exynos_usb_phy *usb)
        set_usbhost_phy_ctrl(POWER_USB_HOST_PHY_CTRL_DISABLE);
 }
 
+inline void __exynos_board_usb_init(int value)
+{
+}
+void exynos_board_usb_init(int)
+        __attribute__((weak, alias("__exynos_board_usb_init")));
+
 /*
  * EHCI-initialization
  * Create the appropriate control structures to manage
@@ -201,8 +207,12 @@ int ehci_hcd_init(int index, enum usb_init_type init,
                gpio_direction_output(ctx->vbus_gpio.gpio, 1);
 #endif
 
+       exynos_board_usb_init(0);
+
        setup_usb_phy(ctx->usb);
 
+       exynos_board_usb_init(1);
+
        *hccr = ctx->hcd;
        *hcor = (struct ehci_hcor *)((uint32_t) *hccr
                                + HC_LENGTH(ehci_readl(&(*hccr)->cr_capbase)));
diff --git a/include/configs/arndale.h b/include/configs/arndale.h
index b7fb29e..eda0e4f 100644
--- a/include/configs/arndale.h
+++ b/include/configs/arndale.h
@@ -116,6 +116,10 @@
 #define CONFIG_USB_EHCI_EXYNOS
 #define CONFIG_USB_STORAGE
 
+#define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS     3
+#define CONFIG_USB_HOST_ETHER
+#define CONFIG_USB_ETHER_ASIX
+
 /* MMC SPL */
 #define CONFIG_EXYNOS_SPL
 #define CONFIG_SPL
-- 
1.7.9.5

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to