linux/drivers/i2c
Paul Walmsley 3831f15441 i2c-omap: fix I2C timeouts due to recursive omap_i2c_{un,}idle()
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: Paul 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: Tony Lindgren <tony@atomide.com>
2008-11-21 13:39:47 -08:00
..
algos i2c-algo-pcf: Fix typo in debugging log message 2008-10-22 20:21:30 +02:00
busses i2c-omap: fix I2C timeouts due to recursive omap_i2c_{un,}idle() 2008-11-21 13:39:47 -08:00
chips i2c: Inform about deprecated chips directory 2008-10-22 20:21:33 +02:00
i2c-boardinfo.c i2c: Add i2c_board_info and i2c_new_device() 2007-05-01 23:26:31 +02:00
i2c-core.c i2c: Add info->archdata field 2008-10-22 20:21:33 +02:00
i2c-core.h i2c: Add i2c_board_info and i2c_new_device() 2007-05-01 23:26:31 +02:00
i2c-dev.c device create: misc: convert device_create_drvdata to device_create 2008-10-16 09:24:43 -07:00
Kconfig i2c: Let users select algorithm drivers manually again 2008-08-10 22:56:15 +02:00
Makefile i2c: Add i2c_board_info and i2c_new_device() 2007-05-01 23:26:31 +02:00