USB: mx51evk: add end enable USB host support on port 1
authorWolfgang Grandegger <wg@denx.de>
Fri, 11 Nov 2011 13:03:38 +0000 (14:03 +0100)
committerRemy Bohmer <linux@bohmer.net>
Sun, 11 Dec 2011 13:49:56 +0000 (14:49 +0100)
Signed-off-by: Wolfgang Grandegger <wg@denx.de>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Remy Bohmer <linux@bohmer.net>
Cc: Wolfgang Grandegger <wg@denx.de>
Cc: Jason Liu <r64343@freescale.com>
board/freescale/mx51evk/mx51evk.c
include/configs/mx51evk.h

index e5b0929f65e0b4641373127e5072805f25713436..13c59413ecfddcd3c47d7928bb9b2c5b649a1dfb 100644 (file)
@@ -35,6 +35,7 @@
 #include <pmic.h>
 #include <fsl_pmic.h>
 #include <mc13892.h>
+#include <usb/ehci-fsl.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -172,6 +173,64 @@ static void setup_iomux_spi(void)
 }
 #endif
 
+#ifdef CONFIG_USB_EHCI_MX5
+#define MX51EVK_USBH1_HUB_RST  IOMUX_TO_GPIO(MX51_PIN_GPIO1_7) /* GPIO1_7 */
+#define MX51EVK_USBH1_STP      IOMUX_TO_GPIO(MX51_PIN_USBH1_STP) /* GPIO1_27 */
+#define MX51EVK_USB_CLK_EN_B   IOMUX_TO_GPIO(MX51_PIN_EIM_D18) /* GPIO2_1 */
+#define MX51EVK_USB_PHY_RESET  IOMUX_TO_GPIO(MX51_PIN_EIM_D21) /* GPIO2_5 */
+
+#define USBH1_PAD      (PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH |          \
+                        PAD_CTL_100K_PU | PAD_CTL_PUE_PULL |           \
+                        PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE)
+#define GPIO_PAD       (PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE |        \
+                        PAD_CTL_SRE_FAST)
+#define NO_PAD         (1 << 16)
+
+static void setup_usb_h1(void)
+{
+       setup_iomux_usb_h1();
+
+       /* GPIO_1_7 for USBH1 hub reset */
+       mxc_request_iomux(MX51_PIN_GPIO1_7, IOMUX_CONFIG_ALT0);
+       mxc_iomux_set_pad(MX51_PIN_GPIO1_7, NO_PAD);
+
+       /* GPIO_2_1 */
+       mxc_request_iomux(MX51_PIN_EIM_D17, IOMUX_CONFIG_ALT1);
+       mxc_iomux_set_pad(MX51_PIN_EIM_D17, GPIO_PAD);
+
+       /* GPIO_2_5 for USB PHY reset */
+       mxc_request_iomux(MX51_PIN_EIM_D21, IOMUX_CONFIG_ALT1);
+       mxc_iomux_set_pad(MX51_PIN_EIM_D21, GPIO_PAD);
+}
+
+void board_ehci_hcd_init(int port)
+{
+       /* Set USBH1_STP to GPIO and toggle it */
+       mxc_request_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_GPIO);
+       mxc_iomux_set_pad(MX51_PIN_USBH1_STP, USBH1_PAD);
+
+       gpio_direction_output(MX51EVK_USBH1_STP, 0);
+       gpio_direction_output(MX51EVK_USB_PHY_RESET, 0);
+       mdelay(10);
+       gpio_set_value(MX51EVK_USBH1_STP, 1);
+
+       /* Set back USBH1_STP to be function */
+       mxc_request_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_ALT0);
+       mxc_iomux_set_pad(MX51_PIN_USBH1_STP, USBH1_PAD);
+
+       /* De-assert USB PHY RESETB */
+       gpio_set_value(MX51EVK_USB_PHY_RESET, 1);
+
+       /* Drive USB_CLK_EN_B line low */
+       gpio_direction_output(MX51EVK_USB_CLK_EN_B, 0);
+
+       /* Reset USB hub */
+       gpio_direction_output(MX51EVK_USBH1_HUB_RST, 0);
+       mdelay(2);
+       gpio_set_value(MX51EVK_USBH1_HUB_RST, 1);
+}
+#endif
+
 static void power_init(void)
 {
        unsigned int val;
@@ -394,6 +453,9 @@ int board_early_init_f(void)
 {
        setup_iomux_uart();
        setup_iomux_fec();
+#ifdef CONFIG_USB_EHCI_MX5
+       setup_usb_h1();
+#endif
 
        return 0;
 }
index dd53f48b9aab4d077cbe1e25ccb522b632887a14..3b18a18d3e84a083dbd4221ccc51982317f4cb90 100644 (file)
 #define CONFIG_CMD_MII
 #define CONFIG_CMD_NET
 
+/* USB Configs */
+#define CONFIG_CMD_USB
+#define CONFIG_CMD_FAT
+#define CONFIG_USB_EHCI
+#define CONFIG_USB_EHCI_MX5
+#define CONFIG_USB_STORAGE
+#define CONFIG_USB_HOST_ETHER
+#define CONFIG_USB_ETHER_ASIX
+#define CONFIG_USB_ETHER_SMSC95XX
+#define CONFIG_MXC_USB_PORT    1
+#define CONFIG_MXC_USB_PORTSC  PORT_PTS_ULPI
+#define CONFIG_MXC_USB_FLAGS   MXC_EHCI_POWER_PINS_ENABLED
+
 /* allow to overwrite serial and ethaddr */
 #define CONFIG_ENV_OVERWRITE
 #define CONFIG_CONS_INDEX              1