openwrt/target/linux/bcm27xx/patches-6.6/950-0470-i2c-bcm2835-Do-not-abort-transfers-on-ERR-if-still-a.patch
Álvaro Fernández Rojas 8c405cdccc bcm27xx: add 6.6 kernel patches
The patches were generated from the RPi repo with the following command:
git format-patch v6.6.34..rpi-6.1.y

Some patches needed rebasing and, as usual, the applied and reverted, wireless
drivers, Github workflows, READMEs and defconfigs patches were removed.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2024-06-18 18:52:49 +02:00

29 lines
968 B
Diff

From 851ed91367a75160b5bf1424f3921a28bad2634c Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Tue, 23 May 2023 14:14:05 +0100
Subject: [PATCH 0470/1085] 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 <dave.stevenson@raspberrypi.com>
---
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) {