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
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to