4141#include "esp_intr_alloc.h"
4242#include "soc/i2c_reg.h"
4343#include "soc/i2c_struct.h"
44+ #include "soc/periph_defs.h"
4445#include "hal/i2c_ll.h"
4546#include "hal/clk_gate_ll.h"
4647#include "esp32-hal-log.h"
4950
5051#define I2C_SLAVE_USE_RX_QUEUE 0 // 1: Queue, 0: RingBuffer
5152
53+ #if !defined(CONFIG_IDF_TARGET_ESP32P4 )
5254#if SOC_HP_I2C_NUM > 1
5355#define I2C_SCL_IDX (p ) ((p == 0) ? I2CEXT0_SCL_OUT_IDX : ((p == 1) ? I2CEXT1_SCL_OUT_IDX : 0))
5456#define I2C_SDA_IDX (p ) ((p == 0) ? I2CEXT0_SDA_OUT_IDX : ((p == 1) ? I2CEXT1_SDA_OUT_IDX : 0))
5557#else
5658#define I2C_SCL_IDX (p ) I2CEXT0_SCL_OUT_IDX
5759#define I2C_SDA_IDX (p ) I2CEXT0_SDA_OUT_IDX
5860#endif
61+ #endif // !defined(CONFIG_IDF_TARGET_ESP32P4)
62+
63+ #ifdef CONFIG_IDF_TARGET_ESP32P4
64+ #define I2C_SCL_IDX (p ) ((p == 0) ? I2C0_SCL_PAD_OUT_IDX : ((p == 1) ? I2C1_SCL_PAD_OUT_IDX : 0))
65+ #define I2C_SDA_IDX (p ) ((p == 0) ? I2C0_SDA_PAD_OUT_IDX : ((p == 1) ? I2C1_SDA_PAD_OUT_IDX : 0))
66+ #endif // ifdef CONFIG_IDF_TARGET_ESP32P4
5967
6068#if CONFIG_IDF_TARGET_ESP32
6169#define I2C_TXFIFO_WM_INT_ENA I2C_TXFIFO_EMPTY_INT_ENA
@@ -173,7 +181,7 @@ static inline void i2c_ll_stretch_clr(i2c_dev_t *hw) {
173181}
174182
175183static inline bool i2c_ll_slave_addressed (i2c_dev_t * hw ) {
176- #if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2
184+ #if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4
177185 return hw -> sr .slave_addressed ;
178186#else
179187 return hw -> status_reg .slave_addressed ;
@@ -182,7 +190,7 @@ static inline bool i2c_ll_slave_addressed(i2c_dev_t *hw) {
182190
183191static inline bool i2c_ll_slave_rw (i2c_dev_t * hw ) //not exposed by hal_ll
184192{
185- #if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2
193+ #if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32P4
186194 return hw -> sr .slave_rw ;
187195#else
188196 return hw -> status_reg .slave_rw ;
@@ -306,14 +314,15 @@ esp_err_t i2cSlaveInit(uint8_t num, int sda, int scl, uint16_t slaveID, uint32_t
306314 frequency = 100000L ;
307315 }
308316 frequency = (frequency * 5 ) / 4 ;
309-
317+ #if !defined( CONFIG_IDF_TARGET_ESP32P4 )
310318 if (i2c -> num == 0 ) {
311319 periph_ll_enable_clk_clear_rst (PERIPH_I2C0_MODULE );
312320#if SOC_HP_I2C_NUM > 1
313321 } else {
314322 periph_ll_enable_clk_clear_rst (PERIPH_I2C1_MODULE );
315323#endif
316324 }
325+ #endif // !defined(CONFIG_IDF_TARGET_ESP32P4)
317326
318327 i2c_ll_slave_init (i2c -> dev );
319328 i2c_ll_slave_set_fifo_mode (i2c -> dev , true);
@@ -341,12 +350,22 @@ esp_err_t i2cSlaveInit(uint8_t num, int sda, int scl, uint16_t slaveID, uint32_t
341350
342351 if (!i2c -> intr_handle ) {
343352 uint32_t flags = ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_SHARED ;
353+ #if !defined(CONFIG_IDF_TARGET_ESP32P4 )
344354 if (i2c -> num == 0 ) {
345355 ret = esp_intr_alloc (ETS_I2C_EXT0_INTR_SOURCE , flags , & i2c_slave_isr_handler , i2c , & i2c -> intr_handle );
346356#if SOC_HP_I2C_NUM > 1
347357 } else {
348358 ret = esp_intr_alloc (ETS_I2C_EXT1_INTR_SOURCE , flags , & i2c_slave_isr_handler , i2c , & i2c -> intr_handle );
349359#endif
360+ #endif // !defined(CONFIG_IDF_TARGET_ESP32P4)
361+ #ifdef CONFIG_IDF_TARGET_ESP32P4
362+ if (i2c -> num == 0 ) {
363+ ret = esp_intr_alloc (ETS_I2C0_INTR_SOURCE , flags , & i2c_slave_isr_handler , i2c , & i2c -> intr_handle );
364+ #if SOC_I2C_NUM > 1
365+ } else {
366+ ret = esp_intr_alloc (ETS_I2C1_INTR_SOURCE , flags , & i2c_slave_isr_handler , i2c , & i2c -> intr_handle );
367+ #endif
368+ #endif // #ifdef CONFIG_IDF_TARGET_ESP32P4
350369 }
351370
352371 if (ret != ESP_OK ) {
0 commit comments