mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-20 22:23:27 +00:00
46 lines
1.3 KiB
Diff
46 lines
1.3 KiB
Diff
|
From a563176190609097f9efa312a09f7a9b527c9a68 Mon Sep 17 00:00:00 2001
|
||
|
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||
|
Date: Tue, 23 May 2023 14:11:52 +0100
|
||
|
Subject: [PATCH] i2c-bcm2835: Flush FIFOs cleanly on error
|
||
|
|
||
|
On error condition, note the error return code, but still
|
||
|
handle the FIFOs in the normal way rather than relying on
|
||
|
C_CLEAR flushing everything cleanly.
|
||
|
|
||
|
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||
|
---
|
||
|
drivers/i2c/busses/i2c-bcm2835.c | 7 ++-----
|
||
|
1 file changed, 2 insertions(+), 5 deletions(-)
|
||
|
|
||
|
--- a/drivers/i2c/busses/i2c-bcm2835.c
|
||
|
+++ b/drivers/i2c/busses/i2c-bcm2835.c
|
||
|
@@ -385,10 +385,8 @@ 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)
|
||
|
i2c_dev->msg_err = err;
|
||
|
- goto complete;
|
||
|
- }
|
||
|
|
||
|
if (val & BCM2835_I2C_S_DONE) {
|
||
|
if (!i2c_dev->curr_msg) {
|
||
|
@@ -400,8 +398,6 @@ static irqreturn_t bcm2835_i2c_isr(int t
|
||
|
|
||
|
if ((val & BCM2835_I2C_S_RXD) || i2c_dev->msg_buf_remaining)
|
||
|
i2c_dev->msg_err = BCM2835_I2C_S_LEN;
|
||
|
- else
|
||
|
- i2c_dev->msg_err = 0;
|
||
|
goto complete;
|
||
|
}
|
||
|
|
||
|
@@ -465,6 +461,7 @@ static int bcm2835_i2c_xfer(struct i2c_a
|
||
|
|
||
|
i2c_dev->curr_msg = msgs;
|
||
|
i2c_dev->num_msgs = num;
|
||
|
+ i2c_dev->msg_err = 0;
|
||
|
reinit_completion(&i2c_dev->completion);
|
||
|
|
||
|
bcm2835_i2c_start_transfer(i2c_dev);
|