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 
313321else  {
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 
347357else  {
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