From 7e321e0aba3859614dc65242a3f60737a0238cd4 Mon Sep 17 00:00:00 2001 From: Eren Terzioglu Date: Fri, 27 Mar 2026 09:34:37 +0100 Subject: [PATCH] arch/risc-v/espressif: Add LPI2C support for esp32p4 Add LPI2C support for esp32p4 Signed-off-by: Eren Terzioglu --- arch/risc-v/src/common/espressif/Kconfig | 28 +++++++++++++++------- arch/risc-v/src/common/espressif/esp_i2c.c | 15 +++++++----- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/arch/risc-v/src/common/espressif/Kconfig b/arch/risc-v/src/common/espressif/Kconfig index 24fcb55b890..2c888d55f1b 100644 --- a/arch/risc-v/src/common/espressif/Kconfig +++ b/arch/risc-v/src/common/espressif/Kconfig @@ -3123,7 +3123,8 @@ config ESPRESSIF_I2C0_SCLPIN config ESPRESSIF_I2C0_SDAPIN int "I2C0 SDA Pin" - default 5 + default 5 if !ESPRESSIF_LPI2C + default 22 if ESPRESSIF_LPI2C range 0 21 if ARCH_CHIP_ESP32C3 range 0 30 if ARCH_CHIP_ESP32C6 range 0 27 if ARCH_CHIP_ESP32H2 @@ -3175,22 +3176,31 @@ choice ESPRESSIF_LPI2C_MODE default ESPRESSIF_LPI2C_MASTER_MODE config ESPRESSIF_LPI2C_MASTER_MODE - bool "I2C0 Master Mode" + bool "LP I2C0 Master Mode" select ESPRESSIF_I2C_PERIPH_MASTER_MODE endchoice # ESPRESSIF_LPI2C_MODE -config ESPRESSIF_LPI2C_SCLPIN - int "LPI2C SCL Pin" - default 7 +if ESPRESSIF_LP_I2C0 + +config ESPRESSIF_LPI2C0_SCLPIN + int "LPI2C0 SCL Pin" + default 7 if ARCH_CHIP_ESP32C6 + default 4 if ARCH_CHIP_ESP32P4 + range 7 7 if ARCH_CHIP_ESP32C6 + range 0 15 if ARCH_CHIP_ESP32P4 range 7 7 if ARCH_CHIP_ESP32C6 -config ESPRESSIF_LPI2C_SDAPIN - int "LPI2C SDA Pin" - default 6 +config ESPRESSIF_LPI2C0_SDAPIN + int "LPI2C0 SDA Pin" + default 6 if ARCH_CHIP_ESP32C6 + default 5 if ARCH_CHIP_ESP32P4 + range 6 6 if ARCH_CHIP_ESP32C6 + range 0 15 if ARCH_CHIP_ESP32P4 range 6 6 if ARCH_CHIP_ESP32C6 -endif # ESPRESSIF_LPI2C +endif # ESPRESSIF_LP_I2C0 +endif # ESPRESSIF_LP_I2C if ESPRESSIF_I2C_BITBANG diff --git a/arch/risc-v/src/common/espressif/esp_i2c.c b/arch/risc-v/src/common/espressif/esp_i2c.c index c37adb66c7d..f86ea217db5 100644 --- a/arch/risc-v/src/common/espressif/esp_i2c.c +++ b/arch/risc-v/src/common/espressif/esp_i2c.c @@ -70,6 +70,7 @@ # include "io_mux.h" # include "lp_core_i2c.h" # include "soc/i2c_struct.h" +# include "driver/lp_io.h" #endif /**************************************************************************** @@ -430,8 +431,8 @@ i2c_hal_context_t lp_i2c0_ctx = static struct esp_i2c_config_s esp_lp_i2c0_config = { .clk_freq = I2C_CLK_FREQ_DEF, - .scl_pin = 7, - .sda_pin = 6, + .scl_pin = CONFIG_ESPRESSIF_LPI2C0_SCLPIN, + .sda_pin = CONFIG_ESPRESSIF_LPI2C0_SDAPIN, }; static struct esp_i2c_priv_s esp_lp_i2c0_priv = @@ -891,10 +892,12 @@ static void esp_i2c_init(struct esp_i2c_priv_s *priv) rtc_gpio_iomux_func_sel(config->sda_pin, p_i2c_pin->iomux_func); rtc_gpio_iomux_func_sel(config->scl_pin, p_i2c_pin->iomux_func); #else - /* ToDo: Add LP I2C for LP GPIO Matrix - * supported devices (e.g ESP32-P4) - */ - + lp_gpio_connect_out_signal(config->sda_pin, p_i2c_pin->sda_out_sig, 0, + 0); + lp_gpio_connect_in_signal(config->sda_pin, p_i2c_pin->sda_in_sig, 0); + lp_gpio_connect_out_signal(config->scl_pin, p_i2c_pin->scl_out_sig, 0, + 0); + lp_gpio_connect_in_signal(config->scl_pin, p_i2c_pin->scl_in_sig, 0); #endif /* SOC_LP_GPIO_MATRIX_SUPPORTED */ } #endif