mirror of
https://github.com/espressif/esp-idf
synced 2025-03-10 01:29:21 -04:00
Merge branch 'bugfix/sdmmc_reset_pins_slot_width' into 'master'
fix(sdmmc): fix reset of pins above slot width Closes IDFGH-14570 See merge request espressif/esp-idf!36725
This commit is contained in:
commit
de053738e1
@ -851,16 +851,30 @@ static int sdmmc_host_decrease_init_slot_num(void)
|
|||||||
#endif
|
#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)
|
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;
|
sdmmc_slot_io_info_t* gpio = &s_host_ctx.slot_ctx[slot].slot_gpio_num;
|
||||||
// Disconnect signals and reset used GPIO pins
|
// Disconnect signals and reset used GPIO pins
|
||||||
for (size_t i = 0; i < (sizeof(gpio->val) / (sizeof(gpio->val[0]))); i++) {
|
reset_pin_if_valid(gpio->clk);
|
||||||
gpio_pin_num = gpio->val[i];
|
reset_pin_if_valid(gpio->cmd);
|
||||||
if (gpio_pin_num != GPIO_NUM_NC && GPIO_IS_VALID_GPIO(gpio_pin_num)) {
|
reset_pin_if_valid(gpio->d0);
|
||||||
gpio_reset_pin(gpio_pin_num);
|
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
|
// Reset the slot context
|
||||||
memset(&(s_host_ctx.slot_ctx[slot]), 0, sizeof(slot_ctx_t));
|
memset(&(s_host_ctx.slot_ctx[slot]), 0, sizeof(slot_ctx_t));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user