[U-Boot] [PATCH v4] usb: omap: ulpi: fix ulpi transceiver access

Michael Trimarchi michael at amarulasolutions.com
Thu Jun 20 21:53:30 CEST 2013


Hi Tom

Should I need to repost?

Michael

On 06/10/2013 06:18 PM, Michael Trimarchi wrote:
> This patch fix the omap access to the transceiver
> configuration registers using the ulpi bus. As reported by
> the documentation the bit31 is used only to check if the
> transaction is done or still running and the reading and
> writing operation have different offset and have different
> values. What we need to do at the end of a transaction is
> leave the bus in done state. Anyway an error using the ulpi
> omap register is not recoverable so any error give out the
> usage of this interface.
> 
> Tested on a custom OMAP5430 board with a TUSB1210 ULPI PHY
> on USBB1.
> 
> Signed-off-by: Michael Trimarchi <michael at amarulasolutions.com>
> Acked-by: Igor Grinberg <grinberg at compulab.co.il>
> Tested-by: Lubomir Popov <lpopov at mm-sol.com>
> Cc: Stefano Babic <sbabic at denx.de>
> Cc: Marek Vasut <marex at denx.de>
> Cc: Tom Rini <trini at ti.com>
> ---
> - changes for V4
>   * The OMAP INSNREG05_ULPI register expects a value of 1 for Port 1
>     and of 2 for Port 2 in the PORTSEL field.
>   * BIT31 OMAP_ULPI_START is used in the read function too
> - changes for V3
>   Fix patch subject
> - changes for V2
>   Fix commit message
> ---
>  drivers/usb/ulpi/omap-ulpi-viewport.c |   42 +++++++--------------------------
>  1 file changed, 9 insertions(+), 33 deletions(-)
> 
> diff --git a/drivers/usb/ulpi/omap-ulpi-viewport.c b/drivers/usb/ulpi/omap-ulpi-viewport.c
> index 3c1ea1a..4db7fa4 100644
> --- a/drivers/usb/ulpi/omap-ulpi-viewport.c
> +++ b/drivers/usb/ulpi/omap-ulpi-viewport.c
> @@ -22,18 +22,19 @@
>  #include <asm/io.h>
>  #include <usb/ulpi.h>
>  
> -#define OMAP_ULPI_WR_OPSEL	(3 << 21)
> -#define OMAP_ULPI_ACCESS	(1 << 31)
> +#define OMAP_ULPI_WR_OPSEL	(2 << 22)
> +#define OMAP_ULPI_RD_OPSEL	(3 << 22)
> +#define OMAP_ULPI_START		(1 << 31)
>  
>  /*
> - * Wait for the ULPI Access to complete
> + * Wait for having ulpi in done state
>   */
>  static int ulpi_wait(struct ulpi_viewport *ulpi_vp, u32 mask)
>  {
>  	int timeout = CONFIG_USB_ULPI_TIMEOUT;
>  
>  	while (--timeout) {
> -		if ((readl(ulpi_vp->viewport_addr) & mask))
> +		if (!(readl(ulpi_vp->viewport_addr) & mask))
>  			return 0;
>  
>  		udelay(1);
> @@ -43,40 +44,15 @@ static int ulpi_wait(struct ulpi_viewport *ulpi_vp, u32 mask)
>  }
>  
>  /*
> - * Wake the ULPI PHY up for communication
> - *
> - * returns 0 on success.
> - */
> -static int ulpi_wakeup(struct ulpi_viewport *ulpi_vp)
> -{
> -	int err;
> -
> -	if (readl(ulpi_vp->viewport_addr) & OMAP_ULPI_ACCESS)
> -		return 0; /* already awake */
> -
> -	writel(OMAP_ULPI_ACCESS, ulpi_vp->viewport_addr);
> -
> -	err = ulpi_wait(ulpi_vp, OMAP_ULPI_ACCESS);
> -	if (err)
> -		debug("ULPI wakeup timed out\n");
> -
> -	return err;
> -}
> -
> -/*
>   * Issue a ULPI read/write request
>   */
>  static int ulpi_request(struct ulpi_viewport *ulpi_vp, u32 value)
>  {
>  	int err;
>  
> -	err = ulpi_wakeup(ulpi_vp);
> -	if (err)
> -		return err;
> -
>  	writel(value, ulpi_vp->viewport_addr);
>  
> -	err = ulpi_wait(ulpi_vp, OMAP_ULPI_ACCESS);
> +	err = ulpi_wait(ulpi_vp, OMAP_ULPI_START);
>  	if (err)
>  		debug("ULPI request timed out\n");
>  
> @@ -85,7 +61,7 @@ static int ulpi_request(struct ulpi_viewport *ulpi_vp, u32 value)
>  
>  int ulpi_write(struct ulpi_viewport *ulpi_vp, u8 *reg, u32 value)
>  {
> -	u32 val = ((ulpi_vp->port_num & 0xf) << 24) |
> +	u32 val = OMAP_ULPI_START | (((ulpi_vp->port_num + 1) & 0xf) << 24) |
>  			OMAP_ULPI_WR_OPSEL | ((u32)reg << 16) | (value & 0xff);
>  
>  	return ulpi_request(ulpi_vp, val);
> @@ -94,8 +70,8 @@ int ulpi_write(struct ulpi_viewport *ulpi_vp, u8 *reg, u32 value)
>  u32 ulpi_read(struct ulpi_viewport *ulpi_vp, u8 *reg)
>  {
>  	int err;
> -	u32 val = ((ulpi_vp->port_num & 0xf) << 24) |
> -			 OMAP_ULPI_WR_OPSEL | ((u32)reg << 16);
> +	u32 val = OMAP_ULPI_START | (((ulpi_vp->port_num + 1) & 0xf) << 24) |
> +			 OMAP_ULPI_RD_OPSEL | ((u32)reg << 16);
>  
>  	err = ulpi_request(ulpi_vp, val);
>  	if (err)
> 


-- 
| Michael Nazzareno Trimarchi                     Amarula Solutions BV |
| COO  -  Founder                                      Cruquiuskade 47 |
| +31(0)851119172                                 Amsterdam 1018 AM NL |




More information about the U-Boot mailing list