From 5c6b637340ca3f0de4cd74cb1d18820888e02088 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Tue, 23 May 2023 14:14:05 +0100 Subject: [PATCH] i2c-bcm2835: Do not abort transfers on ERR if still active If a transaction is aborted immediately on ERR being reported, then the bus is not returned to the STOP condition, and devices generally get very upset. Handle the ERR and CLKT conditions only when TA is not set. Signed-off-by: Dave Stevenson --- drivers/i2c/busses/i2c-bcm2835.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/drivers/i2c/busses/i2c-bcm2835.c +++ b/drivers/i2c/busses/i2c-bcm2835.c @@ -385,7 +385,7 @@ static irqreturn_t bcm2835_i2c_isr(int t bcm2835_debug_add(i2c_dev, val); err = val & (BCM2835_I2C_S_CLKT | BCM2835_I2C_S_ERR); - if (err) + if (err && !(val & BCM2835_I2C_S_TA)) i2c_dev->msg_err = err; if (val & BCM2835_I2C_S_DONE) {