i2c: mxs_i2c: Squash endless loop
authorMarek Vasut <marex@denx.de>
Mon, 4 Nov 2013 13:29:12 +0000 (14:29 +0100)
committerHeiko Schocher <hs@denx.de>
Wed, 13 Nov 2013 05:08:31 +0000 (06:08 +0100)
commit124913556c4b99909f40b4bf4ceaefe2b555d6f8
treedb5e072f22de6055075a620e21004ced7026e096
parent2035d77d790044f389a18c0e6baa05e86d4b32a0
i2c: mxs_i2c: Squash endless loop

The endless waiting for a bit to be set can cause a hang, add a timeout
so we prevent such situation. A testcase for such a hang is below. The
testcase assumes a device to be present at address 0x50 and a device to
NOT be present at address 0x42 . Also note that the "sleep 1" induced
delays are imperative for this bug to manifest .

i2c read 0x42 0x0.2 0x10 0x42000000 ; sleep 1 ; \
i2c read 0x50 0x0.2 0x10 0x42000000 ; sleep 1 ; \
i2c read 0x42 0x0.2 0x10 0x42000000

The expected result of the above command is:

Error reading the chip.
Error reading the chip.

While without this patch, we observe a hang in the last read from 0x42
precisely when waiting for this bit to be set.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Heiko Schocher <hs@denx.de>
Cc: Stefano Babic <sbabic@denx.de>
drivers/i2c/mxs_i2c.c