diff --git a/components/spi_flash/esp_flash_spi_init.c b/components/spi_flash/esp_flash_spi_init.c index ad94931a9..9713a24ae 100644 --- a/components/spi_flash/esp_flash_spi_init.c +++ b/components/spi_flash/esp_flash_spi_init.c @@ -73,14 +73,14 @@ __attribute__((unused)) static const char TAG[] = "spi_flash"; esp_flash_t *esp_flash_default_chip = NULL; -static IRAM_ATTR NOINLINE_ATTR void cs_initialize(esp_flash_t *chip, const esp_flash_spi_device_config_t *config, bool use_iomux) +static IRAM_ATTR NOINLINE_ATTR void cs_initialize(esp_flash_t *chip, const esp_flash_spi_device_config_t *config, bool use_iomux, int cs_id) { //Not using spicommon_cs_initialize since we don't want to put the whole //spi_periph_signal into the DRAM. Copy these data from flash before the //cache disabling int cs_io_num = config->cs_io_num; int spics_in = spi_periph_signal[config->host_id].spics_in; - int spics_out = spi_periph_signal[config->host_id].spics_out[config->cs_id]; + int spics_out = spi_periph_signal[config->host_id].spics_out[cs_id]; int spics_func = spi_periph_signal[config->host_id].func; uint32_t iomux_reg = GPIO_PIN_MUX_REG[cs_io_num]; @@ -101,7 +101,7 @@ static IRAM_ATTR NOINLINE_ATTR void cs_initialize(esp_flash_t *chip, const esp_f } GPIO.pin[cs_io_num].pad_driver = 0; gpio_matrix_out(cs_io_num, spics_out, false, false); - if (config->cs_id == 0) { + if (cs_id == 0) { gpio_matrix_in(cs_io_num, spics_in, false); } PIN_FUNC_SELECT(iomux_reg, PIN_FUNC_GPIO); @@ -167,7 +167,8 @@ esp_err_t spi_bus_add_flash_device(esp_flash_t **out_chip, const esp_flash_spi_d goto fail; } - cs_initialize(chip, config, use_iomux); + // The cs_id inside `config` is deprecated, use the `dev_id` provided by the bus lock instead. + cs_initialize(chip, config, use_iomux, dev_id); *out_chip = chip; return ret; fail: @@ -210,7 +211,7 @@ esp_err_t esp_flash_init_default_chip(void) { memspi_host_config_t cfg = ESP_FLASH_HOST_CONFIG_DEFAULT(); - #ifdef CONFIG_IDF_TARGET_ESP32S2 + #ifdef CONFIG_IDF_TARGET_ESP32S2 // For esp32s2 spi IOs are configured as from IO MUX by default cfg.iomux = ets_efuse_get_spiconfig() == 0 ? true : false; #endif diff --git a/components/spi_flash/include/esp_flash_spi_init.h b/components/spi_flash/include/esp_flash_spi_init.h index 0e0e72d83..f3ac315ee 100644 --- a/components/spi_flash/include/esp_flash_spi_init.h +++ b/components/spi_flash/include/esp_flash_spi_init.h @@ -24,11 +24,12 @@ extern "C" { /// Configurations for the SPI Flash to init typedef struct { spi_host_device_t host_id; ///< Bus to use - int cs_id; ///< CS pin (signal) to use int cs_io_num; ///< GPIO pin to output the CS signal - esp_flash_io_mode_t io_mode; ///< IO mode to read from the Flash + esp_flash_io_mode_t io_mode; ///< IO mode to read from the Flash esp_flash_speed_t speed; ///< Speed of the Flash clock int input_delay_ns; ///< Input delay of the data pins, in ns. Set to 0 if unknown. + + int cs_id; ///< @deprecated CS pin (signal) to use } esp_flash_spi_device_config_t; /**