All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Trimarchi <michael@amarulasolutions.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4] usb: omap: ulpi: fix ulpi transceiver access
Date: Thu, 20 Jun 2013 21:53:30 +0200	[thread overview]
Message-ID: <51C35DBA.7080301@amarulasolutions.com> (raw)
In-Reply-To: <20130610161804.GA16619@panicking>

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@amarulasolutions.com>
> Acked-by: Igor Grinberg <grinberg@compulab.co.il>
> Tested-by: Lubomir Popov <lpopov@mm-sol.com>
> Cc: Stefano Babic <sbabic@denx.de>
> Cc: Marek Vasut <marex@denx.de>
> Cc: Tom Rini <trini@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 |

  reply	other threads:[~2013-06-20 19:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-10 16:18 [U-Boot] [PATCH v4] usb: omap: ulpi: fix ulpi transceiver access Michael Trimarchi
2013-06-20 19:53 ` Michael Trimarchi [this message]
2013-06-20 20:02   ` Tom Rini
2013-06-20 20:14     ` Marek Vasut
2013-07-02 20:06 ` [U-Boot] [U-Boot, " Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51C35DBA.7080301@amarulasolutions.com \
    --to=michael@amarulasolutions.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.