修改tf卡为高电平位有效检测
tf卡的电平检测,是根据卡座来的,大部分卡座会是低电平为检测到有卡,但也有个别卡座是高电平才能检测到。
1.正常低电平检测:
dts配置如下:
&sdmmc { max-frequency = <150000000>; no-sdio; no-mmc; bus-width = <4>; cap-mmc-highspeed; cap-sd-highspeed; disable-wp; sd-uhs-sdr104; vmmc-supply = <&vcc_3v3_sd_s0>; vqmmc-supply = <&vccio_sd_s0>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd &sdmmc_det>; status = "okay"; };
这个是默认配置,什么都不需要修改。
2.高电平检测卡:
dts配置如下:
&sdmmc { max-frequency = <150000000>; no-sdio; no-mmc; bus-width = <4>; cap-mmc-highspeed; cap-sd-highspeed; disable-wp; sd-uhs-sdr104; vmmc-supply = <&vcc_3v3_sd_s0>; vqmmc-supply = <&vccio_sd_s0>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd>;// &sdmmc_det cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>; status = "okay"; };
ai解释如下:

对应解析的驱动为:drivers\mmc\core\host.c

sdmmc 和 jtag 功能复用,通过 sdmmc 检测脚来区分,拉低则复用为 sdmmc 功能,硬件上不拉低,软件上就直接禁用 jtag。还需要修改:
--- a/kernel-6.1/drivers/soc/rockchip/grf.c +++ b/kernel-6.1/drivers/soc/rockchip/grf.c @@ -243,9 +243,11 @@ static const struct rockchip_grf_info rk3566_pipegrf __initconst = { }; #define RK3588_SYS_GRF_SOC_CON7 0x031c +#define RK3588_SYS_GRF_SOC_CON6 0x0318 static const struct rockchip_grf_value rk3588_sys_grf_defaults[] __initconst = { { "Connect EDP hpd to IO", RK3588_SYS_GRF_SOC_CON7, HIWORD_UPDATE(0x3, 0x3, 14) }, + { "jtag switching", RK3588_SYS_GRF_SOC_CON6, HIWORD_UPDATE(0, 0x1, 14) }, }

浙公网安备 33010602011771号