Skip to content

Commit 7c175a1

Browse files
pablobachocfriedt
authored andcommitted
drivers: i2c: stm32: make transfer timeout configurable
Make the STM32 I2C transfer timeout configurable via Kconfig. - Add CONFIG_I2C_STM32_TRANSFER_TIMEOUT_MSEC Kconfig symbol. - Use this Kconfig value in both STM32 I2C drivers. Tested on STM32WBA55CG. Fixes: #95819 Signed-off-by: Pablo Bacho <[email protected]>
1 parent ed0b560 commit 7c175a1

File tree

3 files changed

+16
-12
lines changed

3 files changed

+16
-12
lines changed

drivers/i2c/Kconfig.stm32

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,12 @@ config I2C_STM32_V2_DMA
6565
help
6666
Enable DMA support for the STM32 I2C driver.
6767

68+
config I2C_STM32_TRANSFER_TIMEOUT_MSEC
69+
int "STM32 I2C transfer timeout (ms)"
70+
range 1 $(UINT32_MAX)
71+
default 500
72+
help
73+
Time in milliseconds to wait for an I2C transfer to complete before
74+
considering it timed out.
75+
6876
endif # I2C_STM32

drivers/i2c/i2c_ll_stm32_v1.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ LOG_MODULE_REGISTER(i2c_ll_stm32_v1);
2424
#include "i2c_ll_stm32.h"
2525
#include "i2c-priv.h"
2626

27-
#define I2C_STM32_TRANSFER_TIMEOUT_MSEC 500
28-
2927
#define I2C_STM32_TIMEOUT_USEC 1000
3028
#define I2C_REQUEST_WRITE 0x00
3129
#define I2C_REQUEST_READ 0x01
@@ -648,7 +646,7 @@ static int32_t i2c_stm32_msg_write(const struct device *dev, struct i2c_msg *msg
648646
i2c_stm32_enable_transfer_interrupts(dev);
649647

650648
if (k_sem_take(&data->device_sync_sem,
651-
K_MSEC(I2C_STM32_TRANSFER_TIMEOUT_MSEC)) != 0) {
649+
K_MSEC(CONFIG_I2C_STM32_TRANSFER_TIMEOUT_MSEC)) != 0) {
652650
LOG_DBG("%s: WRITE timeout", __func__);
653651
i2c_stm32_reset(dev);
654652
return -EIO;
@@ -670,7 +668,7 @@ static int32_t i2c_stm32_msg_read(const struct device *dev, struct i2c_msg *msg,
670668
LL_I2C_EnableIT_RX(i2c);
671669

672670
if (k_sem_take(&data->device_sync_sem,
673-
K_MSEC(I2C_STM32_TRANSFER_TIMEOUT_MSEC)) != 0) {
671+
K_MSEC(CONFIG_I2C_STM32_TRANSFER_TIMEOUT_MSEC)) != 0) {
674672
LOG_DBG("%s: READ timeout", __func__);
675673
i2c_stm32_reset(dev);
676674
return -EIO;

drivers/i2c/i2c_ll_stm32_v2.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ LOG_MODULE_REGISTER(i2c_ll_stm32_v2);
3333
#include "i2c_ll_stm32.h"
3434
#include "i2c-priv.h"
3535

36-
#define I2C_STM32_TRANSFER_TIMEOUT_MSEC 500
37-
3836
#ifdef CONFIG_I2C_STM32_V2_TIMING
3937
/* Use the algorithm to calcuate the I2C timing */
4038
#ifndef I2C_STM32_VALID_TIMING_NBR
@@ -691,7 +689,7 @@ static int i2c_stm32_msg_write(const struct device *dev, struct i2c_msg *msg,
691689
LL_I2C_EnableIT_TX(i2c);
692690

693691
if (k_sem_take(&data->device_sync_sem,
694-
K_MSEC(I2C_STM32_TRANSFER_TIMEOUT_MSEC)) != 0) {
692+
K_MSEC(CONFIG_I2C_STM32_TRANSFER_TIMEOUT_MSEC)) != 0) {
695693
i2c_stm32_master_mode_end(dev);
696694
k_sem_take(&data->device_sync_sem, K_FOREVER);
697695
is_timeout = true;
@@ -750,7 +748,7 @@ static int i2c_stm32_msg_read(const struct device *dev, struct i2c_msg *msg,
750748
LL_I2C_EnableIT_RX(i2c);
751749

752750
if (k_sem_take(&data->device_sync_sem,
753-
K_MSEC(I2C_STM32_TRANSFER_TIMEOUT_MSEC)) != 0) {
751+
K_MSEC(CONFIG_I2C_STM32_TRANSFER_TIMEOUT_MSEC)) != 0) {
754752
i2c_stm32_master_mode_end(dev);
755753
k_sem_take(&data->device_sync_sem, K_FOREVER);
756754
is_timeout = true;
@@ -845,7 +843,7 @@ static inline int msg_done(const struct device *dev,
845843
return -EIO;
846844
}
847845
if ((k_uptime_get() - start_time) >
848-
I2C_STM32_TRANSFER_TIMEOUT_MSEC) {
846+
CONFIG_I2C_STM32_TRANSFER_TIMEOUT_MSEC) {
849847
return -ETIMEDOUT;
850848
}
851849
}
@@ -854,7 +852,7 @@ static inline int msg_done(const struct device *dev,
854852
LL_I2C_GenerateStopCondition(i2c);
855853
while (!LL_I2C_IsActiveFlag_STOP(i2c)) {
856854
if ((k_uptime_get() - start_time) >
857-
I2C_STM32_TRANSFER_TIMEOUT_MSEC) {
855+
CONFIG_I2C_STM32_TRANSFER_TIMEOUT_MSEC) {
858856
return -ETIMEDOUT;
859857
}
860858
}
@@ -889,7 +887,7 @@ static int i2c_stm32_msg_write(const struct device *dev, struct i2c_msg *msg,
889887
}
890888

891889
if ((k_uptime_get() - start_time) >
892-
I2C_STM32_TRANSFER_TIMEOUT_MSEC) {
890+
CONFIG_I2C_STM32_TRANSFER_TIMEOUT_MSEC) {
893891
return -ETIMEDOUT;
894892
}
895893
}
@@ -920,7 +918,7 @@ static int i2c_stm32_msg_read(const struct device *dev, struct i2c_msg *msg,
920918
return -EIO;
921919
}
922920
if ((k_uptime_get() - start_time) >
923-
I2C_STM32_TRANSFER_TIMEOUT_MSEC) {
921+
CONFIG_I2C_STM32_TRANSFER_TIMEOUT_MSEC) {
924922
return -ETIMEDOUT;
925923
}
926924
}

0 commit comments

Comments
 (0)