[U-Boot] [PATCH] i2c: fix SDA contention in read_byte()
Mike Frysinger
vapier at gentoo.org
Wed Jul 21 19:40:16 CEST 2010
On Monday, July 12, 2010 00:14:39 Thomas Chou wrote:
> Reinhard Meyer wrote:
> > Whenever possible by the hardware, I make I2C_SDA/SCL(1) do a tri-state
> > and I2C_TRISTATE and I2C_ACTIVE are empty.
>
> Dear Mike,
>
> I traced the i2c-gpio.c of linux and realized that there are potential
> bus contention with the current soft_i2c.c if the ports are not
> open-drained.
>
> Reinhard suggested a solution, which was similar to what linux driver
> does. So I would withdraw my SDA patch.
>
> For our i2c gpio framework, I added these changes and tested on my
> boards. Please check if it works on yours.
>
> # ifndef I2C_ACTIVE
> # define I2C_ACTIVE do {} while (0)
> # endif
>
> # ifndef I2C_TRISTATE
> # define I2C_TRISTATE do {} while (0)
> # endif
>
> # ifndef I2C_SDA
> # define I2C_SDA(bit) \
> if (bit) { \
> gpio_direction_input(CONFIG_SOFT_I2C_GPIO_SDA); \
> } else { \
> gpio_direction_output(CONFIG_SOFT_I2C_GPIO_SDA, 0);\
> }
> # endif
>
> I didn't tristate SCL(1) because it cannot be tristated on some nios2
> boards. As soft_i2c of u-boot didn't support clock stretching, it
> shouldn't matter.
this sort of fixed things for me. the problem i was having is that repeated
start is not the default behavior for the soft i2c bus master. i thought that
this would be the default, but there doesnt seem to be any documentation on
the expected standard behavior out of the box.
once i enabled that for all Blackfin boards, soft i2c worked for me. so i
posted an updated patch ... if you need some open drain behavior, i think it
best to post a patch on top of that.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20100721/86af7efa/attachment.pgp
More information about the U-Boot
mailing list