From e147ac51c083d254ab25f572e6c17b9afe823044 Mon Sep 17 00:00:00 2001 From: Chen Chen Date: Thu, 30 Apr 2026 10:39:43 +0800 Subject: [PATCH] refactor(lp_io): switch LP I2C/LP I2S to lp_gpio_matrix_input/output APIs --- components/esp_driver_i2c/i2c_common.c | 16 ++++++++-------- components/esp_driver_i2s/lp_i2s_pdm.c | 14 +++++--------- components/esp_driver_i2s/lp_i2s_std.c | 18 ++++++------------ 3 files changed, 19 insertions(+), 29 deletions(-) diff --git a/components/esp_driver_i2c/i2c_common.c b/components/esp_driver_i2c/i2c_common.c index cc09324bff3..b80aa0d97ea 100644 --- a/components/esp_driver_i2c/i2c_common.c +++ b/components/esp_driver_i2c/i2c_common.c @@ -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 diff --git a/components/esp_driver_i2s/lp_i2s_pdm.c b/components/esp_driver_i2s/lp_i2s_pdm.c index 315035fccec..b66c5c623af 100644 --- a/components/esp_driver_i2s/lp_i2s_pdm.c +++ b/components/esp_driver_i2s/lp_i2s_pdm.c @@ -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]); } diff --git a/components/esp_driver_i2s/lp_i2s_std.c b/components/esp_driver_i2s/lp_i2s_std.c index f4065004311..26d34c0c6a8 100644 --- a/components/esp_driver_i2s/lp_i2s_std.c +++ b/components/esp_driver_i2s/lp_i2s_std.c @@ -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]); }