Commit 88a20edf authored by Vicente Bergas's avatar Vicente Bergas Committed by Heiko Stuebner

arm64: dts: rockchip: Fix microSD in rk3399 sapphire board

The microSD card slot in the Sapphire board is not working because of
several issues:
 1.- The vmmc power supply is missing in the DTS. It is capable of 3.0V
 and has a GPIO-based enable control.
 2.- The vqmmc power supply can provide up to 3.3V, but it is capped in
 the DTS to just 3.0V because of the vmmc capability. This results in a
 conflict from the mmc driver requesting an unsupportable voltage range
 from 3.3V to 3.0V (min > max) as reported in dmesg. So, extend the
 range up to 3.3V. The hw should be able to stand this 0.3V tolerance.
 See mmc_regulator_set_vqmmc in drivers/mmc/core/core.c.
 3.- The card detect signal is non-working. There is a known conflict
 with jtag, but the workaround in drivers/soc/rockchip/grf.c does not
 work. Adding the broken-cd attribute to the DTS fixes the issue.
Signed-off-by: default avatarVicente Bergas <vicencb@gmail.com>
Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
parent 501500e6
...@@ -93,6 +93,19 @@ vcc1v8_s3: vcca1v8_s3: vcc1v8-s3 { ...@@ -93,6 +93,19 @@ vcc1v8_s3: vcca1v8_s3: vcc1v8-s3 {
vin-supply = <&vcc_1v8>; vin-supply = <&vcc_1v8>;
}; };
vcc3v0_sd: vcc3v0-sd {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc0_pwr_h>;
regulator-always-on;
regulator-max-microvolt = <3000000>;
regulator-min-microvolt = <3000000>;
regulator-name = "vcc3v0_sd";
vin-supply = <&vcc3v3_sys>;
};
vcc3v3_sys: vcc3v3-sys { vcc3v3_sys: vcc3v3-sys {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "vcc3v3_sys"; regulator-name = "vcc3v3_sys";
...@@ -320,7 +333,7 @@ vcc_sdio: LDO_REG4 { ...@@ -320,7 +333,7 @@ vcc_sdio: LDO_REG4 {
regulator-always-on; regulator-always-on;
regulator-boot-on; regulator-boot-on;
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3000000>; regulator-max-microvolt = <3300000>;
regulator-state-mem { regulator-state-mem {
regulator-on-in-suspend; regulator-on-in-suspend;
regulator-suspend-microvolt = <3000000>; regulator-suspend-microvolt = <3000000>;
...@@ -474,6 +487,13 @@ vsel2_gpio: vsel2-gpio { ...@@ -474,6 +487,13 @@ vsel2_gpio: vsel2-gpio {
}; };
}; };
sd {
sdmmc0_pwr_h: sdmmc0-pwr-h {
rockchip,pins =
<RK_GPIO0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
usb2 { usb2 {
vcc5v0_host_en: vcc5v0-host-en { vcc5v0_host_en: vcc5v0-host-en {
rockchip,pins = rockchip,pins =
...@@ -508,6 +528,7 @@ &sdhci { ...@@ -508,6 +528,7 @@ &sdhci {
}; };
&sdmmc { &sdmmc {
broken-cd;
bus-width = <4>; bus-width = <4>;
cap-mmc-highspeed; cap-mmc-highspeed;
cap-sd-highspeed; cap-sd-highspeed;
...@@ -516,6 +537,7 @@ &sdmmc { ...@@ -516,6 +537,7 @@ &sdmmc {
max-frequency = <150000000>; max-frequency = <150000000>;
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
vmmc-supply = <&vcc3v0_sd>;
vqmmc-supply = <&vcc_sdio>; vqmmc-supply = <&vcc_sdio>;
status = "okay"; status = "okay";
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment