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 <jo...@kwiboo.se>
Link: https://lore.kernel.org/r/20241119230838.4137130-1-jo...@kwiboo.se
Signed-off-by: Heiko Stuebner <he...@sntech.de>

[ upstream commit: 26c100232b09ced0857306ac9831a4fa9c9aa231 ]

(cherry picked from commit ca8e0bedbc790b19b11efc223677d178b8eeb74e)
Signed-off-by: Jonas Karlman <jo...@kwiboo.se>
---
v3: New patch, pick device tree changes from v6.14-rc1-dts
---
 .../src/arm64/rockchip/rk3308-rock-s0.dts     | 25 ++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/dts/upstream/src/arm64/rockchip/rk3308-rock-s0.dts 
b/dts/upstream/src/arm64/rockchip/rk3308-rock-s0.dts
index bd6419a5c20a..8311af4c8689 100644
--- a/dts/upstream/src/arm64/rockchip/rk3308-rock-s0.dts
+++ b/dts/upstream/src/arm64/rockchip/rk3308-rock-s0.dts
@@ -74,6 +74,23 @@
                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";
@@ -181,6 +198,12 @@
                };
        };
 
+       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>;
@@ -233,7 +256,7 @@
        cap-mmc-highspeed;
        cap-sd-highspeed;
        disable-wp;
-       vmmc-supply = <&vcc_io>;
+       vmmc-supply = <&vcc_sd>;
        status = "okay";
 };
 
-- 
2.48.1

Reply via email to