• Manjunatha GK's avatar
    i2c-omap: OMAP3: Fix I2C lockup during timeout/error cases · 57eb81b1
    Manjunatha GK authored
    Current OMAP3 I2C driver code does not follow the correct sequence for soft
    reset. Due to this, lock up issues are reported during timeout/error cases.
    
    This patch fixes above issue by disabling I2C controller as per OMAP3430 TRM
    for soft reset. As per TRM, I2C controller needs to be disabled as a first
    step during soft reset.
    
    Here is correct soft reset sequence:
    a. Ensure that the module is disabled
    (clear the I2Ci.I2C_CON[15] I2C_EN bit to 0).
    b. Set the I2Ci.I2C_SYSC[1] SRST bit to 1.
    c. Enable the module by setting I2Ci.I2C_CON[15] I2C_EN bit to 1.
    d. Check the I2Ci.I2C_SYSS[0] RDONE bit until it is set to 1 to
    indicate the software reset is complete.
    
    Tested on Zoom2, Zoom3, 3430SDP and 3630SDP
    Signed-off-by: default avatarManjunatha GK <manjugk@ti.com>
    Signed-off-by: George, Harith<harith@ti.com>
    Acked-by: Varadarajan, Charu Latha<charu@ti.com>
    Signed-off-by: default avatarBen Dooks <ben-linux@fluff.org>
    57eb81b1
i2c-omap.c 27.7 KB