From 52cea558af6e7dfa41cbfc616ff209ccb36c1276 Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Nihei Date: Wed, 15 Sep 2021 16:29:50 -0300 Subject: [PATCH] risc-v/esp32c3: Make the semaphore timeout on I2C configurable Signed-off-by: Gustavo Henrique Nihei --- arch/risc-v/src/esp32c3/Kconfig | 8 ++++++++ arch/risc-v/src/esp32c3/esp32c3_i2c.c | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/arch/risc-v/src/esp32c3/Kconfig b/arch/risc-v/src/esp32c3/Kconfig index 30126a60c1..f91e39dfa5 100644 --- a/arch/risc-v/src/esp32c3/Kconfig +++ b/arch/risc-v/src/esp32c3/Kconfig @@ -375,6 +375,14 @@ config ESP32C3_I2C0_SDAPIN endif # ESP32C3_I2C0 +config ESP32C3_I2CTIMEOSEC + int "Timeout seconds" + default 0 + +config ESP32C3_I2CTIMEOMS + int "Timeout milliseconds" + default 500 + endmenu # I2C configuration menu "SPI configuration" diff --git a/arch/risc-v/src/esp32c3/esp32c3_i2c.c b/arch/risc-v/src/esp32c3/esp32c3_i2c.c index 8807703315..3617382adb 100644 --- a/arch/risc-v/src/esp32c3/esp32c3_i2c.c +++ b/arch/risc-v/src/esp32c3/esp32c3_i2c.c @@ -799,8 +799,18 @@ static int esp32c3_i2c_sem_waitdone(struct esp32c3_i2c_priv_s *priv) clock_gettime(CLOCK_REALTIME, &abstime); - abstime.tv_sec += 10; - abstime.tv_nsec += 0; +#if CONFIG_ESP32C3_I2CTIMEOSEC > 0 + abstime.tv_sec += CONFIG_ESP32C3_I2CTIMEOSEC; +#endif + +#if CONFIG_ESP32C3_I2CTIMEOMS > 0 + abstime.tv_nsec += CONFIG_ESP32C3_I2CTIMEOMS * NSEC_PER_MSEC; + if (abstime.tv_nsec >= 1000 * NSEC_PER_MSEC) + { + abstime.tv_sec++; + abstime.tv_nsec -= 1000 * NSEC_PER_MSEC; + } +#endif ret = nxsem_timedwait_uninterruptible(&priv->sem_isr, &abstime);