Merge branch 'refactor/rtcio_interface_update' into 'master'

refactor(lp_io): switch LP I2C/LP I2S to lp_gpio_matrix_input/output APIs

See merge request espressif/esp-idf!48118
This commit is contained in:
Chen Chen
2026-05-15 09:46:23 +08:00
3 changed files with 19 additions and 29 deletions
+8 -8
View File
@@ -381,10 +381,10 @@ static esp_err_t s_lp_i2c_pins_config(i2c_bus_handle_t handle)
rtc_gpio_pullup_dis(handle->sda_num);
}
#if !SOC_LP_GPIO_MATRIX_SUPPORTED
rtc_gpio_iomux_func_sel(handle->sda_num, i2c_periph_signal[port_id].iomux_func);
rtc_gpio_iomux_input(handle->sda_num, i2c_periph_signal[port_id].iomux_func, i2c_periph_signal[port_id].sda_in_sig);
#else
lp_gpio_connect_out_signal(handle->sda_num, i2c_periph_signal[port_id].sda_out_sig, 0, 0);
lp_gpio_connect_in_signal(handle->sda_num, i2c_periph_signal[port_id].sda_in_sig, 0);
lp_gpio_matrix_output(handle->sda_num, i2c_periph_signal[port_id].sda_out_sig, 0, 0);
lp_gpio_matrix_input(handle->sda_num, i2c_periph_signal[port_id].sda_in_sig, 0);
#endif
rtc_gpio_init(handle->scl_num);
@@ -396,10 +396,10 @@ static esp_err_t s_lp_i2c_pins_config(i2c_bus_handle_t handle)
rtc_gpio_pullup_dis(handle->scl_num);
}
#if !SOC_LP_GPIO_MATRIX_SUPPORTED
rtc_gpio_iomux_func_sel(handle->scl_num, i2c_periph_signal[port_id].iomux_func);
rtc_gpio_iomux_input(handle->scl_num, i2c_periph_signal[port_id].iomux_func, i2c_periph_signal[port_id].scl_in_sig);
#else
lp_gpio_connect_out_signal(handle->scl_num, i2c_periph_signal[port_id].scl_out_sig, 0, 0);
lp_gpio_connect_in_signal(handle->scl_num, i2c_periph_signal[port_id].scl_in_sig, 0);
lp_gpio_matrix_output(handle->scl_num, i2c_periph_signal[port_id].scl_out_sig, 0, 0);
lp_gpio_matrix_input(handle->scl_num, i2c_periph_signal[port_id].scl_in_sig, 0);
#endif
return ESP_OK;
@@ -444,8 +444,8 @@ esp_err_t i2c_common_deinit_pins(i2c_bus_handle_t handle)
ESP_RETURN_ON_ERROR(rtc_gpio_deinit(handle->sda_num), TAG, "deinit rtc gpio failed");
ESP_RETURN_ON_ERROR(rtc_gpio_deinit(handle->scl_num), TAG, "deinit rtc gpio failed");
#if SOC_LP_GPIO_MATRIX_SUPPORTED
ESP_RETURN_ON_ERROR(lp_gpio_connect_in_signal(LP_GPIO_MATRIX_CONST_ZERO_INPUT, i2c_periph_signal[port_id].scl_in_sig, 0), TAG, "failed to connect lp gpio to zero");
ESP_RETURN_ON_ERROR(lp_gpio_connect_in_signal(LP_GPIO_MATRIX_CONST_ZERO_INPUT, i2c_periph_signal[port_id].sda_in_sig, 0), TAG, "failed to connect lp gpio to zero");
ESP_RETURN_ON_ERROR(lp_gpio_matrix_input(LP_GPIO_MATRIX_CONST_ZERO_INPUT, i2c_periph_signal[port_id].scl_in_sig, 0), TAG, "failed to connect lp gpio to zero");
ESP_RETURN_ON_ERROR(lp_gpio_matrix_input(LP_GPIO_MATRIX_CONST_ZERO_INPUT, i2c_periph_signal[port_id].sda_in_sig, 0), TAG, "failed to connect lp gpio to zero");
#endif
}
#endif
+5 -9
View File
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -91,22 +91,18 @@ esp_err_t lp_i2s_channel_init_pdm_rx_mode(lp_i2s_chan_handle_t handle, const lp_
static esp_err_t s_io_init(lp_i2s_chan_handle_t chan, const lp_i2s_pdm_rx_gpio_config_t *config)
{
if (config->clk >= 0) {
rtc_gpio_set_direction(config->clk, RTC_GPIO_MODE_INPUT_ONLY);
rtc_gpio_init(config->clk);
rtc_gpio_iomux_func_sel(config->clk, 0);
ESP_RETURN_ON_ERROR(rtc_gpio_init(config->clk), TAG, "failed to init clk io");
if (chan->role == I2S_ROLE_MASTER) {
lp_gpio_connect_in_signal(config->clk, lp_i2s_periph_signal[chan->ctlr->id].m_rx_ws_sig, 0);
lp_gpio_matrix_input(config->clk, lp_i2s_periph_signal[chan->ctlr->id].m_rx_ws_sig, 0);
} else {
lp_gpio_connect_in_signal(config->clk, lp_i2s_periph_signal[chan->ctlr->id].s_rx_ws_sig, 0);
lp_gpio_matrix_input(config->clk, lp_i2s_periph_signal[chan->ctlr->id].s_rx_ws_sig, 0);
}
ESP_LOGD(TAG, "clk io: %d, role: %d, signal: %"PRId8, config->clk, chan->role, chan->role ? lp_i2s_periph_signal[chan->ctlr->id].s_rx_ws_sig : lp_i2s_periph_signal[chan->ctlr->id].m_rx_ws_sig);
}
if (config->din >= 0) {
rtc_gpio_set_direction(config->din, RTC_GPIO_MODE_INPUT_ONLY);
rtc_gpio_init(config->din);
rtc_gpio_iomux_func_sel(config->din, 0);
lp_gpio_connect_in_signal(config->din, lp_i2s_periph_signal[chan->ctlr->id].data_in_sigs[0], 0);
lp_gpio_matrix_input(config->din, lp_i2s_periph_signal[chan->ctlr->id].data_in_sigs[0], 0);
ESP_LOGD(TAG, "din io: %d, signal: %"PRId8, config->din, lp_i2s_periph_signal[chan->ctlr->id].data_in_sigs[0]);
}
+6 -12
View File
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -67,34 +67,28 @@ esp_err_t lp_i2s_channel_init_std_mode(lp_i2s_chan_handle_t handle, const lp_i2s
static esp_err_t s_io_init(lp_i2s_chan_handle_t chan, const lp_i2s_std_gpio_config_t *config)
{
if (config->bck >= 0) {
rtc_gpio_set_direction(config->bck, RTC_GPIO_MODE_INPUT_ONLY);
rtc_gpio_init(config->bck);
rtc_gpio_iomux_func_sel(config->bck, 0);
if (chan->role == I2S_ROLE_MASTER) {
lp_gpio_connect_in_signal(config->bck, lp_i2s_periph_signal[chan->ctlr->id].m_rx_bck_sig, 0);
lp_gpio_matrix_input(config->bck, lp_i2s_periph_signal[chan->ctlr->id].m_rx_bck_sig, 0);
} else {
lp_gpio_connect_in_signal(config->bck, lp_i2s_periph_signal[chan->ctlr->id].s_rx_bck_sig, 0);
lp_gpio_matrix_input(config->bck, lp_i2s_periph_signal[chan->ctlr->id].s_rx_bck_sig, 0);
}
ESP_LOGD(TAG, "bck io: %d, role: %d, signal: %"PRId8, config->bck, chan->role, chan->role ? lp_i2s_periph_signal[chan->ctlr->id].s_rx_bck_sig : lp_i2s_periph_signal[chan->ctlr->id].m_rx_bck_sig);
}
if (config->ws >= 0) {
rtc_gpio_set_direction(config->ws, RTC_GPIO_MODE_INPUT_ONLY);
rtc_gpio_init(config->ws);
rtc_gpio_iomux_func_sel(config->ws, 0);
if (chan->role == I2S_ROLE_MASTER) {
lp_gpio_connect_in_signal(config->ws, lp_i2s_periph_signal[chan->ctlr->id].m_rx_ws_sig, 0);
lp_gpio_matrix_input(config->ws, lp_i2s_periph_signal[chan->ctlr->id].m_rx_ws_sig, 0);
} else {
lp_gpio_connect_in_signal(config->ws, lp_i2s_periph_signal[chan->ctlr->id].s_rx_ws_sig, 0);
lp_gpio_matrix_input(config->ws, lp_i2s_periph_signal[chan->ctlr->id].s_rx_ws_sig, 0);
}
ESP_LOGD(TAG, "ws io: %d, role: %d, signal: %"PRId8, config->ws, chan->role, chan->role ? lp_i2s_periph_signal[chan->ctlr->id].s_rx_ws_sig : lp_i2s_periph_signal[chan->ctlr->id].m_rx_ws_sig);
}
if (config->din >= 0) {
rtc_gpio_set_direction(config->din, RTC_GPIO_MODE_INPUT_ONLY);
rtc_gpio_init(config->din);
rtc_gpio_iomux_func_sel(config->din, 0);
lp_gpio_connect_in_signal(config->din, lp_i2s_periph_signal[chan->ctlr->id].data_in_sigs[0], 0);
lp_gpio_matrix_input(config->din, lp_i2s_periph_signal[chan->ctlr->id].data_in_sigs[0], 0);
ESP_LOGD(TAG, "din io: %d, signal: %"PRId8, config->din, lp_i2s_periph_signal[chan->ctlr->id].data_in_sigs[0]);
}