On 05/17/13 07:33, Michael Trimarchi wrote:
> This patch fix the omap access to the tranceiver configuration registers 

s/tranceiver/transceiver/

> 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 recovable so any error

s/recovable/recoverable/ ?

> give out the usage of this interface.
> 
> Signed-off-by: Michael Trimarchi <[email protected]>

Reviewed-by: Igor Grinberg <[email protected]>

> ---
>  drivers/usb/ulpi/omap-ulpi-viewport.c |   40 
> +++++++--------------------------
>  1 file changed, 8 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/usb/ulpi/omap-ulpi-viewport.c 
> b/drivers/usb/ulpi/omap-ulpi-viewport.c
> index 3c1ea1a..2a42033 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 & 0xf) << 24) |
>                       OMAP_ULPI_WR_OPSEL | ((u32)reg << 16) | (value & 0xff);
>  
>       return ulpi_request(ulpi_vp, val);
> @@ -95,7 +71,7 @@ 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);
> +                      OMAP_ULPI_RD_OPSEL | ((u32)reg << 16);
>  
>       err = ulpi_request(ulpi_vp, val);
>       if (err)
> 

-- 
Regards,
Igor.
_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to