summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gonzalez <alex.gonzalez@digi.com>2012-02-20 16:50:29 +0100
committerAlex Gonzalez <alex.gonzalez@digi.com>2012-02-27 10:13:24 +0100
commitb644a80452d40a9872c247532c4cf5bceea248cd (patch)
treec71b6a8e98ff347fa580a9558c4e83cd0214d548
parent9fdc22b9339b1346834e3ecd07e514016f211c66 (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.h2
-rw-r--r--arch/arm/mach-mx5/mx53_ccwmx53js.c2
-rw-r--r--arch/arm/mach-mx5/mx53_ccwmx53js_gpio.c14
-rw-r--r--arch/arm/mach-mx5/usb_h1.c34
-rw-r--r--arch/arm/plat-mxc/include/mach/iomux-mx53.h4
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))