Hi, Recently one custom board was having some I2C issues. In looking at it a couple things stood out. I've attached a patches for l-o and l-z for anyone to comment on which cares. Bug Fixes: -1- OMAP_I2C_WE_STC_WE should never be enabled for wake up unless I+F clk is cut. Having it set like code does can mess up I2C FSM. -2- STT/STP bits are best written together. There was a 2430-es1'ish errata which might have existed. This is not the case in 3430. There should be no need to use b_hw = 1. -a- Any write to I2C_CON is bad before ARDY. An untimely write can mess up I2C FSM for next write. -3- There is a possible issue which a double clear of ARDY status in irq handler can make sure doesn't happen. Note: When using I2C with HS mode there is a target bus capacitance for proper operation. Depending on your board the optimal pull up resister level might very. On OMAP3 there seems to be a few options which can allow you to play with effective resistance with out a hardware mod (and potential get better quality). - CONTROL block has pull-up control for special internal pulls - Padconf has normal pull-ups - T2 has internal controllable pull-ups (default on) - Your board might have an external pull up. Signed-off-by: Richard Woodruff <r-woodruff2@xxxxxx> Regards, Richard W.
Attachment:
i2c_lo.diff
Description: i2c_lo.diff
Attachment:
i2c_lz.diff
Description: i2c_lz.diff