]> git.sur5r.net Git - u-boot/commit
I2C: mxc_i2c: address failure with mx35 processor
authorStefano Babic <sbabic@denx.de>
Thu, 20 Jan 2011 07:51:31 +0000 (07:51 +0000)
committerAlbert Aribaud <albert.aribaud@free.fr>
Tue, 1 Feb 2011 23:54:43 +0000 (00:54 +0100)
commit81687212ee0b4fcb11f7d6700275b062c8f8d2b4
tree309e26d1095c1a32d715380baa655f10f7e80f9b
parent1d549ade61078b50e68ff867fe59401bb5c2db9b
I2C: mxc_i2c: address failure with mx35 processor

There is sporadic failures when more as one I2C slave
is on the bus and the processor tries to communicate
with more as one slave.
The problem was seen on a mx35pdk (two I2C slaves,
PMIC controller and CAN/RTC chip).

The current driver uses the IIF bit in the status register
to check if the bus is busy or not. According to the manual,
this is not correct, because the IIB bit should be checked.
Not only, to check if a transfer is finished must be checked
the ICF bit, and this is not tested at all.

This patch comes from analyse with a corresponding driver
provided by Freescale as part of the LTIB tool. Comparing
the two drivers, it appears that the current u-boot driver checks
the wrong bits, and depending on race condition, the transfer
can be successful or not.

The patch gets rid also of own debug function (DPRINTF),
replaced with the general debug().

Tested on Freescale mx35pdk.

Signed-off-by: Stefano Babic <sbabic@denx.de>
CC: Heiko Schocher <hs@denx.de>
Acked-by: Heiko Schocher <hs@denx.de>
drivers/i2c/mxc_i2c.c