• Enrik Berkhan's avatar
    i2c-algo-pca: Let PCA9564 recover from unacked data byte (state 0x30) · 2196d1cf
    Enrik Berkhan authored
    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: default avatarEnrik Berkhan <Enrik.Berkhan@ge.com>
    Reviewed-by: default avatarWolfram Sang <w.sang@pengutronix.de>
    Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
    2196d1cf
i2c-algo-pca.c 14.9 KB