* [U-Boot] Patches to add some more omap24xx_i2c/twl6035 error handling
@ 2012-12-03 15:23 Vincent Stehlé
2012-12-03 15:23 ` [U-Boot] [PATCH 1/2] omap24xx_i2c: Handle wait_for_bb error Vincent Stehlé
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Vincent Stehlé @ 2012-12-03 15:23 UTC (permalink / raw)
To: u-boot
Hi,
I am encountering the following i2c error on OMAP5 with mainline u-boot:
OMAP5430 EVM # mmc rescan
timed out in wait_for_bb: I2C_STAT=1410
It seems the first call to i2c_write for bus I2C1 will fail and will leave the
bus with SCL stuck low, preventing further i2c operations.
While still debugging this issue, I would like to propose the following
patches, which add some more error handling in this error case already:
[PATCH 1/2] omap24xx_i2c: Handle wait_for_bb error
[PATCH 2/2] power: twl6035: complain on LDO9 error
Best regards,
V.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH 1/2] omap24xx_i2c: Handle wait_for_bb error
2012-12-03 15:23 [U-Boot] Patches to add some more omap24xx_i2c/twl6035 error handling Vincent Stehlé
@ 2012-12-03 15:23 ` Vincent Stehlé
2012-12-10 20:17 ` [U-Boot] [U-Boot,1/2] " Tom Rini
2012-12-03 15:23 ` [U-Boot] [PATCH 2/2] power: twl6035: complain on LDO9 error Vincent Stehlé
2012-12-03 16:07 ` [U-Boot] [PATCH] omap24xx_i2c: Handle OMAP5 like OMAP2,3,4 Vincent Stehlé
2 siblings, 1 reply; 6+ messages in thread
From: Vincent Stehlé @ 2012-12-03 15:23 UTC (permalink / raw)
To: u-boot
We add a return code to wait_for_bb() to be able to report errors to the
callers properly. We in turn handle this new error code in i2c_read, i2c_write
and i2c_probe.
Signed-off-by: Vincent Stehl? <v-stehle@ti.com>
---
drivers/i2c/omap24xx_i2c.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/drivers/i2c/omap24xx_i2c.c b/drivers/i2c/omap24xx_i2c.c
index 094305f..1bbb2ca 100644
--- a/drivers/i2c/omap24xx_i2c.c
+++ b/drivers/i2c/omap24xx_i2c.c
@@ -31,7 +31,7 @@ DECLARE_GLOBAL_DATA_PTR;
#define I2C_TIMEOUT 1000
-static void wait_for_bb(void);
+static int wait_for_bb(void);
static u16 wait_for_pin(void);
static void flush_fifo(void);
@@ -159,7 +159,8 @@ static int i2c_read_byte(u8 devaddr, u16 regoffset, u8 alen, u8 *value)
u16 w;
/* wait until bus not busy */
- wait_for_bb();
+ if (wait_for_bb())
+ return 1;
/* one byte only */
writew(alen, &i2c_base->cnt);
@@ -260,7 +261,8 @@ int i2c_probe(uchar chip)
return res;
/* wait until bus not busy */
- wait_for_bb();
+ if (wait_for_bb())
+ return res;
/* try to read one byte */
writew(1, &i2c_base->cnt);
@@ -279,7 +281,10 @@ int i2c_probe(uchar chip)
res = 1;
writew(0xff, &i2c_base->stat);
writew (readw (&i2c_base->con) | I2C_CON_STP, &i2c_base->con);
- wait_for_bb ();
+
+ if (wait_for_bb())
+ res = 1;
+
break;
}
if (status & I2C_STAT_ARDY) {
@@ -351,7 +356,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
}
/* wait until bus not busy */
- wait_for_bb();
+ if (wait_for_bb())
+ return 1;
/* start address phase - will write regoffset + len bytes data */
/* TODO consider case when !CONFIG_OMAP243X/34XX/44XX */
@@ -394,7 +400,7 @@ write_exit:
return i2c_error;
}
-static void wait_for_bb(void)
+static int wait_for_bb(void)
{
int timeout = I2C_TIMEOUT;
u16 stat;
@@ -408,8 +414,10 @@ static void wait_for_bb(void)
if (timeout <= 0) {
printf("timed out in wait_for_bb: I2C_STAT=%x\n",
readw(&i2c_base->stat));
+ return 1;
}
writew(0xFFFF, &i2c_base->stat); /* clear delayed stuff*/
+ return 0;
}
static u16 wait_for_pin(void)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH 2/2] power: twl6035: complain on LDO9 error
2012-12-03 15:23 [U-Boot] Patches to add some more omap24xx_i2c/twl6035 error handling Vincent Stehlé
2012-12-03 15:23 ` [U-Boot] [PATCH 1/2] omap24xx_i2c: Handle wait_for_bb error Vincent Stehlé
@ 2012-12-03 15:23 ` Vincent Stehlé
2012-12-10 20:17 ` [U-Boot] [U-Boot,2/2] " Tom Rini
2012-12-03 16:07 ` [U-Boot] [PATCH] omap24xx_i2c: Handle OMAP5 like OMAP2,3,4 Vincent Stehlé
2 siblings, 1 reply; 6+ messages in thread
From: Vincent Stehlé @ 2012-12-03 15:23 UTC (permalink / raw)
To: u-boot
We handle i2c_write return code and complain in case of error. We propagate the
error, too, to allow better handling at the upper level in the future.
Signed-off-by: Vincent Stehl? <v-stehle@ti.com>
---
drivers/power/twl6035.c | 17 +++++++++++++----
include/twl6035.h | 2 +-
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/drivers/power/twl6035.c b/drivers/power/twl6035.c
index 624c09e..d3de698 100644
--- a/drivers/power/twl6035.c
+++ b/drivers/power/twl6035.c
@@ -50,16 +50,25 @@ void twl6035_init_settings(void)
return;
}
-void twl6035_mmc1_poweron_ldo(void)
+int twl6035_mmc1_poweron_ldo(void)
{
u8 val = 0;
/* set LDO9 TWL6035 to 3V */
val = 0x2b; /* (3 -.9)*28 +1 */
- palmas_write_u8(0x48, LDO9_VOLTAGE, val);
+
+ if (palmas_write_u8(0x48, LDO9_VOLTAGE, val)) {
+ printf("twl6035: could not set LDO9 voltage.\n");
+ return 1;
+ }
/* TURN ON LDO9 */
val = LDO_ON | LDO_MODE_SLEEP | LDO_MODE_ACTIVE;
- palmas_write_u8(0x48, LDO9_CTRL, val);
- return;
+
+ if (palmas_write_u8(0x48, LDO9_CTRL, val)) {
+ printf("twl6035: could not turn on LDO9.\n");
+ return 1;
+ }
+
+ return 0;
}
diff --git a/include/twl6035.h b/include/twl6035.h
index e21ddba..ce74348 100644
--- a/include/twl6035.h
+++ b/include/twl6035.h
@@ -39,4 +39,4 @@
int twl6035_i2c_write_u8(u8 chip_no, u8 val, u8 reg);
int twl6035_i2c_read_u8(u8 chip_no, u8 *val, u8 reg);
void twl6035_init_settings(void);
-void twl6035_mmc1_poweron_ldo(void);
+int twl6035_mmc1_poweron_ldo(void);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH] omap24xx_i2c: Handle OMAP5 like OMAP2,3,4
2012-12-03 15:23 [U-Boot] Patches to add some more omap24xx_i2c/twl6035 error handling Vincent Stehlé
2012-12-03 15:23 ` [U-Boot] [PATCH 1/2] omap24xx_i2c: Handle wait_for_bb error Vincent Stehlé
2012-12-03 15:23 ` [U-Boot] [PATCH 2/2] power: twl6035: complain on LDO9 error Vincent Stehlé
@ 2012-12-03 16:07 ` Vincent Stehlé
2 siblings, 0 replies; 6+ messages in thread
From: Vincent Stehlé @ 2012-12-03 16:07 UTC (permalink / raw)
To: u-boot
OMAP5 has 8b i2c data register field, like OMAP2, 3 and 4. Handle in the same
way. This fixes the following error on OMAP5:
OMAP5430 EVM # mmc rescan
timed out in wait_for_bb: I2C_STAT=1410
twl6035: could not turn on LDO9.
Signed-off-by: Vincent Stehl? <v-stehle@ti.com>
---
drivers/i2c/omap24xx_i2c.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/drivers/i2c/omap24xx_i2c.c b/drivers/i2c/omap24xx_i2c.c
index 1bbb2ca..54e9b15 100644
--- a/drivers/i2c/omap24xx_i2c.c
+++ b/drivers/i2c/omap24xx_i2c.c
@@ -180,7 +180,8 @@ static int i2c_read_byte(u8 devaddr, u16 regoffset, u8 alen, u8 *value)
if (status & I2C_STAT_XRDY) {
w = tmpbuf[i++];
#if !(defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
- defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX))
+ defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX) || \
+ defined(CONFIG_OMAP54XX))
w |= tmpbuf[i++] << 8;
#endif
writew(w, &i2c_base->data);
@@ -210,7 +211,8 @@ static int i2c_read_byte(u8 devaddr, u16 regoffset, u8 alen, u8 *value)
}
if (status & I2C_STAT_RRDY) {
#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
- defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX)
+ defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX) || \
+ defined(CONFIG_OMAP54XX)
*value = readb(&i2c_base->data);
#else
*value = readw(&i2c_base->data);
@@ -240,7 +242,8 @@ static void flush_fifo(void)
stat = readw(&i2c_base->stat);
if (stat == I2C_STAT_RRDY) {
#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
- defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX)
+ defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX) || \
+ defined(CONFIG_OMAP54XX)
readb(&i2c_base->data);
#else
readw(&i2c_base->data);
@@ -294,7 +297,8 @@ int i2c_probe(uchar chip)
if (status & I2C_STAT_RRDY) {
res = 0;
#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
- defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX)
+ defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX) || \
+ defined(CONFIG_OMAP54XX)
readb(&i2c_base->data);
#else
readw(&i2c_base->data);
@@ -382,7 +386,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
if (status & I2C_STAT_XRDY) {
w = (i < 0) ? tmpbuf[2+i] : buffer[i];
#if !(defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
- defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX))
+ defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX) || \
+ defined(CONFIG_OMAP54XX))
w |= ((++i < 0) ? tmpbuf[2+i] : buffer[i]) << 8;
#endif
writew(w, &i2c_base->data);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [U-Boot,1/2] omap24xx_i2c: Handle wait_for_bb error
2012-12-03 15:23 ` [U-Boot] [PATCH 1/2] omap24xx_i2c: Handle wait_for_bb error Vincent Stehlé
@ 2012-12-10 20:17 ` Tom Rini
0 siblings, 0 replies; 6+ messages in thread
From: Tom Rini @ 2012-12-10 20:17 UTC (permalink / raw)
To: u-boot
On Mon, Dec 03, 2012 at 05:23:16AM -0000, Vincent Stehl?? wrote:
> We add a return code to wait_for_bb() to be able to report errors to the
> callers properly. We in turn handle this new error code in i2c_read, i2c_write
> and i2c_probe.
>
> Signed-off-by: Vincent Stehl?? <v-stehle@ti.com>
Applied to u-boot-ti/master, thanks!
--
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/20121210/8dc64ab2/attachment.pgp>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [U-Boot,2/2] power: twl6035: complain on LDO9 error
2012-12-03 15:23 ` [U-Boot] [PATCH 2/2] power: twl6035: complain on LDO9 error Vincent Stehlé
@ 2012-12-10 20:17 ` Tom Rini
0 siblings, 0 replies; 6+ messages in thread
From: Tom Rini @ 2012-12-10 20:17 UTC (permalink / raw)
To: u-boot
On Mon, Dec 03, 2012 at 05:23:17AM -0000, Vincent Stehl?? wrote:
> We handle i2c_write return code and complain in case of error. We propagate the
> error, too, to allow better handling at the upper level in the future.
>
> Signed-off-by: Vincent Stehl?? <v-stehle@ti.com>
Applied to u-boot-ti/master, thanks!
--
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/20121210/64ea972d/attachment.pgp>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2012-12-10 20:17 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-03 15:23 [U-Boot] Patches to add some more omap24xx_i2c/twl6035 error handling Vincent Stehlé
2012-12-03 15:23 ` [U-Boot] [PATCH 1/2] omap24xx_i2c: Handle wait_for_bb error Vincent Stehlé
2012-12-10 20:17 ` [U-Boot] [U-Boot,1/2] " Tom Rini
2012-12-03 15:23 ` [U-Boot] [PATCH 2/2] power: twl6035: complain on LDO9 error Vincent Stehlé
2012-12-10 20:17 ` [U-Boot] [U-Boot,2/2] " Tom Rini
2012-12-03 16:07 ` [U-Boot] [PATCH] omap24xx_i2c: Handle OMAP5 like OMAP2,3,4 Vincent Stehlé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox