ARMV7: OMAP: I2C driver: Fix bug found in 37XX testing
authorSteve Sakoman <steve@sakoman.com>
Fri, 22 Oct 2010 20:48:00 +0000 (13:48 -0700)
committerHeiko Schocher <hs@denx.de>
Mon, 25 Oct 2010 05:57:20 +0000 (07:57 +0200)
On OMAP36/37XX the standard on chip pullups are not sufficient to
ensure proper i2c operation without external pullups or switching
to high speed mode and enabling special on chip pullups.

This is an issue for Beagle xM, which does not have external pullups
on the expansion board i2c lines.

The issue manifests itself as an AL (arbitration lost) error when
probing for a non-existent device (i.e. on a Beagle xM with no expansion
boards attached).  This issue does not occur on expansion boards that
include pullups or on Overo 37XX COM's since they include pull-ups.

This patch fixes the issue by checking for the AL bit in the i2c_probe
function.

Signed-off-by: Steve Sakoman <steve.sakoman@linaro.org>
drivers/i2c/omap24xx_i2c.c

index a72d1a1..fab49fd 100644 (file)
@@ -329,7 +329,7 @@ int i2c_probe (uchar chip)
 
        while (1) {
                status = wait_for_pin();
 
        while (1) {
                status = wait_for_pin();
-               if (status == 0) {
+               if (status == 0 || status & I2C_STAT_AL) {
                        res = 1;
                        goto probe_exit;
                }
                        res = 1;
                        goto probe_exit;
                }