Re: [PATCH v4] USB: ehci-mxc: Setup portsc register prior to accessing OTG viewport

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Dec 15, 2010 at 10:31:28PM -0200, Fabio Estevam wrote:
> In order to read/write to the i.MX OTG viewport register it is necessary to setup
> the PORTSCx register first. 
> 
> By default i.MX OTG port is configured for USB serial PHY. In order to use a ULPI PHY
> the PORTSCx register needs to be configured properly.
> 
> commit 724c852 (USB: ehci/mxc: compile fix) placed the PORTSC setup after the OTG
> viewport is accessed and this causes ULPI read/write to fail.
> 
> Revert the PORTSC setup order.
> 
> Tested on a MX31PDK board with a ISP1504 transceiver:
> 
> ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver                      
> mxc-ehci mxc-ehci.0: initializing i.MX USB Controller                           
> ULPI transceiver vendor/product ID 0x04cc/0x1504                                
> Found NXP ISP1504 ULPI transceiver.                                             
> ULPI integrity check: passed.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam@xxxxxxxxxxxxx>

Tested this on my i.MX27/31/35 boards and on the babbage board in
conjunction with Arnauds '[patch 1/5] ehci-mxc: Enable vbus later' patch,
so:

Tested-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>


> ---
> Changes since v3:
> - Removed unused variables in ehci_mxc_setup
> 
> Changes since v2:
> - move portsc setup prior to mxc_initialize_usb_hw
> 
> Changes since v1:
> -removed second call to ehci = hcd_to_ehci(hcd);
> 
>  drivers/usb/host/ehci-mxc.c |   28 +++++++++++++++-------------
>  1 files changed, 15 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c
> index bce8505..6c9c6d1 100644
> --- a/drivers/usb/host/ehci-mxc.c
> +++ b/drivers/usb/host/ehci-mxc.c
> @@ -36,14 +36,8 @@ struct ehci_mxc_priv {
>  static int ehci_mxc_setup(struct usb_hcd *hcd)
>  {
>  	struct ehci_hcd *ehci = hcd_to_ehci(hcd);
> -	struct device *dev = hcd->self.controller;
> -	struct mxc_usbh_platform_data *pdata = dev_get_platdata(dev);
>  	int retval;
>  
> -	/* EHCI registers start at offset 0x100 */
> -	ehci->caps = hcd->regs + 0x100;
> -	ehci->regs = hcd->regs + 0x100 +
> -	    HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase));
>  	dbg_hcs_params(ehci, "reset");
>  	dbg_hcc_params(ehci, "reset");
>  
> @@ -65,12 +59,6 @@ static int ehci_mxc_setup(struct usb_hcd *hcd)
>  
>  	ehci_reset(ehci);
>  
> -	/* set up the PORTSCx register */
> -	ehci_writel(ehci, pdata->portsc, &ehci->regs->port_status[0]);
> -
> -	/* is this really needed? */
> -	msleep(10);
> -
>  	ehci_port_power(ehci, 0);
>  	return 0;
>  }
> @@ -125,7 +113,8 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
>  	int irq, ret;
>  	struct ehci_mxc_priv *priv;
>  	struct device *dev = &pdev->dev;
> -
> +	struct ehci_hcd *ehci;
> +
>  	dev_info(&pdev->dev, "initializing i.MX USB Controller\n");
>  
>  	if (!pdata) {
> @@ -200,6 +189,19 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
>  	ret = mxc_initialize_usb_hw(pdev->id, pdata->flags);
>  	if (ret < 0)
>  		goto err_init;
> +
> +	ehci = hcd_to_ehci(hcd);
> +
> +	/* EHCI registers start at offset 0x100 */
> +	ehci->caps = hcd->regs + 0x100;
> +	ehci->regs = hcd->regs + 0x100 +
> +	    HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase));
> +
> +	/* set up the PORTSCx register */
> +	ehci_writel(ehci, pdata->portsc, &ehci->regs->port_status[0]);
> +
> +	/* is this really needed? */
> +	msleep(10);
>  
>  	/* Initialize the transceiver */
>  	if (pdata->otg) {
> -- 
> 1.6.0.4
> 
> 

-- 
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 |
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux