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