diff --git a/arch/xtensa/src/common/espressif/esp_i2c_slave.c b/arch/xtensa/src/common/espressif/esp_i2c_slave.c index 7c44369742..ad05d6aa92 100644 --- a/arch/xtensa/src/common/espressif/esp_i2c_slave.c +++ b/arch/xtensa/src/common/espressif/esp_i2c_slave.c @@ -139,6 +139,12 @@ #define I2C_SLAVE_POLL_RATE 10 #endif +#if !SOC_RCC_IS_INDEPENDENT +# define I2C_RCC_ATOMIC() PERIPH_RCC_ATOMIC() +#else +# define I2C_RCC_ATOMIC() +#endif + /**************************************************************************** * Private Types ****************************************************************************/ @@ -599,7 +605,11 @@ static void esp_i2c_slave_init(struct esp_i2c_priv_s *priv) /* Enable I2C hardware */ - periph_module_enable(i2c_periph_signal[priv->id].module); + I2C_RCC_ATOMIC() + { + i2c_ll_enable_bus_clock(priv->id, true); + i2c_ll_reset_register(priv->id); + } i2c_hal_init(priv->ctx, priv->id); @@ -610,7 +620,7 @@ static void esp_i2c_slave_init(struct esp_i2c_priv_s *priv) /* Initialize I2C Slave */ i2c_hal_slave_init(priv->ctx); - i2c_ll_slave_tx_auto_start_en(priv->ctx->dev, true); + i2c_ll_slave_enable_auto_start(priv->ctx->dev, true); i2c_ll_set_source_clk(priv->ctx->dev, I2C_CLK_SRC_DEFAULT); i2c_ll_set_slave_addr(priv->ctx->dev, priv->addr, false); i2c_ll_set_rxfifo_full_thr(priv->ctx->dev, I2C_FIFO_FULL_THRESH_VAL); @@ -642,7 +652,10 @@ static void esp_i2c_slave_deinit(struct esp_i2c_priv_s *priv) const struct esp_i2c_config_s *config = priv->config; i2c_hal_deinit(priv->ctx); - periph_module_disable(i2c_periph_signal[priv->id].module); + I2C_RCC_ATOMIC() + { + i2c_ll_enable_bus_clock(priv->id, false); + } } /****************************************************************************