Skip to content
  • Paul Walmsley's avatar
    i2c-omap: fix I2C timeouts due to recursive omap_i2c_{un,}idle() · 3831f154
    Paul Walmsley authored
    
    
    omap_i2c_unidle() and omap_i2c_idle() are called recursively during
    omap_i2c_probe().  This is evidently unexpected and will wipe
    out the I2C interrupt enable register the second time that
    omap_i2c_idle() is called consecutively.  Any I2C transactions
    following a probe of a bus with at least one device on it will then
    time out.
    
    Fix by moving omap_i2c_idle() further up in omap_i2c_probe().  Ensure
    the I2C controller is marked as idle before the probe starts.  Also
    attempt to catch future reappearances of this bug early in development
    by warning in omap_i2c_{un,}idle() when they are called recursively.
    
    Problem reported by David Brownell <david-b@pacbell.net>.
    
    Tested on 3430SDP and 2430SDP.
    
    Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
    Cc: David Brownell <david-b@pacbell.net>
    Cc: Richard Woodruff <r-woodruff2@ti.com>
    Acked-by; Steve Sakoman <steve@sakoman.com>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    
    
    3831f154