summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2011-01-19 13:58:39 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2011-01-20 10:32:24 +0100
commit67292676434827f9978f61710aadc820b2a5f833 (patch)
treef3e690afcf1fe18a5c85df8d000517960d51b016
parent6e7c00feb1d650c99eaeaa65bf47db175c285580 (diff)
downloadbarebox-67292676434827f9978f61710aadc820b2a5f833.tar.gz
barebox-67292676434827f9978f61710aadc820b2a5f833.tar.xz
ARM Chumby: Add USB support
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--arch/arm/boards/chumby_falconwing/falconwing.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/arch/arm/boards/chumby_falconwing/falconwing.c b/arch/arm/boards/chumby_falconwing/falconwing.c
index 76ff9068ff..2887f8cf91 100644
--- a/arch/arm/boards/chumby_falconwing/falconwing.c
+++ b/arch/arm/boards/chumby_falconwing/falconwing.c
@@ -22,6 +22,7 @@
#include <environment.h>
#include <errno.h>
#include <mci.h>
+#include <usb/ehci.h>
#include <asm/armlinux.h>
#include <asm/io.h>
#include <generated/mach-types.h>
@@ -29,6 +30,7 @@
#include <mach/clock.h>
#include <mach/mci.h>
#include <mach/fb.h>
+#include <mach/usb.h>
static struct memory_platform_data ram_pdata = {
.name = "ram0",
@@ -197,10 +199,10 @@ static const uint32_t pad_setup[] = {
/* backlight control, to be controled by PWM, here we only want to disable it */
PWM2_GPIO | GPIO_OUT | GPIO_VALUE(0), /* 1 enables, 0 disables the backlight */
- /* send a reset signal to the USB hub */
+ /* USB hub reset (active low) */
AUART1_TX_GPIO | GPIO_OUT | GPIO_VALUE(0),
- /* USB power disable (FIXME what level to be switched off) */
+ /* USB power (active high) */
AUART1_CTS_GPIO | GPIO_OUT | GPIO_VALUE(0),
/* Detecting if a display is connected (0 = display attached) (external pull up) */
@@ -298,6 +300,35 @@ static int register_persistant_environment(void)
return devfs_add_partition("disk0.1", 0, cdev->size, DEVFS_PARTITION_FIXED, "env0");
}
+static struct ehci_platform_data chumby_usb_pdata = {
+ .flags = EHCI_HAS_TT,
+ .hccr_offset = 0x100,
+ .hcor_offset = 0x140,
+};
+
+static struct device_d usb_dev = {
+ .name = "ehci",
+ .id = -1,
+ .map_base = IMX_USB_BASE,
+ .size = 0x200,
+ .platform_data = &chumby_usb_pdata,
+};
+
+#define GPIO_USB_HUB_RESET 29
+#define GPIO_USB_HUB_POWER 26
+
+static void falconwing_init_usb(void)
+{
+ /* power USB hub */
+ gpio_direction_output(GPIO_USB_HUB_POWER, 1);
+ mdelay(1);
+ /* bring USB hub out of reset */
+ gpio_direction_output(GPIO_USB_HUB_RESET, 1);
+
+ imx_usb_phy_enable();
+ register_device(&usb_dev);
+}
+
static int falconwing_devices_init(void)
{
int i, rc;
@@ -313,6 +344,8 @@ static int falconwing_devices_init(void)
register_device(&mci_dev);
register_device(&ldcif_dev);
+ falconwing_init_usb();
+
armlinux_add_dram(&sdram_dev);
armlinux_set_bootparams((void*)(sdram_dev.map_base + 0x100));
armlinux_set_architecture(MACH_TYPE_CHUMBY);