boards: teensy41: Enable DAT3 pull detection for USDHC

teensy41 has no chip detect signal for SD slot. Use DAT3 pull card
detection. Remove software defined chip detect IOMUXC selection that was
used as a dummy pin.

Fixes #42227

Signed-off-by: Daniel DeGrasse <daniel.degrasse@nxp.com>
This commit is contained in:
Daniel DeGrasse 2022-02-01 19:11:10 -06:00 committed by Carles Cufí
commit 2355fe86da
3 changed files with 32 additions and 4 deletions

View file

@ -21,4 +21,14 @@ endchoice
config DISK_DRIVER_SDMMC
default y if DISK_DRIVERS
if DISK_DRIVER_SDMMC
config SDMMC_USDHC_DAT3_PWR_TOGGLE
default y
config SDMMC_USDHC_DAT3_PWR_DELAY
default 10
endif # DISK_DRIVER_SDMMC
endif # BOARD_TEENSY40 || BOARD_TEENSY41

View file

@ -55,7 +55,6 @@ static void teensy4_usdhc_pinmux(uint16_t nusdhc, bool init, uint32_t speed,
}
if (init) {
IOMUXC_SetPinMux(IOMUXC_GPIO_EMC_35_GPIO3_IO21, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_EMC_41_USDHC1_VSELECT, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_00_USDHC1_CMD, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_01_USDHC1_CLK, 0U);
@ -64,9 +63,6 @@ static void teensy4_usdhc_pinmux(uint16_t nusdhc, bool init, uint32_t speed,
IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_04_USDHC1_DATA2, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_05_USDHC1_DATA3, 0U);
/* SD0_CD_SW */
IOMUXC_SetPinConfig(IOMUXC_GPIO_EMC_35_GPIO3_IO21, 0x017089u);
/* SD0_VSELECT */
IOMUXC_SetPinConfig(IOMUXC_GPIO_EMC_41_USDHC1_VSELECT,
0x0170A1u);
@ -79,6 +75,25 @@ static void teensy4_usdhc_pinmux(uint16_t nusdhc, bool init, uint32_t speed,
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_04_USDHC1_DATA2, cmd_data);
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_05_USDHC1_DATA3, cmd_data);
}
static void teensy4_usdhc_dat3_pull(bool pullup)
{
if (pullup) {
/* Set pin config to pull up (47k Ohm) */
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_05_USDHC1_DATA3,
IOMUXC_SW_PAD_CTL_PAD_SPEED(1) | IOMUXC_SW_PAD_CTL_PAD_SRE_MASK |
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK | IOMUXC_SW_PAD_CTL_PAD_PUE_MASK |
IOMUXC_SW_PAD_CTL_PAD_HYS_MASK | IOMUXC_SW_PAD_CTL_PAD_PUS(1) |
IOMUXC_SW_PAD_CTL_PAD_DSE(1));
} else {
/* pull down (100k Ohm) */
IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_05_USDHC1_DATA3,
IOMUXC_SW_PAD_CTL_PAD_SPEED(1) | IOMUXC_SW_PAD_CTL_PAD_SRE_MASK |
IOMUXC_SW_PAD_CTL_PAD_PKE_MASK | IOMUXC_SW_PAD_CTL_PAD_PUE_MASK |
IOMUXC_SW_PAD_CTL_PAD_HYS_MASK | IOMUXC_SW_PAD_CTL_PAD_PUS(0) |
IOMUXC_SW_PAD_CTL_PAD_DSE(1));
}
}
#endif
static int teensy4_init(const struct device *dev)
@ -393,6 +408,7 @@ static int teensy4_init(const struct device *dev)
#if DT_NODE_HAS_STATUS(DT_NODELABEL(usdhc1), okay) && CONFIG_DISK_DRIVER_SDMMC
teensy4_usdhc_pinmux(0, true, 2, 1);
imxrt_usdhc_pinmux_cb_register(teensy4_usdhc_pinmux);
imxrt_usdhc_dat3_cb_register(teensy4_usdhc_dat3_pull);
#endif
return 0;

View file

@ -27,4 +27,6 @@
&usdhc1 {
status = "okay";
no-1-8-v;
detect-dat3;
};