diff options
| -rw-r--r-- | board/freescale/mx51evk/mx51evk.c | 62 | ||||
| -rw-r--r-- | include/configs/mx51evk.h | 13 | 
2 files changed, 75 insertions, 0 deletions
| diff --git a/board/freescale/mx51evk/mx51evk.c b/board/freescale/mx51evk/mx51evk.c index e5b0929f6..13c59413e 100644 --- a/board/freescale/mx51evk/mx51evk.c +++ b/board/freescale/mx51evk/mx51evk.c @@ -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;  } diff --git a/include/configs/mx51evk.h b/include/configs/mx51evk.h index dd53f48b9..3b18a18d3 100644 --- a/include/configs/mx51evk.h +++ b/include/configs/mx51evk.h @@ -110,6 +110,19 @@  #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 |