diff options
author | Alex Gonzalez <alex.gonzalez@digi.com> | 2012-02-20 16:50:29 +0100 |
---|---|---|
committer | Alex Gonzalez <alex.gonzalez@digi.com> | 2012-02-27 10:13:24 +0100 |
commit | b644a80452d40a9872c247532c4cf5bceea248cd (patch) | |
tree | c71b6a8e98ff347fa580a9558c4e83cd0214d548 | |
parent | 9fdc22b9339b1346834e3ecd07e514016f211c66 (diff) |
ccxmx53: Reset USB hub.
This commit will configure the USB reset line and perform a USB host1
reset on host1 initialization.
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
-rw-r--r-- | arch/arm/mach-mx5/board-ccwmx53.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-mx5/mx53_ccwmx53js.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c | 14 | ||||
-rw-r--r-- | arch/arm/mach-mx5/usb_h1.c | 34 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/iomux-mx53.h | 4 |
5 files changed, 47 insertions, 9 deletions
diff --git a/arch/arm/mach-mx5/board-ccwmx53.h b/arch/arm/mach-mx5/board-ccwmx53.h index a07017e8be80..f4c53764a895 100644 --- a/arch/arm/mach-mx5/board-ccwmx53.h +++ b/arch/arm/mach-mx5/board-ccwmx53.h @@ -72,6 +72,8 @@ #define ETH0_RESET_GPIO (GPIO_PMIC_START + 11) #define EXT_ETH_RESET_GPIO (GPIO_PMIC_START + 12) +#define CCXMX53_USB_HUB_RESET MX53_GPIO(5,29) /* GPIO_5_29 */ + /* Second touch settings */ void ccwmx53_init_2nd_touch(void); void gpio_wireless_active(void); diff --git a/arch/arm/mach-mx5/mx53_ccwmx53js.c b/arch/arm/mach-mx5/mx53_ccwmx53js.c index 74626cd518c1..f9e391d9f9aa 100644 --- a/arch/arm/mach-mx5/mx53_ccwmx53js.c +++ b/arch/arm/mach-mx5/mx53_ccwmx53js.c @@ -93,6 +93,7 @@ u8 ccwmx51_swap_bi = 1; extern int __init mx53_ccwmx53js_init_da9052(void); extern void gpio_dio_active(void); +extern void gpio_usb_active(void); extern void pm_i2c_init(u32 base_addr); extern int ccxmx53_pm_da9053_mask_irqs(void); extern int ccxmx53_pm_da9053_unmask_irqs(void); @@ -266,6 +267,7 @@ static void __init mx53_ccwmx53js_io_init(void) ARRAY_SIZE(ccwmx53js_keys_leds_pads)); gpio_wireless_active(); gpio_dio_active(); + gpio_usb_active(); } static void ccxmx53_suspend_enter(void) diff --git a/arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c b/arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c index 633bc356695d..29bcc22db6b8 100644 --- a/arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c +++ b/arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c @@ -761,3 +761,17 @@ void gpio_dio_active(void) mxc_iomux_v3_setup_multiple_pads(ccwmx53_dio_pads, ARRAY_SIZE(ccwmx53_dio_pads)); } EXPORT_SYMBOL(gpio_dio_active); + +static iomux_v3_cfg_t ccwmx53_usb_pads[] = { + MX53_PAD_CSI0_DAT11__GPIO5_29, +}; + +void gpio_usb_active(void) +{ + mxc_iomux_v3_setup_multiple_pads(ccwmx53_usb_pads, ARRAY_SIZE(ccwmx53_usb_pads)); + + gpio_request(CCXMX53_USB_HUB_RESET, "usb-hub-reset"); + gpio_direction_output(CCXMX53_USB_HUB_RESET, 0); +} +EXPORT_SYMBOL(gpio_usb_active); + diff --git a/arch/arm/mach-mx5/usb_h1.c b/arch/arm/mach-mx5/usb_h1.c index 28e5ec498c2d..5b00610462a9 100644 --- a/arch/arm/mach-mx5/usb_h1.c +++ b/arch/arm/mach-mx5/usb_h1.c @@ -24,6 +24,7 @@ #include "usb.h" #include "iomux.h" #include "mx51_pins.h" +#include "board-ccwmx53.h" static struct clk *usb_phy2_clk; static struct clk *usb_oh3_clk; static struct clk *usb_ahb_clk; @@ -41,11 +42,13 @@ static void fsl_usb_recover_hcd(struct platform_device *pdev) static int gpio_usbh1_active(void) { /* Set USBH1_STP to GPIO and toggle it */ - mxc_request_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_GPIO | - IOMUX_CONFIG_SION); - gpio_request(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP), "usbh1_stp"); - gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP), 0); - gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP), 1); + if( cpu_is_mx51() ) { + mxc_request_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_GPIO | + IOMUX_CONFIG_SION); + gpio_request(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP), "usbh1_stp"); + gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP), 0); + gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP), 1); + } /* Signal only used on MX51-3DS for reset to PHY.*/ if (machine_is_mx51_3ds()) { @@ -59,6 +62,13 @@ static int gpio_usbh1_active(void) gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_D17), 1); } + if( machine_is_ccwmx53js() || machine_is_ccmx53js() ){ + /* USB HUB RESET - De-assert USB HUB RESET_N */ + gpio_set_value(CCXMX53_USB_HUB_RESET, 0); + msleep(1); + gpio_set_value(CCXMX53_USB_HUB_RESET, 1); + } + msleep(100); return 0; @@ -72,8 +82,14 @@ static void gpio_usbh1_inactive(void) mxc_free_iomux(MX51_PIN_EIM_D17, IOMUX_CONFIG_GPIO); } - mxc_free_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_GPIO); - gpio_free(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP)); + if( cpu_is_mx51() ) { + mxc_free_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_GPIO); + gpio_free(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP)); + } + + if( machine_is_ccwmx53js() || machine_is_ccmx53js() ){ + gpio_free(CCXMX53_USB_HUB_RESET); + } } static void _wake_up_enable(struct fsl_usb2_platform_data *pdata, bool enable) @@ -247,6 +263,10 @@ void __init mx5_usbh1_init(void) usbh1_config.gpio_usb_active = gpio_usbh1_active; usbh1_config.gpio_usb_inactive = gpio_usbh1_inactive; } + if( machine_is_ccwmx53js() || machine_is_ccmx53js() ){ + usbh1_config.gpio_usb_active = gpio_usbh1_active; + usbh1_config.gpio_usb_inactive = gpio_usbh1_inactive; + } mxc_register_device(&mxc_usbh1_device, &usbh1_config); usbh1_config.wakeup_pdata = &usbh1_wakeup_config; mxc_register_device(&mxc_usbh1_wakeup_device, &usbh1_wakeup_config); diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx53.h b/arch/arm/plat-mxc/include/mach/iomux-mx53.h index f471f3cfe7b8..50f06c6df067 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx53.h +++ b/arch/arm/plat-mxc/include/mach/iomux-mx53.h @@ -425,7 +425,7 @@ #define _MX53_PAD_CSI0_DAT10__EMI_EMI_DEBUG_39 IOMUX_PAD(0x414, 0xE8, 6, 0x0, 0, 0) #define _MX53_PAD_CSI0_DAT10__TPIU_TRACE_7 IOMUX_PAD(0x414, 0xE8, 7, 0x0, 0, 0) #define _MX53_PAD_CSI0_DAT11__IPU_CSI0_D_11 IOMUX_PAD(0x418, 0xEC, 0, 0x0, 0, 0) -#define _MX53_PAD_CSI0_DAT11__GPIO5_29 IOMUX_PAD(0x418, 0xEC, 1, 0x0, 0, 0) +#define _MX53_PAD_CSI0_DAT11__GPIO5_29 IOMUX_PAD(0x418, 0xEC, 1 | IOMUX_CONFIG_SION , 0x0 , 0, 0) #define _MX53_PAD_CSI0_DAT11__UART1_RXD_MUX IOMUX_PAD(0x418, 0xEC, 2, 0x878, 1, 0) #define _MX53_PAD_CSI0_DAT11__ECSPI2_SS0 IOMUX_PAD(0x418, 0xEC, 3, 0x7C4, 1, 0) #define _MX53_PAD_CSI0_DAT11__AUDMUX_AUD3_RXFS IOMUX_PAD(0x418, 0xEC, 4, 0x0, 0, 0) @@ -1603,7 +1603,7 @@ #define MX53_PAD_CSI0_DAT10__EMI_EMI_DEBUG_39 (_MX53_PAD_CSI0_DAT10__EMI_EMI_DEBUG_39 | MUX_PAD_CTRL(NO_PAD_CTRL)) #define MX53_PAD_CSI0_DAT10__TPIU_TRACE_7 (_MX53_PAD_CSI0_DAT10__TPIU_TRACE_7 | MUX_PAD_CTRL(NO_PAD_CTRL)) #define MX53_PAD_CSI0_DAT11__IPU_CSI0_D_11 (_MX53_PAD_CSI0_DAT11__IPU_CSI0_D_11 | MUX_PAD_CTRL(NO_PAD_CTRL)) -#define MX53_PAD_CSI0_DAT11__GPIO5_29 (_MX53_PAD_CSI0_DAT11__GPIO5_29 | MUX_PAD_CTRL(NO_PAD_CTRL)) +#define MX53_PAD_CSI0_DAT11__GPIO5_29 (_MX53_PAD_CSI0_DAT11__GPIO5_29 | MUX_PAD_CTRL(MX53_GPIO_PAD_CTRL_1)) #define MX53_PAD_CSI0_DAT11__UART1_RXD_MUX (_MX53_PAD_CSI0_DAT11__UART1_RXD_MUX | MUX_PAD_CTRL(MX53_UART_PAD_CTRL)) #define MX53_PAD_CSI0_DAT11__ECSPI2_SS0 (_MX53_PAD_CSI0_DAT11__ECSPI2_SS0 | MUX_PAD_CTRL(NO_PAD_CTRL)) #define MX53_PAD_CSI0_DAT11__AUDMUX_AUD3_RXFS (_MX53_PAD_CSI0_DAT11__AUDMUX_AUD3_RXFS | MUX_PAD_CTRL(NO_PAD_CTRL)) |