[PATCH RESEND] usb: chipidea-imx: Fix usb initialization

Sascha Hauer s.hauer at pengutronix.de
Fri Mar 15 15:06:16 EDT 2013


Hi Alexander,

On Tue, Mar 12, 2013 at 09:02:42PM +0400, Alexander Shiyan wrote:
> This patch fix chipidea-imx usb initialization.
> "imx_chipidea_port_init" was moved before PORTSC setup in the
> commit "USB i.MX chipidea: implement post init support". This
> change breaks usb function with ULPI. Patch moves port initialization
> back after PORTSC setup, so it works again.

I finally found some time to test it on the EfikaMX which I was afraid
this patch breaks. Good news is it doesn't.

You probably missed my answer to the original patch, so here it's again:
On which board are you working? The ULPI works for me on the the pcm038
and the EfikaMX smartbook with or without the patch.

After some digging around in the Efika U-Boot I found the equivalent of
the attached patch, which seems to make ULPI initialization far more
reliable. Do you have a chance to try this on your hardware?

Sascha

8<------------------------------------------------
commit 3be7b966ed7be54590e27e67a7f6b197d85b38f8
Author: Sascha Hauer <s.hauer at pengutronix.de>
Date:   Mon Dec 3 21:59:56 2012 +0100

    pcm038: Stop ongoing ULPI transfers before registering the transceiver
    
    The ULPI lines are normally input to the USB port. In order to configure
    the ULPI transceiver properly the ongoing transfers must be stopped. This
    can be done by configuring the the STP pin as gpio output and drinving
    it high.
    
    Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>

diff --git a/arch/arm/boards/pcm038/pcm970.c b/arch/arm/boards/pcm038/pcm970.c
index 7b25110..a50a1f2 100644
--- a/arch/arm/boards/pcm038/pcm970.c
+++ b/arch/arm/boards/pcm038/pcm970.c
@@ -160,7 +160,7 @@ static int pcm970_init(void)
 		PA1_PF_USBH2_DIR,
 		PA2_PF_USBH2_DATA7,
 		PA3_PF_USBH2_NXT,
-		PA4_PF_USBH2_STP,
+		4 | GPIO_PORTA | GPIO_GPIO | GPIO_OUT,
 		PD19_AF_USBH2_DATA4,
 		PD20_AF_USBH2_DATA3,
 		PD21_AF_USBH2_DATA6,
@@ -176,8 +176,14 @@ static int pcm970_init(void)
 	/* Configure SJA1000 on cs4 */
 	imx27_setup_weimcs(4, 0x0000DCF6, 0x444A0301, 0x44443302);
 
-	if (IS_ENABLED(CONFIG_USB))
+	if (IS_ENABLED(CONFIG_USB)) {
+		/* Stop ULPI */
+		gpio_direction_output(4, 1);
+		mdelay(1);
+		imx_gpio_mode(PA4_PF_USBH2_STP);
+
 		imx27_add_usbh2(&pcm970_usbh2_pdata);
+	}
 
 #ifdef CONFIG_DISK_INTF_PLATFORM_IDE
 	pcm970_ide_init();

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list