[U-Boot] [PATCH 5/6] OMAP4: Panda: Add hcd init and enable ehci support.
Govindraj.R
govindraj.ti at gmail.com
Wed Dec 14 13:21:26 CET 2011
From: "Govindraj.R" <govindraj.raja at ti.com>
Add ehci_hcd_init and thus enable ehci support for panda board.
On panda board ehci port1 is connected to a smsc3220 hub,
and ethernet is connected to GPIO_1 and hub reset is through GPIO_62.
ethernt lan9500 chip is connted to hub.
Signed-off-by: Govindraj.R <govindraj.raja at ti.com>
---
board/ti/panda/panda.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 70 insertions(+), 0 deletions(-)
diff --git a/board/ti/panda/panda.c b/board/ti/panda/panda.c
index fc8c0b4..adf906e 100644
--- a/board/ti/panda/panda.c
+++ b/board/ti/panda/panda.c
@@ -26,9 +26,15 @@
#include <asm/arch/mmc_host_def.h>
#include <asm/arch/clocks.h>
#include <asm/arch/gpio.h>
+#include <asm/gpio.h>
#include "panda_mux_data.h"
+#ifdef CONFIG_USB_EHCI
+#include <usb.h>
+#include <asm/ehci-omap.h>
+#endif
+
#define PANDA_ULPI_PHY_TYPE_GPIO 182
DECLARE_GLOBAL_DATA_PTR;
@@ -177,6 +183,70 @@ int board_mmc_init(bd_t *bis)
}
#endif
+#ifdef CONFIG_USB_EHCI
+
+#define GPIO_ETH_POWER 1
+#define GPIO_HUB_NRESET 62
+
+static struct omap_usbhs_board_data usbhs_bdata = {
+ .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
+ .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
+ .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED
+};
+
+int ehci_hcd_init(void)
+{
+ int rc;
+ unsigned int utmi_clk;
+
+ /* disable the power to the usb hub prior to init */
+ rc = gpio_request(GPIO_ETH_POWER, "");
+ if (rc < 0) {
+ printf("Could not request gpio %d\n", GPIO_ETH_POWER);
+ return rc;
+ }
+
+ rc = gpio_request(GPIO_HUB_NRESET, "");
+ if (rc < 0) {
+ printf("Could not request gpio %d\n", GPIO_HUB_NRESET);
+ gpio_free(GPIO_ETH_POWER);
+ return rc;
+ }
+
+ gpio_direction_output(GPIO_ETH_POWER, 0);
+ gpio_set_value(GPIO_ETH_POWER, 0);
+ gpio_direction_output(GPIO_HUB_NRESET, 0);
+ gpio_set_value(GPIO_HUB_NRESET, 0);
+ gpio_set_value(GPIO_HUB_NRESET, 1);
+
+ /* Now we can enable our port clocks after HUB reset */
+ utmi_clk = readl((void *)CM_L3INIT_HSUSBHOST_CLKCTRL);
+ utmi_clk |= HSUSBHOST_CLKCTRL_CLKSEL_UTMI_P1_MASK;
+ sr32((void *)CM_L3INIT_HSUSBHOST_CLKCTRL, 0, 32, utmi_clk);
+
+ rc = omap_ehci_hcd_init(&usbhs_bdata);
+ if (rc < 0)
+ return rc;
+
+ gpio_set_value(GPIO_ETH_POWER, 1);
+ return 0;
+}
+
+int ehci_hcd_stop(void)
+{
+ int ret;
+
+ ret = omap_ehci_hcd_stop();
+
+ gpio_set_value(GPIO_ETH_POWER, 0);
+ gpio_set_value(GPIO_HUB_NRESET, 0);
+ gpio_free(GPIO_ETH_POWER);
+ gpio_free(GPIO_HUB_NRESET);
+
+ return ret;
+}
+#endif
+
/*
* get_board_rev() - get board revision
*/
--
1.7.5.4
More information about the U-Boot
mailing list