]> git.baikalelectronics.ru Git - kernel.git/commit
i2c-algo-pca: Let PCA9564 recover from unacked data byte (state 0x30)
authorEnrik Berkhan <Enrik.Berkhan@ge.com>
Tue, 5 May 2009 06:39:25 +0000 (08:39 +0200)
committerJean Delvare <khali@linux-fr.org>
Tue, 5 May 2009 06:39:25 +0000 (08:39 +0200)
commit59c990bf04443eec22e8ec3149d46a49303e8930
treeb9534b056eeb3a2e43620ef8ea52dd519ba50ba6
parenta0ddca4507d7ca3527fce66b54d2ec0e4169698f
i2c-algo-pca: Let PCA9564 recover from unacked data byte (state 0x30)

Currently, the i2c-algo-pca driver does nothing if the chip enters state
0x30 (Data byte in I2CDAT has been transmitted; NOT ACK has been
received).  Thus, the i2c bus connected to the controller gets stuck
afterwards.

I have seen this kind of error on a custom board in certain load
situations most probably caused by interference or noise.

A possible reaction is to let the controller generate a STOP condition.
This is documented in the PCA9564 data sheet (2006-09-01) and the same
is done for other NACK states as well.

Further, state 0x38 isn't handled completely, either. Try to do another
START in this case like the data sheet says. As this couldn't be tested,
I've added a comment to try to reset the chip if the START doesn't help
as suggested by Wolfram Sang.

Signed-off-by: Enrik Berkhan <Enrik.Berkhan@ge.com>
Reviewed-by: Wolfram Sang <w.sang@pengutronix.de>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
drivers/i2c/algos/i2c-algo-pca.c