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 <[email protected]> > Acked-by: Igor Grinberg <[email protected]> > Tested-by: Lubomir Popov <[email protected]> > Cc: Stefano Babic <[email protected]> > Cc: Marek Vasut <[email protected]> > Cc: Tom Rini <[email protected]> > --- > - 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 | _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

