Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 551345e7 authored by Vicente Bergas's avatar Vicente Bergas Committed by Greg Kroah-Hartman
Browse files

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



[ Upstream commit 88a20edf76091ee7f1bb459b89d714d53f0f8940 ]

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>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 27afaf32
Loading
Loading
Loading
Loading
+23 −1
Original line number Diff line number Diff line
@@ -113,6 +113,19 @@
		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 {
		compatible = "regulator-fixed";
		regulator-name = "vcc3v3_sys";
@@ -315,7 +328,7 @@
				regulator-always-on;
				regulator-boot-on;
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3000000>;
				regulator-max-microvolt = <3300000>;
				regulator-state-mem {
					regulator-on-in-suspend;
					regulator-suspend-microvolt = <3000000>;
@@ -490,6 +503,13 @@
		};
	};

	sd {
		sdmmc0_pwr_h: sdmmc0-pwr-h {
			rockchip,pins =
				<RK_GPIO0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	usb2 {
		vcc5v0_host_en: vcc5v0-host-en {
			rockchip,pins =
@@ -537,6 +557,7 @@
};

&sdmmc {
	broken-cd;
	bus-width = <4>;
	cap-mmc-highspeed;
	cap-sd-highspeed;
@@ -545,6 +566,7 @@
	max-frequency = <150000000>;
	pinctrl-names = "default";
	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
	vmmc-supply = <&vcc3v0_sd>;
	vqmmc-supply = <&vcc_sdio>;
	status = "okay";
};