This is an automated email from the ASF dual-hosted git repository.

jerpelea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 4d89d7186ed405aab67de8f1dc83a1465b78c4d7
Author: Eren Terzioglu <eren.terzio...@espressif.com>
AuthorDate: Wed Feb 26 09:47:05 2025 +0100

    arch/xtensa/esp32[s2|s3]: Add I2C slave support
    
    Add I2C slave support on arch level for Xtensa based Espressif devices
    
    Signed-off-by: Eren Terzioglu <eren.terzio...@espressif.com>
---
 arch/xtensa/src/common/espressif/Kconfig   | 19 ++++++++--
 arch/xtensa/src/common/espressif/Make.defs |  4 +++
 arch/xtensa/src/esp32/Kconfig              | 54 +++++++++++++++++++++++++---
 arch/xtensa/src/esp32/Make.defs            |  2 +-
 arch/xtensa/src/esp32/esp32_i2c.c          |  4 +--
 arch/xtensa/src/esp32/esp32_i2c.h          |  4 +--
 arch/xtensa/src/esp32/hal.mk               |  2 ++
 arch/xtensa/src/esp32s2/Kconfig            | 56 +++++++++++++++++++++++++++---
 arch/xtensa/src/esp32s2/Make.defs          |  2 +-
 arch/xtensa/src/esp32s2/esp32s2_i2c.c      |  4 +--
 arch/xtensa/src/esp32s2/esp32s2_i2c.h      |  4 +--
 arch/xtensa/src/esp32s2/hal.mk             |  2 ++
 arch/xtensa/src/esp32s3/Kconfig            | 54 +++++++++++++++++++++++++---
 arch/xtensa/src/esp32s3/Make.defs          |  2 +-
 arch/xtensa/src/esp32s3/esp32s3_i2c.c      |  4 +--
 arch/xtensa/src/esp32s3/esp32s3_i2c.h      |  4 +--
 arch/xtensa/src/esp32s3/hal.mk             |  2 ++
 17 files changed, 193 insertions(+), 30 deletions(-)

diff --git a/arch/xtensa/src/common/espressif/Kconfig 
b/arch/xtensa/src/common/espressif/Kconfig
index 4ee5ab0ab3..88f71c879b 100644
--- a/arch/xtensa/src/common/espressif/Kconfig
+++ b/arch/xtensa/src/common/espressif/Kconfig
@@ -28,9 +28,24 @@ config ESPRESSIF_TEMP
        ---help---
                A built-in sensor used to measure the chip's internal 
temperature.
 
-config ESPRESSIF_I2C_PERIPH
+config ESPRESSIF_I2C_PERIPH_MASTER_MODE
        bool
-       depends on (ESP32S3_I2C0 || ESP32S3_I2C1) || (ESP32_I2C0 || ESP32_I2C1) 
|| (ESP32S2_I2C0 || ESP32S2_I2C1)
+       depends on (ESP32S3_I2C_PERIPH_MASTER_MODE || 
ESP32S2_I2C_PERIPH_MASTER_MODE || ESP32_I2C_PERIPH_MASTER_MODE)
+       default n
+
+config ESPRESSIF_I2C_PERIPH_SLAVE_MODE
+       bool
+       depends on (ESP32S3_I2C_PERIPH_SLAVE_MODE || 
ESP32S2_I2C_PERIPH_SLAVE_MODE || ESP32_I2C_PERIPH_SLAVE_MODE)
+       default n
+
+config ESPRESSIF_I2C0_SLAVE
+       bool
+       depends on (ESP32S3_I2C0_SLAVE_MODE || ESP32S2_I2C0_SLAVE_MODE || 
ESP32_I2C0_SLAVE_MODE)
+       default n
+
+config ESPRESSIF_I2C1_SLAVE
+       bool
+       depends on (ESP32S3_I2C1_SLAVE_MODE || ESP32S2_I2C1_SLAVE_MODE || 
ESP32_I2C1_SLAVE_MODE)
        default n
 
 config ESPRESSIF_I2C_BITBANG
diff --git a/arch/xtensa/src/common/espressif/Make.defs 
b/arch/xtensa/src/common/espressif/Make.defs
index 2b6447fc14..066a727780 100644
--- a/arch/xtensa/src/common/espressif/Make.defs
+++ b/arch/xtensa/src/common/espressif/Make.defs
@@ -64,6 +64,10 @@ CHIP_CSRCS += esp_spiflash_mtd.c
 endif
 endif
 
+ifeq ($(CONFIG_ESPRESSIF_I2C_PERIPH_SLAVE_MODE),y)
+CHIP_CSRCS += esp_i2c_slave.c
+endif
+
 ifeq ($(CONFIG_SYSTEM_NXDIAG_ESPRESSIF_CHIP_WO_TOOL),y)
 CHIP_CSRCS += esp_nxdiag.c
 endif
diff --git a/arch/xtensa/src/esp32/Kconfig b/arch/xtensa/src/esp32/Kconfig
index e258742aa9..b04fc2a978 100644
--- a/arch/xtensa/src/esp32/Kconfig
+++ b/arch/xtensa/src/esp32/Kconfig
@@ -831,13 +831,59 @@ config ESP32_I2C0
        bool "I2C 0"
        default n
        select ESP32_I2C
-       select ESPRESSIF_I2C_PERIPH
 
 config ESP32_I2C1
        bool "I2C 1"
        default n
        select ESP32_I2C
-       select ESPRESSIF_I2C_PERIPH
+
+       config ESP32_I2C_PERIPH_MASTER_MODE
+       bool
+       depends on (ESP32_I2C0_MASTER_MODE || ESP32_I2C1_MASTER_MODE)
+       default n
+       select ESPRESSIF_I2C_PERIPH_MASTER_MODE
+
+config ESP32_I2C_PERIPH_SLAVE_MODE
+       bool
+       depends on (ESP32_I2C0_SLAVE_MODE || ESP32_I2C1_SLAVE_MODE)
+       default n
+       select ESPRESSIF_I2C_PERIPH_SLAVE_MODE
+       select ESPRESSIF_I2C0_SLAVE if ESP32_I2C0_SLAVE_MODE
+       select ESPRESSIF_I2C1_SLAVE if ESP32_I2C1_SLAVE_MODE
+
+choice ESP32_I2C0_MODE
+       prompt "I2C0 Mode"
+       depends on ESP32_I2C0
+       default ESP32_I2C0_MASTER_MODE
+
+config ESP32_I2C0_MASTER_MODE
+       bool "I2C0 Master Mode"
+       select ESP32_I2C_PERIPH_MASTER_MODE
+
+config ESP32_I2C0_SLAVE_MODE
+       bool "I2C0 Slave Mode"
+       select I2C_SLAVE
+       select I2C_SLAVE_DRIVER
+       select ESP32_I2C_PERIPH_SLAVE_MODE
+
+endchoice # ESP32_I2C0_MODE
+
+choice ESP32_I2C1_MODE
+       prompt "I2C1 Mode"
+       depends on ESP32_I2C1
+       default ESP32_I2C1_MASTER_MODE
+
+config ESP32_I2C1_MASTER_MODE
+       bool "I2C1 Master Mode"
+       select ESP32_I2C_PERIPH_MASTER_MODE
+
+config ESP32_I2C1_SLAVE_MODE
+       bool "I2C1 Slave Mode"
+       select I2C_SLAVE
+       select I2C_SLAVE_DRIVER
+       select ESP32_I2C_PERIPH_SLAVE_MODE
+
+endchoice # ESP32_I2C1_MODE
 
 config ESP32_TWAI0
        bool "TWAI (CAN) 0"
@@ -1202,12 +1248,12 @@ endif # ESP32_I2C1
 config ESP32_I2CTIMEOSEC
        int "Timeout seconds"
        default 0
-       depends on ESPRESSIF_I2C_PERIPH
+       depends on ESP32_I2C_PERIPH_MASTER_MODE
 
 config ESP32_I2CTIMEOMS
        int "Timeout milliseconds"
        default 500
-       depends on ESPRESSIF_I2C_PERIPH
+       depends on ESP32_I2C_PERIPH_MASTER_MODE
 
 endmenu # I2C configuration
 
diff --git a/arch/xtensa/src/esp32/Make.defs b/arch/xtensa/src/esp32/Make.defs
index a3f532271d..873bf50f7b 100644
--- a/arch/xtensa/src/esp32/Make.defs
+++ b/arch/xtensa/src/esp32/Make.defs
@@ -75,7 +75,7 @@ CHIP_CSRCS += esp32_ledc.c
 endif
 
 ifeq ($(CONFIG_ESP32_I2C),y)
-ifeq ($(CONFIG_ESPRESSIF_I2C_PERIPH),y)
+ifeq ($(CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE),y)
 CHIP_CSRCS += esp32_i2c.c
 endif
 endif
diff --git a/arch/xtensa/src/esp32/esp32_i2c.c 
b/arch/xtensa/src/esp32/esp32_i2c.c
index 211081c8fe..dd0b1a640d 100644
--- a/arch/xtensa/src/esp32/esp32_i2c.c
+++ b/arch/xtensa/src/esp32/esp32_i2c.c
@@ -24,7 +24,7 @@
 
 #include <nuttx/config.h>
 
-#ifdef CONFIG_ESPRESSIF_I2C_PERIPH
+#ifdef CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -1569,4 +1569,4 @@ int esp32_i2cbus_uninitialize(struct i2c_master_s *dev)
   return OK;
 }
 
-#endif /* CONFIG_ESPRESSIF_I2C_PERIPH */
+#endif /* CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE */
diff --git a/arch/xtensa/src/esp32/esp32_i2c.h 
b/arch/xtensa/src/esp32/esp32_i2c.h
index 32687318ef..bb540dfed5 100644
--- a/arch/xtensa/src/esp32/esp32_i2c.h
+++ b/arch/xtensa/src/esp32/esp32_i2c.h
@@ -55,7 +55,7 @@ extern "C"
  * Public Function Prototypes
  ****************************************************************************/
 
-#ifdef CONFIG_ESPRESSIF_I2C_PERIPH
+#ifdef CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE
 /****************************************************************************
  * Name: esp32_i2cbus_initialize
  *
@@ -91,7 +91,7 @@ struct i2c_master_s *esp32_i2cbus_initialize(int port);
  ****************************************************************************/
 
 int esp32_i2cbus_uninitialize(struct i2c_master_s *dev);
-#endif /* CONFIG_ESPRESSIF_I2C_PERIPH */
+#endif /* CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE */
 
 #ifdef __cplusplus
 }
diff --git a/arch/xtensa/src/esp32/hal.mk b/arch/xtensa/src/esp32/hal.mk
index d9819b6eb3..ef96969c02 100644
--- a/arch/xtensa/src/esp32/hal.mk
+++ b/arch/xtensa/src/esp32/hal.mk
@@ -115,12 +115,14 @@ CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)uart_hal_iram.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)uart_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)mmu_hal.c
+CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)i2c_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)log$(DELIM)log_noos.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)log$(DELIM)log.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)gpio_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)ledc_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)pcnt_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)rmt_periph.c
+CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)i2c_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)mcpwm_periph.c
 
 ifeq ($(CONFIG_ESPRESSIF_SIMPLE_BOOT),y)
diff --git a/arch/xtensa/src/esp32s2/Kconfig b/arch/xtensa/src/esp32s2/Kconfig
index 895eeb4956..327dad56f9 100644
--- a/arch/xtensa/src/esp32s2/Kconfig
+++ b/arch/xtensa/src/esp32s2/Kconfig
@@ -473,14 +473,60 @@ config ESP32S2_I2C0
        default n
        select ESP32S2_I2C
        select I2C
-       select ESPRESSIF_I2C_PERIPH
 
 config ESP32S2_I2C1
        bool "I2C 1"
        default n
        select ESP32S2_I2C
        select I2C
-       select ESPRESSIF_I2C_PERIPH
+
+config ESP32S2_I2C_PERIPH_MASTER_MODE
+       bool
+       depends on (ESP32S2_I2C0_MASTER_MODE || ESP32S2_I2C1_MASTER_MODE)
+       default n
+       select ESPRESSIF_I2C_PERIPH_MASTER_MODE
+
+config ESP32S2_I2C_PERIPH_SLAVE_MODE
+       bool
+       depends on (ESP32S2_I2C0_SLAVE_MODE || ESP32S2_I2C1_SLAVE_MODE)
+       default n
+       select ESPRESSIF_I2C_PERIPH_SLAVE_MODE
+       select ESPRESSIF_I2C0_SLAVE if ESP32S2_I2C0_SLAVE_MODE
+       select ESPRESSIF_I2C1_SLAVE if ESP32S2_I2C1_SLAVE_MODE
+
+choice ESP32S2_I2C0_MODE
+       prompt "I2C0 Mode"
+       depends on ESP32S2_I2C0
+       default ESP32S2_I2C0_MASTER_MODE
+
+config ESP32S2_I2C0_MASTER_MODE
+       bool "I2C0 Master Mode"
+       select ESP32S2_I2C_PERIPH_MASTER_MODE
+
+config ESP32S2_I2C0_SLAVE_MODE
+       bool "I2C0 Slave Mode"
+       select I2C_SLAVE
+       select I2C_SLAVE_DRIVER
+       select ESP32S2_I2C_PERIPH_SLAVE_MODE
+
+endchoice # ESP32S2_I2C0_MODE
+
+choice ESP32S2_I2C1_MODE
+       prompt "I2C1 Mode"
+       depends on ESP32S2_I2C1
+       default ESP32S2_I2C1_MASTER_MODE
+
+config ESP32S2_I2C1_MASTER_MODE
+       bool "I2C1 Master Mode"
+       select ESP32S2_I2C_PERIPH_MASTER_MODE
+
+config ESP32S2_I2C1_SLAVE_MODE
+       bool "I2C1 Slave Mode"
+       select I2C_SLAVE
+       select I2C_SLAVE_DRIVER
+       select ESP32S2_I2C_PERIPH_SLAVE_MODE
+
+endchoice # ESP32S2_I2C1_MODE
 
 config ESP32S2_TWAI
        bool "TWAI (CAN)"
@@ -790,17 +836,17 @@ config ESP32S2_I2C1_SDAPIN
        default 7
        range 0 46
 
-endif # ESP32S2_I2C1
+endif # ESPRESSIF_I2C1
 
 config ESP32S2_I2CTIMEOSEC
        int "Timeout seconds"
        default 0
-       depends on ESPRESSIF_I2C_PERIPH
+       depends on ESP32S2_I2C_PERIPH_MASTER_MODE
 
 config ESP32S2_I2CTIMEOMS
        int "Timeout milliseconds"
        default 500
-       depends on ESPRESSIF_I2C_PERIPH
+       depends on ESP32S2_I2C_PERIPH_MASTER_MODE
 
 endmenu # I2C Configuration
 
diff --git a/arch/xtensa/src/esp32s2/Make.defs 
b/arch/xtensa/src/esp32s2/Make.defs
index c9c534cfd7..b1423db2c1 100644
--- a/arch/xtensa/src/esp32s2/Make.defs
+++ b/arch/xtensa/src/esp32s2/Make.defs
@@ -54,7 +54,7 @@ CHIP_CSRCS += esp32s2_rng.c
 endif
 
 ifeq ($(CONFIG_ESP32S2_I2C),y)
-ifeq ($(CONFIG_ESPRESSIF_I2C_PERIPH),y)
+ifeq ($(CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE),y)
 CHIP_CSRCS += esp32s2_i2c.c
 endif
 endif
diff --git a/arch/xtensa/src/esp32s2/esp32s2_i2c.c 
b/arch/xtensa/src/esp32s2/esp32s2_i2c.c
index d0c4f323ce..1bd19ab5b0 100644
--- a/arch/xtensa/src/esp32s2/esp32s2_i2c.c
+++ b/arch/xtensa/src/esp32s2/esp32s2_i2c.c
@@ -24,7 +24,7 @@
 
 #include <nuttx/config.h>
 
-#ifdef CONFIG_ESPRESSIF_I2C_PERIPH
+#ifdef CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE
 
 #include <assert.h>
 #include <debug.h>
@@ -1613,4 +1613,4 @@ int esp32s2_i2cbus_uninitialize(struct i2c_master_s *dev)
   return OK;
 }
 
-#endif /* CONFIG_ESPRESSIF_I2C_PERIPH */
+#endif /* CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE */
diff --git a/arch/xtensa/src/esp32s2/esp32s2_i2c.h 
b/arch/xtensa/src/esp32s2/esp32s2_i2c.h
index 1e480a9ad5..4b83c33c07 100644
--- a/arch/xtensa/src/esp32s2/esp32s2_i2c.h
+++ b/arch/xtensa/src/esp32s2/esp32s2_i2c.h
@@ -51,7 +51,7 @@
  * Public Function Prototypes
  ****************************************************************************/
 
-#ifdef CONFIG_ESPRESSIF_I2C_PERIPH
+#ifdef CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE
 /****************************************************************************
  * Name: esp32s2_i2cbus_initialize
  *
@@ -87,7 +87,7 @@ struct i2c_master_s *esp32s2_i2cbus_initialize(int port);
  ****************************************************************************/
 
 int esp32s2_i2cbus_uninitialize(struct i2c_master_s *dev);
-#endif /* CONFIG_ESPRESSIF_I2C_PERIPH */
+#endif /* CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE */
 
 #endif /* __ASSEMBLY__ */
 #endif /* __ARCH_XTENSA_SRC_ESP32S2_ESP32S2_I2C_H */
diff --git a/arch/xtensa/src/esp32s2/hal.mk b/arch/xtensa/src/esp32s2/hal.mk
index 07b8755621..d04648c8dd 100644
--- a/arch/xtensa/src/esp32s2/hal.mk
+++ b/arch/xtensa/src/esp32s2/hal.mk
@@ -100,6 +100,7 @@ CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)cache_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)mpu_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)mmu_hal.c
+CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)i2c_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)brownout_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)efuse_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)gpio_hal.c
@@ -116,6 +117,7 @@ CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)ledc_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)pcnt_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)rmt_periph.c
+CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)i2c_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)temperature_sensor_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)spi_flash$(DELIM)flash_ops.c
 
diff --git a/arch/xtensa/src/esp32s3/Kconfig b/arch/xtensa/src/esp32s3/Kconfig
index 38cf7d35b4..c321799d47 100644
--- a/arch/xtensa/src/esp32s3/Kconfig
+++ b/arch/xtensa/src/esp32s3/Kconfig
@@ -660,14 +660,60 @@ config ESP32S3_I2C0
        default n
        select ESP32S3_I2C
        select I2C
-       select ESPRESSIF_I2C_PERIPH
 
 config ESP32S3_I2C1
        bool "I2C 1"
        default n
        select ESP32S3_I2C
        select I2C
-       select ESPRESSIF_I2C_PERIPH
+
+config ESP32S3_I2C_PERIPH_MASTER_MODE
+       bool
+       depends on (ESP32S3_I2C0_MASTER_MODE || ESP32S3_I2C1_MASTER_MODE)
+       default n
+       select ESPRESSIF_I2C_PERIPH_MASTER_MODE
+
+config ESP32S3_I2C_PERIPH_SLAVE_MODE
+       bool
+       depends on (ESP32S3_I2C0_SLAVE_MODE || ESP32S3_I2C1_SLAVE_MODE)
+       default n
+       select ESPRESSIF_I2C_PERIPH_SLAVE_MODE
+       select ESPRESSIF_I2C0_SLAVE if ESP32S3_I2C0_SLAVE_MODE
+       select ESPRESSIF_I2C1_SLAVE if ESP32S3_I2C1_SLAVE_MODE
+
+choice ESP32S3_I2C0_MODE
+       prompt "I2C0 Mode"
+       depends on ESP32S3_I2C0
+       default ESP32S3_I2C0_MASTER_MODE
+
+config ESP32S3_I2C0_MASTER_MODE
+       bool "I2C0 Master Mode"
+       select ESP32S3_I2C_PERIPH_MASTER_MODE
+
+config ESP32S3_I2C0_SLAVE_MODE
+       bool "I2C0 Slave Mode"
+       select I2C_SLAVE
+       select I2C_SLAVE_DRIVER
+       select ESP32S3_I2C_PERIPH_SLAVE_MODE
+
+endchoice # ESP32S3_I2C0_MODE
+
+choice ESP32S3_I2C1_MODE
+       prompt "I2C1 Mode"
+       depends on ESP32S3_I2C1
+       default ESP32S3_I2C1_MASTER_MODE
+
+config ESP32S3_I2C1_MASTER_MODE
+       bool "I2C1 Master Mode"
+       select ESP32S3_I2C_PERIPH_MASTER_MODE
+
+config ESP32S3_I2C1_SLAVE_MODE
+       bool "I2C1 Slave Mode"
+       select I2C_SLAVE
+       select I2C_SLAVE_DRIVER
+       select ESP32S3_I2C_PERIPH_SLAVE_MODE
+
+endchoice # ESP32S3_I2C1_MODE
 
 config ESP32S3_TWAI
        bool "TWAI (CAN)"
@@ -1402,12 +1448,12 @@ endif # ESP32S3_I2C1
 config ESP32S3_I2CTIMEOSEC
        int "Timeout seconds"
        default 0
-       depends on ESPRESSIF_I2C_PERIPH
+       depends on ESP32S3_I2C_PERIPH_MASTER_MODE
 
 config ESP32S3_I2CTIMEOMS
        int "Timeout milliseconds"
        default 500
-       depends on ESPRESSIF_I2C_PERIPH
+       depends on ESP32S3_I2C_PERIPH_MASTER_MODE
 
 endmenu # I2C Configuration
 
diff --git a/arch/xtensa/src/esp32s3/Make.defs 
b/arch/xtensa/src/esp32s3/Make.defs
index 669a4500da..8cb8077d0d 100644
--- a/arch/xtensa/src/esp32s3/Make.defs
+++ b/arch/xtensa/src/esp32s3/Make.defs
@@ -110,7 +110,7 @@ CHIP_CSRCS += esp32s3_adc.c
 endif
 
 ifeq ($(CONFIG_ESP32S3_I2C),y)
-ifeq ($(CONFIG_ESPRESSIF_I2C_PERIPH),y)
+ifeq ($(CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE),y)
 CHIP_CSRCS += esp32s3_i2c.c
 endif
 endif
diff --git a/arch/xtensa/src/esp32s3/esp32s3_i2c.c 
b/arch/xtensa/src/esp32s3/esp32s3_i2c.c
index f78532181b..1a36db003f 100644
--- a/arch/xtensa/src/esp32s3/esp32s3_i2c.c
+++ b/arch/xtensa/src/esp32s3/esp32s3_i2c.c
@@ -24,7 +24,7 @@
 
 #include <nuttx/config.h>
 
-#ifdef CONFIG_ESPRESSIF_I2C_PERIPH
+#ifdef CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE
 
 #include <assert.h>
 #include <debug.h>
@@ -1647,4 +1647,4 @@ int esp32s3_i2cbus_uninitialize(struct i2c_master_s *dev)
   return OK;
 }
 
-#endif /* CONFIG_ESPRESSIF_I2C_PERIPH */
+#endif /* CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE */
diff --git a/arch/xtensa/src/esp32s3/esp32s3_i2c.h 
b/arch/xtensa/src/esp32s3/esp32s3_i2c.h
index e4edaeca87..b5b253745d 100644
--- a/arch/xtensa/src/esp32s3/esp32s3_i2c.h
+++ b/arch/xtensa/src/esp32s3/esp32s3_i2c.h
@@ -51,7 +51,7 @@
  * Public Function Prototypes
  ****************************************************************************/
 
-#ifdef CONFIG_ESPRESSIF_I2C_PERIPH
+#ifdef CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE
 /****************************************************************************
  * Name: esp32s3_i2cbus_initialize
  *
@@ -87,7 +87,7 @@ struct i2c_master_s *esp32s3_i2cbus_initialize(int port);
  ****************************************************************************/
 
 int esp32s3_i2cbus_uninitialize(struct i2c_master_s *dev);
-#endif /* CONFIG_ESPRESSIF_I2C_PERIPH */
+#endif /* CONFIG_ESPRESSIF_I2C_PERIPH_MASTER_MODE */
 
 #endif /* __ASSEMBLY__ */
 #endif /* __ARCH_XTENSA_SRC_ESP32S3_ESP32S3_I2C_H */
diff --git a/arch/xtensa/src/esp32s3/hal.mk b/arch/xtensa/src/esp32s3/hal.mk
index 17ff6c043a..d3637d21f3 100644
--- a/arch/xtensa/src/esp32s3/hal.mk
+++ b/arch/xtensa/src/esp32s3/hal.mk
@@ -117,6 +117,7 @@ CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)cache_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)mpu_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)mmu_hal.c
+CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)i2c_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)uart_hal_iram.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)hal$(DELIM)uart_hal.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)log$(DELIM)log_noos.c
@@ -125,6 +126,7 @@ CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)ledc_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)pcnt_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)rmt_periph.c
+CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)i2c_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)mcpwm_periph.c
 CHIP_CSRCS += 
chip$(DELIM)$(ESP_HAL_3RDPARTY_REPO)$(DELIM)components$(DELIM)soc$(DELIM)$(CHIP_SERIES)$(DELIM)temperature_sensor_periph.c
 

Reply via email to