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 <[email protected]>
Regards,
Richard W.
i2c_lo.diff
Description: i2c_lo.diff
i2c_lz.diff
Description: i2c_lz.diff
