summaryrefslogtreecommitdiffstats
path: root/drivers/i2c
diff options
context:
space:
mode:
authorAlain Volmat <alain.volmat@foss.st.com>2021-09-20 17:21:30 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-12-08 08:50:13 +0100
commit3470290825f3fdcb842b3224c873a2d88b4c2fe8 (patch)
treee4f406ffdb188e05f7871f22f183800afeb5c683 /drivers/i2c
parent8bf31f9d9395b71af3ed33166a057cd3ec0c59da (diff)
downloadlinux-stable-3470290825f3fdcb842b3224c873a2d88b4c2fe8.tar.gz
linux-stable-3470290825f3fdcb842b3224c873a2d88b4c2fe8.tar.bz2
linux-stable-3470290825f3fdcb842b3224c873a2d88b4c2fe8.zip
i2c: stm32f7: recover the bus on access timeout
commit b933d1faf8fa30d16171bcff404e39c41b2a7c84 upstream. When getting an access timeout, ensure that the bus is in a proper state prior to returning the error. Fixes: aeb068c57214 ("i2c: i2c-stm32f7: add driver") Signed-off-by: Alain Volmat <alain.volmat@foss.st.com> Reviewed-by: Pierre-Yves MORDRET <pierre-yves.mordret@foss.st.com> Signed-off-by: Wolfram Sang <wsa@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-stm32f7.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c
index 6feafebf85fe..fc8b5bd6b0dc 100644
--- a/drivers/i2c/busses/i2c-stm32f7.c
+++ b/drivers/i2c/busses/i2c-stm32f7.c
@@ -1579,6 +1579,7 @@ static int stm32f7_i2c_xfer(struct i2c_adapter *i2c_adap,
i2c_dev->msg->addr);
if (i2c_dev->use_dma)
dmaengine_terminate_all(dma->chan_using);
+ stm32f7_i2c_wait_free_bus(i2c_dev);
ret = -ETIMEDOUT;
}
@@ -1629,6 +1630,7 @@ static int stm32f7_i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr,
dev_dbg(dev, "Access to slave 0x%x timed out\n", f7_msg->addr);
if (i2c_dev->use_dma)
dmaengine_terminate_all(dma->chan_using);
+ stm32f7_i2c_wait_free_bus(i2c_dev);
ret = -ETIMEDOUT;
goto clk_free;
}