[U-Boot] [PATCH V2 OMAP-ULPI]: This patch fix the omap access to the transceiver configuration registers using the ulpi bus.

Michael Trimarchi michael at amarulasolutions.com
Mon May 20 12:21:47 CEST 2013


Hi

On 20/05/13 12:05, Igor Grinberg wrote:
> Hi Michael,
> 
> Sorry for missing the subject last time...
> For the subject:
> In the square brackets, it should be stated just [PATCH vX]
> Afterwards, should come the subsystem/platform
> and then short yet meaningful patch description. For example:
> [PATCH v2] usb: omap: ulpi: fix ulpi transceiver access
> 
> Also, the patch submission rules are available at:
> http://www.denx.de/wiki/view/U-Boot/Patches#General_Patch_Submission_Rules
> I think it is worth reading.
> 

Sorry, I know but I'm so busy that I have almost edit the last one. 
I will re-submit :(

Michael

> 
> On 05/20/13 11:53, 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.
>>
>> Signed-off-by: Michael Trimarchi <michael at amarulasolutions.com>
> 
> You can add the below tag to your future submissions of this patch
> (if you decide to fix the subject).
> 
> Reviewed-by: Igor Grinberg <grinberg at compulab.co.il>
> 
>> ---
>>
>> Changes for V2:
>> 	- Fix commit message
>>
>> ---
>>  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)
>>
> 


-- 
| 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