usb: omap: ulpi: fix ulpi transceiver access
Subsystems (2)
PATCH v4 1/1 usb: omap: ulpi: fix ulpi transceiver access
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.
---
- 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(-)
drivers/usb/ulpi/omap-ulpi-viewport.c +9 -33
@@ -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)
Signature · 1 line
1.7.9.5
PATCH v4 1/1 usb: omap: ulpi: fix ulpi transceiver access
Hi Tom
Should I need to repost?
Michael
Quoted 123 lines · Michael Trimarchi
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 OMAPINSNREG05_ULPIregister expects a value of 1 for Port 1 and of 2 for Port 2 in the PORTSEL field.
* BIT31OMAP_ULPI_STARTis 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(-)drivers/usb/ulpi/omap-ulpi-viewport.c +9
-33@@ -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)
Signature · 3 lines
| Michael Nazzareno Trimarchi Amarula Solutions BV | | COO - Founder Cruquiuskade 47 | | +31(0)851119172 Amsterdam 1018 AM NL |
PATCH v4 1/1 usb: omap: ulpi: fix ulpi transceiver access
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Quoted 3 lines · Michael Trimarchi
Hi Tom
Should I need to repost?
Nope, we're good. Just had this assigned to Marek in patchwork when I did my last pull request, despite telling Marek I'd do it via u-boot-ti on IRC before. I'll pick this up soon.
- --
Tom
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
iQIcBAEBAgAGBQJRw1++AAoJENk4IS6UOR1WK+8QAIZTiXwBkK+n9oR62cEYXh2F NpW7MYLlX8VjwgjQAWuZGYCGq3sJsu4E5xlFp0CWgRUCgvC9qwnGFHizqfWMRraV Obv1iLrdHFvp0KaRWsHTxSzDTYWex9yjZ5JO81igibVx8/Jgbe/rdjctxQ3vG8yY 1X04VWeEy1mfFiqd9cw/t0Ll7+97XtS2WtgkxCV72JN5m9HKHjcmRoUdcgLarfl4 B3FWzP7Rn6Z1PN6meSIiHeOwlxB0PfxoOnX3c6SUSwYpXYw+j1TcvCntyM8AfOw3 UA3WCUAgcxHjmozB3+SlB00Mfa8G5GCDr8pjhEZ5zZD9ED+2ZZO59zBc5HGrigZb 8CUZmLP+PQYdYNrrorwlu+P3xZiCAtfYuDOCz9Cx4CzkiwGFSAhY0mi1od+c0SpA 7l+v9IgSHTNlIVgLe/doFt0feg968S3DGzfT9kqq29hkc3MqLN0z9uG3vVrUPeg+ 2Vrfom3cBnqgNHrYCel+RveFzmD/B5MxO7lgvGFRTW8a/LTwe3t9AtJAot0J4zCZ UP9X65tkpKppO579auxn7fglH6mdwpKwxW4frG6nPB4Na+fGZoL5CLvkeWAnBmXC a7YGKhEXlyHmT8tDloT9/0G96Klbqtq/lo2ZFpw7LHlj6MmoDBuouc3jJQj3vsHP X7srCt0r63B2KPJKlhro
=dKrX
-----END PGP SIGNATURE-----
PATCH v4 1/1 usb: omap: ulpi: fix ulpi transceiver access
Dear Tom Rini,
Quoted 8 lines · Michael Trimarchi
Quoted 3 lines
Hi Tom
Should I need to repost?
Nope, we're good. Just had this assigned to Marek in patchwork when I did my last pull request, despite telling Marek I'd do it via u-boot-ti on IRC before. I'll pick this up soon.
Urgh, ok. I'll leave that up to you Tom
Best regards,
Marek Vasut
PATCH v4 1/1 usb: omap: ulpi: fix ulpi transceiver access
In reply to Michael TrimarchiQuoted 13 lines · Michael Trimarchi
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.
Quoted 6 lines
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]>
Applied to u-boot-ti/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130702/1512f249/attachment.pgp>