Skip to content

Commit

Permalink
Merge branch 'bugfix/sdmmc_reset_pins_slot_width_v5.4' into 'release/…
Browse files Browse the repository at this point in the history
…v5.4'

fix(sdmmc): fix reset of pins above slot width (v5.4)

See merge request espressif/esp-idf!36874
  • Loading branch information
suda-morris committed Feb 18, 2025
2 parents c93d7d0 + 8ad144a commit bcb3c32
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions components/esp_driver_sdmmc/src/sdmmc_host.c
Original file line number Diff line number Diff line change
Expand Up @@ -849,16 +849,32 @@ static int sdmmc_host_decrease_init_slot_num(void)
#endif
}

static void reset_pin_if_valid(gpio_num_t gpio_num)
{
if (gpio_num != GPIO_NUM_NC && GPIO_IS_VALID_GPIO(gpio_num)) {
gpio_reset_pin(gpio_num);
}
}

static void sdmmc_host_deinit_slot_internal(int slot)
{
int8_t gpio_pin_num;
sdmmc_slot_io_info_t* gpio = &s_host_ctx.slot_ctx[slot].slot_gpio_num;
// Disconnect signals and reset used GPIO pins
for (size_t i = 0; i < (sizeof(gpio->val) / (sizeof(gpio->val[0]))); i++) {
gpio_pin_num = gpio->val[i];
if (gpio_pin_num != GPIO_NUM_NC && GPIO_IS_VALID_GPIO(gpio_pin_num)) {
gpio_reset_pin(gpio_pin_num);
}
reset_pin_if_valid(gpio->cd);
reset_pin_if_valid(gpio->wp);
reset_pin_if_valid(gpio->clk);
reset_pin_if_valid(gpio->cmd);
reset_pin_if_valid(gpio->d0);
if (s_host_ctx.slot_ctx[slot].slot_width >= 4) {
reset_pin_if_valid(gpio->d1);
reset_pin_if_valid(gpio->d2);
reset_pin_if_valid(gpio->d3);
}
if (s_host_ctx.slot_ctx[slot].slot_width == 8) {
reset_pin_if_valid(gpio->d4);
reset_pin_if_valid(gpio->d5);
reset_pin_if_valid(gpio->d6);
reset_pin_if_valid(gpio->d7);
}
// Reset the slot context
memset(&(s_host_ctx.slot_ctx[slot]), 0, sizeof(slot_ctx_t));
Expand Down

0 comments on commit bcb3c32

Please sign in to comment.