diff --git a/arch/xtensa/src/esp32/Kconfig b/arch/xtensa/src/esp32/Kconfig index 6d3669c10a..a5ecd7b20a 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 0353862b06..6d0d9dc2dd 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 */