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
4949static const char * TAG = "SDCARD" ;
5050static int g_gpio = -1 ;
5151static 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+
6579esp_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