arm: omap: i2c: don't zero cnt in i2c_write
authorNikita Kiryanov <nikita@compulab.co.il>
Thu, 28 Nov 2013 16:04:42 +0000 (18:04 +0200)
committerHeiko Schocher <hs@denx.de>
Thu, 5 Dec 2013 11:25:02 +0000 (12:25 +0100)
commit92c23c9226a23548c875e4ba0e493a0aac172e25
treee7ee9e8152ac355fc1e6d7b989a371c176a1082b
parent6ca6d080d6c75a88709e8ba8d1e6d776bc01b68d
arm: omap: i2c: don't zero cnt in i2c_write

Writing zero into I2Ci.I2C_CNT register causes random I2C failures in OMAP3
based devices. This seems to be related to the following advisory which
apears in multiple erratas for OMAP3 SoCs (OMAP35xx, DM37xx), as well as
OMAP4430 TRM:

Advisory:
I2C Module Does Not Allow 0-Byte Data Requests
Details:
When configured as the master, the I2C module does not allow 0-byte data
transfers. Note: Programming I2Ci.I2C_CNT[15:0]: DCOUNT = 0 will cause
undefined behavior.
Workaround(s):
No workaround. Do not use 0-byte data requests.

The writes in question are unnecessary from a functional point of view.
Most of them are done after I/O has finished, and the only one that preceds
I/O (in i2c_probe()) is also unnecessary because a stop bit is sent before
actual data transmission takes place.

Therefore, remove all writes that zero the cnt register.

Cc: Heiko Schocher <hs@denx.de>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Tom Rini <trini@ti.com>
Cc: Lubomir Popov <lpopov@mm-sol.com>
Cc: Enric Balletbo Serra <eballetbo@gmail.com>
Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Tested-by: Lubomir Popov <lpopov@mm-sol.com>
drivers/i2c/omap24xx_i2c.c