Skip to content

Commit 8b61b32

Browse files
committed
Merge branch 'bugfix/fix_p4_sdcard_canot_mount' into 'master'
bugfix(esp_peripheral): Fix P4 mount sdcard failed See merge request adf/esp-adf-internal!1437
2 parents bb35be3 + 77f413d commit 8b61b32

File tree

1 file changed

+20
-23
lines changed
  • components/esp_peripherals/lib/sdcard

1 file changed

+20
-23
lines changed

components/esp_peripherals/lib/sdcard/sdcard.c

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@
3838
#include "driver/sdmmc_defs.h"
3939
#include "driver/gpio.h"
4040

41-
#if SOC_SDMMC_IO_POWER_EXTERNAL
42-
#include "sd_pwr_ctrl_by_on_chip_ldo.h"
43-
#endif
44-
4541
#include "sdcard.h"
4642
#include "board.h"
4743
#include "esp_idf_version.h"
48-
44+
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 3, 0)
45+
#if CONFIG_IDF_TARGET_ESP32P4
46+
#include "esp_ldo_regulator.h"
47+
#endif
48+
#endif
4949
static const char *TAG = "SDCARD";
5050
static int g_gpio = -1;
5151
static sdmmc_card_t *card = NULL;
@@ -62,6 +62,20 @@ static void sdmmc_card_print_info(const sdmmc_card_t *card)
6262
ESP_LOGD(TAG, "SCR: sd_spec=%d, bus_width=%d\n", card->scr.sd_spec, card->scr.bus_width);
6363
}
6464

65+
static void enable_mmc_phy_power(void)
66+
{
67+
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 3, 0)
68+
#if CONFIG_IDF_TARGET_ESP32P4
69+
esp_ldo_channel_config_t ldo_cfg = {
70+
.chan_id = 4,
71+
.voltage_mv = 3300,
72+
};
73+
esp_ldo_channel_handle_t ldo_phy_chan;
74+
esp_ldo_acquire_channel(&ldo_cfg, &ldo_phy_chan);
75+
#endif
76+
#endif
77+
}
78+
6579
esp_err_t sdcard_mount(const char *base_path, periph_sdcard_mode_t mode)
6680
{
6781
if (mode >= SD_MODE_MAX) {
@@ -76,18 +90,7 @@ esp_err_t sdcard_mount(const char *base_path, periph_sdcard_mode_t mode)
7690
.allocation_unit_size = 64 * 1024,
7791
};
7892

79-
#if defined SD_PWR_CTRL_LDO_INTERNAL_IO
80-
sd_pwr_ctrl_ldo_config_t ldo_config = {
81-
.ldo_chan_id = SD_PWR_CTRL_LDO_INTERNAL_IO,
82-
};
83-
sd_pwr_ctrl_handle_t pwr_ctrl_handle = NULL;
84-
85-
ret = sd_pwr_ctrl_new_on_chip_ldo(&ldo_config, &pwr_ctrl_handle);
86-
if (ret != ESP_OK) {
87-
ESP_LOGE(TAG, "Failed to create a new on-chip LDO power control driver");
88-
return ESP_FAIL;
89-
}
90-
#endif // SD_PWR_CTRL_LDO_INTERNAL_IO
93+
enable_mmc_phy_power();
9194

9295
if (mode != SD_MODE_SPI) {
9396
#if SOC_SDMMC_HOST_SUPPORTED
@@ -99,9 +102,6 @@ esp_err_t sdcard_mount(const char *base_path, periph_sdcard_mode_t mode)
99102
#if defined CONFIG_IDF_TARGET_ESP32P4
100103
host.slot = SDMMC_HOST_SLOT_0;
101104
#endif // CONFIG_IDF_TARGET_ESP32P4
102-
#if defined SD_PWR_CTRL_LDO_INTERNAL_IO
103-
host.pwr_ctrl_handle = pwr_ctrl_handle;
104-
#endif
105105
sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT();
106106
// slot_config.gpio_cd = g_gpio;
107107
slot_config.width = mode;
@@ -129,9 +129,6 @@ esp_err_t sdcard_mount(const char *base_path, periph_sdcard_mode_t mode)
129129
} else {
130130
ESP_LOGI(TAG, "Using SPI mode, base path=%s", base_path);
131131
sdmmc_host_t host = SDSPI_HOST_DEFAULT();
132-
#if defined SD_PWR_CTRL_LDO_INTERNAL_IO
133-
host.pwr_ctrl_handle = pwr_ctrl_handle;
134-
#endif
135132
spi_bus_config_t bus_cfg = {
136133
.mosi_io_num = ESP_SD_PIN_CMD,
137134
.miso_io_num = ESP_SD_PIN_D0,

0 commit comments

Comments
 (0)