Skip to content

Commit

Permalink
change(flash): acquire the LDO channel used by flash
Browse files Browse the repository at this point in the history
so that even if the same channel has other consumers, the voltage won't
be changed
  • Loading branch information
suda-morris committed Mar 25, 2024
1 parent cf59c00 commit 5369b68
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
25 changes: 25 additions & 0 deletions components/esp_hw_support/port/esp32p4/Kconfig.ldo
Original file line number Diff line number Diff line change
@@ -1,6 +1,31 @@
menu "LDO Regulator Configurations"
depends on SOC_GP_LDO_SUPPORTED

config ESP_LDO_CHAN_SPI_NOR_FLASH_DOMAIN
int "LDO regulator channel that used to power SPI NOR Flash (READ HELP)"
default 1
range -1 4
help
The internal LDO regulator can be used to power the SPI Flash specific power domain.
This option is to select which LDO channel to connect to that domain.
Please set this option correctly according to your schematic.
Set to -1 if the Flash is using any external power supply.

choice ESP_LDO_VOLTAGE_SPI_NOR_FLASH_DOMAIN
prompt "SPI NOR Flash power domain voltage"
depends on ESP_LDO_CHAN_SPI_NOR_FLASH_DOMAIN != -1
default ESP_LDO_VOLTAGE_SPI_NOR_FLASH_3300_MV
help
Select the voltage used by the Flash power domain.

config ESP_LDO_VOLTAGE_SPI_NOR_FLASH_3300_MV
bool "3.3V"
endchoice

config ESP_LDO_VOLTAGE_SPI_NOR_FLASH_DOMAIN
int
default 3300 if ESP_LDO_VOLTAGE_SPI_NOR_FLASH_3300_MV

config ESP_LDO_CHAN_PSRAM_DOMAIN
int "LDO regulator channel that used to power PSRAM and MPLL (READ HELP)"
default 2
Expand Down
16 changes: 15 additions & 1 deletion components/spi_flash/esp_flash_spi_init.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand All @@ -15,6 +15,7 @@
#include "esp_heap_caps.h"
#include "hal/spi_types.h"
#include "esp_private/spi_share_hw_ctrl.h"
#include "esp_ldo_regulator.h"
#include "hal/spi_flash_hal.h"
#include "hal/gpio_hal.h"
#include "esp_flash_internal.h"
Expand Down Expand Up @@ -420,6 +421,19 @@ esp_err_t esp_flash_init_default_chip(void)
esp_err_t esp_flash_app_init(void)
{
esp_err_t err = ESP_OK;

// Acquire the LDO channel used by the SPI NOR flash
// in case the LDO voltage is changed by other users
#if defined(CONFIG_ESP_LDO_CHAN_SPI_NOR_FLASH_DOMAIN) && CONFIG_ESP_LDO_CHAN_SPI_NOR_FLASH_DOMAIN != -1
static esp_ldo_channel_handle_t s_ldo_chan = NULL;
esp_ldo_channel_config_t ldo_config = {
.chan_id = CONFIG_ESP_LDO_CHAN_SPI_NOR_FLASH_DOMAIN,
.voltage_mv = CONFIG_ESP_LDO_VOLTAGE_SPI_NOR_FLASH_DOMAIN,
};
err = esp_ldo_acquire_channel(&ldo_config, &s_ldo_chan);
if (err != ESP_OK) return err;
#endif

spi_flash_init_lock();
spi_flash_guard_set(&g_flash_guard_default_ops);
#if CONFIG_SPI_FLASH_ENABLE_COUNTERS
Expand Down

0 comments on commit 5369b68

Please sign in to comment.