[U-Boot] [PATCH] i2c: fix SDA contention in read_byte()
Thomas Chou
thomas at wytron.com.tw
Mon Jul 12 06:14:39 CEST 2010
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.
Best regards,
Thomas
More information about the U-Boot
mailing list