[U-Boot] fsl_i2c: increase I2C timeout values and make them configurable

Timur Tabi timur at freescale.com
Wed Sep 9 16:24:15 CEST 2009


On Wed, Sep 9, 2009 at 4:19 AM, Joakim
Tjernlund<joakim.tjernlund at transmode.se> wrote:
>
> I wonder if this hides another problem too.
> if the timeout hits, -1 is returned.
>
> Then in i2c_read()/i2c_write() you have:
>        if (i2c_wait4bus() >= 0
>            && i2c_write_addr(dev, I2C_WRITE_BIT, 0) != 0
>            && __i2c_write(&a[4 - alen], alen) == alen)
>                i = 0; /* No error so far */
> notice how the latter part, i2c_write_addr(dev, I2C_WRITE_BIT, 0) != 0
>  && __i2c_write(&a[4 - alen], alen) == alen)
> is ignored(never called) when i2c_wait4bus()  returns -1

Yeah, that is a bit odd.  It looks like it was supposed to be some
short-cut way to avoid multiple if-then-else clauses.

I wouldn't say my patch is *hiding* another problem -- that code looks
broken either way.

Someone should probably fix it to look like this:

if (i2c_wait4bus() < 0)
    return -1;

if (!i2c_write_addr(dev, I2C_WRITE_BIT, 0))
    return -1;

if (__i2c_write(&a[4 - alen], alen) != alen)
    return -1;

and so on.
		i = 0; /* No error so far */

-- 
Timur Tabi
Linux kernel developer at Freescale


More information about the U-Boot mailing list