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
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot