]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: dts: rockchip: Fix sdmmc access on rk3308-rock-s0 v1.1 boards
authorJonas Karlman <jonas@kwiboo.se>
Tue, 19 Nov 2024 23:08:36 +0000 (23:08 +0000)
committerHeiko Stuebner <heiko@sntech.de>
Fri, 3 Jan 2025 14:24:20 +0000 (15:24 +0100)
BootROM leave GPIO4_D6 configured as SDMMC_PWREN function and DW MCI
driver set PRWEN high on MMC_POWER_UP and low on MMC_POWER_OFF.
Similarly U-Boot also set PRWEN high before accessing mmc.

However, HW revision prior to v1.2 must pull GPIO4_D6 low to access
sdmmc. For HW revision v1.2 the state of GPIO4_D6 has no impact.

Model an always-on active low fixed regulator using GPIO4_D6 to fix
use of sdmmc on older HW revisions of the board.

Fixes: adeb5d2a4ba4 ("arm64: dts: rockchip: Add Radxa ROCK S0")
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Link: https://lore.kernel.org/r/20241119230838.4137130-1-jonas@kwiboo.se
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
arch/arm64/boot/dts/rockchip/rk3308-rock-s0.dts

index bd6419a5c20a2293bb887a7cc637b179f27df8d5..8311af4c8689f6ccde2716987d83b9b131cf6684 100644 (file)
                vin-supply = <&vcc5v0_sys>;
        };
 
+       /*
+        * HW revision prior to v1.2 must pull GPIO4_D6 low to access sdmmc.
+        * This is modeled as an always-on active low fixed regulator.
+        */
+       vcc_sd: regulator-3v3-vcc-sd {
+               compatible = "regulator-fixed";
+               gpios = <&gpio4 RK_PD6 GPIO_ACTIVE_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&sdmmc_2030>;
+               regulator-name = "vcc_sd";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&vcc_io>;
+       };
+
        vcc5v0_sys: regulator-5v0-vcc-sys {
                compatible = "regulator-fixed";
                regulator-name = "vcc5v0_sys";
                };
        };
 
+       sdmmc {
+               sdmmc_2030: sdmmc-2030 {
+                       rockchip,pins = <4 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
        wifi {
                wifi_reg_on: wifi-reg-on {
                        rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
        cap-mmc-highspeed;
        cap-sd-highspeed;
        disable-wp;
-       vmmc-supply = <&vcc_io>;
+       vmmc-supply = <&vcc_sd>;
        status = "okay";
 };