Skip to content
  • Nikita Kiryanov's avatar
    arm: omap: i2c: don't zero cnt in i2c_write · 92c23c92
    Nikita Kiryanov authored
    
    
    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: default avatarNikita Kiryanov <nikita@compulab.co.il>
    Tested-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Tested-by: default avatarLubomir Popov <lpopov@mm-sol.com>
    92c23c92