Merge branch 'fix/sdmmc_reinit_error_v6.0' into 'release/v6.0'

fix(sdmmc): fix sdmmc re-init error (v6.0)

See merge request espressif/esp-idf!49010
This commit is contained in:
Jiang Jiang Jian
2026-06-29 15:33:05 +08:00
2 changed files with 10 additions and 2 deletions

View File

@@ -66,7 +66,7 @@ typedef struct {
* @return
* - ESP_OK: On success
* - ESP_ERR_NO_MEM: Out of memory
* - ESP_ERR_NOT_FOUND: Controller not found
* - ESP_ERR_NOT_FOUND: No free controller
* - ESP_ERR_INVALID_ARG: Invalid argument
*/
esp_err_t sd_host_create_sdmmc_controller(const sd_host_sdmmc_cfg_t *config, sd_host_ctlr_handle_t *ret_handle);

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -77,6 +77,11 @@ esp_err_t sdmmc_host_set_input_delayline(int slot, sdmmc_delay_line_t delay_line
esp_err_t sdmmc_host_init(void)
{
if (s_ctlr) {
ESP_LOGI(TAG, "SDMMC host controller already created, returning existing handle");
return ESP_OK;
}
sd_host_sdmmc_cfg_t cfg = {
.event_queue_items = SDMMC_EVENT_QUEUE_LENGTH,
};
@@ -158,6 +163,8 @@ esp_err_t sdmmc_host_deinit_slot(int slot)
//for backward compatibility, return ESP_OK when only slot is removed and host is still there
if (ret == ESP_ERR_INVALID_STATE) {
ret = ESP_OK;
} else if (ret == ESP_OK) {
s_ctlr = NULL;
}
return ret;
@@ -176,6 +183,7 @@ esp_err_t sdmmc_host_deinit(void)
}
}
ESP_RETURN_ON_ERROR(sd_host_del_controller(s_ctlr), TAG, "failed to delete controller");
s_ctlr = NULL;
return ESP_OK;
}