[PATCH 2/2] i2c: stm32f7: do not set the STOP condition on error

Jorge Ramirez-Ortiz jorge at foundries.io
Mon Aug 15 13:19:05 CEST 2022


Sending the stop condition without waiting for TC has been
found to lock the bus.

Tested accessing the the NXP SE05X I2C device.

Signed-off-by: Jorge Ramirez-Ortiz <jorge at foundries.io>
---
 drivers/i2c/stm32f7_i2c.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/i2c/stm32f7_i2c.c b/drivers/i2c/stm32f7_i2c.c
index 3a727e68ac..14827e5cec 100644
--- a/drivers/i2c/stm32f7_i2c.c
+++ b/drivers/i2c/stm32f7_i2c.c
@@ -485,9 +485,11 @@ static int stm32_i2c_message_xfer(struct stm32_i2c_priv *i2c_priv,
 		}
 	}
 
-	/* End of transfer, send stop condition */
-	mask = STM32_I2C_CR2_STOP;
-	setbits_le32(&regs->cr2, mask);
+	if (!ret) {
+		/* End of transfer, send stop condition */
+		mask = STM32_I2C_CR2_STOP;
+		setbits_le32(&regs->cr2, mask);
+	}
 
 	return stm32_i2c_check_end_of_message(i2c_priv);
 }
-- 
2.34.1



More information about the U-Boot mailing list