From b33ccd01cfae2c4f5cc9c6ccf46130c0fc51758f Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Nihei Date: Wed, 15 Sep 2021 16:28:11 -0300 Subject: [PATCH] xtensa/esp32: Make the semaphore timeout on I2C configurable Signed-off-by: Gustavo Henrique Nihei --- arch/xtensa/src/esp32/Kconfig | 8 ++++++++ arch/xtensa/src/esp32/esp32_i2c.c | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/arch/xtensa/src/esp32/Kconfig b/arch/xtensa/src/esp32/Kconfig index 6d3669c10a5..a5ecd7b20a2 100644 --- a/arch/xtensa/src/esp32/Kconfig +++ b/arch/xtensa/src/esp32/Kconfig @@ -728,6 +728,14 @@ config ESP32_I2C1_SDAPIN endif # ESP32_I2C1 +config ESP32_I2CTIMEOSEC + int "Timeout seconds" + default 0 + +config ESP32_I2CTIMEOMS + int "Timeout milliseconds" + default 500 + endmenu # I2C configuration menu "SPI configuration" diff --git a/arch/xtensa/src/esp32/esp32_i2c.c b/arch/xtensa/src/esp32/esp32_i2c.c index 0353862b062..6d0d9dc2dda 100644 --- a/arch/xtensa/src/esp32/esp32_i2c.c +++ b/arch/xtensa/src/esp32/esp32_i2c.c @@ -727,8 +727,18 @@ static int esp32_i2c_sem_waitdone(FAR struct esp32_i2c_priv_s *priv) clock_gettime(CLOCK_REALTIME, &abstime); - abstime.tv_sec += 10; - abstime.tv_nsec += 0; +#if CONFIG_ESP32_I2CTIMEOSEC > 0 + abstime.tv_sec += CONFIG_ESP32_I2CTIMEOSEC; +#endif + +#if CONFIG_ESP32_I2CTIMEOMS > 0 + abstime.tv_nsec += CONFIG_ESP32_I2CTIMEOMS * NSEC_PER_MSEC; + if (abstime.tv_nsec >= 1000 * NSEC_PER_MSEC) + { + abstime.tv_sec++; + abstime.tv_nsec -= 1000 * NSEC_PER_MSEC; + } +#endif /* Wait on ISR semaphore */