aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>2011-05-09 23:04:51 +0200
committerJohn Rigby <john.rigby@linaro.org>2011-06-28 15:57:52 +0100
commit19f2278c9e1cba3550942492bb89c996b4b524e2 (patch)
tree9da71a1981354e70de9f7737554b137881a09418
parent977cc1560eea474e2d8ed1f6fae6b294e9b30772 (diff)
downloadu-boot-linaro-stable-19f2278c9e1cba3550942492bb89c996b4b524e2.tar.gz
omap4_panda: add support for EHCI
Signed-off-by: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org> Signed-off-by: Ricardo Salveti de Araujo <ricardo.salveti@canonical.com>
-rw-r--r--board/ti/panda/Makefile4
-rw-r--r--board/ti/panda/ehci-panda.c59
2 files changed, 62 insertions, 1 deletions
diff --git a/board/ti/panda/Makefile b/board/ti/panda/Makefile
index 218640373..253567cc8 100644
--- a/board/ti/panda/Makefile
+++ b/board/ti/panda/Makefile
@@ -25,7 +25,9 @@ include $(TOPDIR)/config.mk
LIB = $(obj)lib$(BOARD).o
-COBJS := panda.o
+COBJS-$(CONFIG_USB_EHCI) += ehci-panda.o
+
+COBJS := $(COBJS-y) panda.o
SRCS := $(COBJS:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS))
diff --git a/board/ti/panda/ehci-panda.c b/board/ti/panda/ehci-panda.c
new file mode 100644
index 000000000..b1e247c19
--- /dev/null
+++ b/board/ti/panda/ehci-panda.c
@@ -0,0 +1,59 @@
+/*
+ * OMAP4 EHCI port, copied from linux/drivers/usb/host/ehci-omap.c
+ *
+ * Copyright (C) 2007-2010 Texas Instruments, Inc.
+ * Author: Vikram Pandita <vikram.pandita@ti.com>
+ * Author: Anand Gadiyar <gadiyar@ti.com>
+ */
+
+#include <asm/arch/gpio.h>
+#include <asm/arch/ehci.h>
+
+#define GPIO_HUB_POWER 1
+#define GPIO_HUB_NRESET 62
+
+int ehci_hcd_init(void)
+{
+ unsigned long base = get_timer(0);
+ unsigned reg = 0, port = 0;
+ int rc;
+
+ /* disable the power to the usb hub prior to init */
+ rc = omap_request_gpio(GPIO_HUB_POWER);
+ if (rc < 0) {
+ printf("Could not request gpio %d\n", GPIO_HUB_POWER);
+ return rc;
+ }
+
+ rc = omap_request_gpio(GPIO_HUB_NRESET);
+ if (rc < 0) {
+ printf("Could not request gpio %d\n", GPIO_HUB_NRESET);
+ omap_free_gpio(GPIO_HUB_POWER);
+ return rc;
+ }
+
+ omap_set_gpio_direction(GPIO_HUB_POWER, 0);
+ omap_set_gpio_dataout(GPIO_HUB_POWER, 0);
+ omap_set_gpio_direction(GPIO_HUB_NRESET, 0);
+ omap_set_gpio_dataout(GPIO_HUB_NRESET, 0);
+ omap_set_gpio_dataout(GPIO_HUB_NRESET, 1);
+
+ rc = omap4_ehci_hcd_init();
+
+ if (rc < 0)
+ return rc;
+
+ omap_set_gpio_dataout(GPIO_HUB_POWER, 1);
+
+ return 0;
+}
+
+int ehci_hcd_stop(void)
+{
+ omap4_ehci_hcd_stop();
+
+ omap_set_gpio_dataout(GPIO_HUB_POWER, 0);
+ omap_set_gpio_dataout(GPIO_HUB_NRESET, 0);
+ omap_free_gpio(GPIO_HUB_POWER);
+ omap_free_gpio(GPIO_HUB_NRESET);
+}