]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: dts: imx8mn-tqma8mqnl: fix LDO5 power off
authorMarkus Niebel <Markus.Niebel@ew.tq-group.com>
Tue, 16 Dec 2025 13:39:25 +0000 (14:39 +0100)
committerShawn Guo <shawnguo@kernel.org>
Tue, 30 Dec 2025 08:24:04 +0000 (16:24 +0800)
Fix SD card removal caused by automatic LDO5 power off after boot

To prevent this, add vqmmc regulator for USDHC, using a GPIO-controlled
regulator that is supplied by LDO5. Since this is implemented on SoM but
used on baseboards with SD-card interface, implement the functionality
on SoM part and optionally enable it on baseboards if needed.

Signed-off-by: Markus Niebel <Markus.Niebel@ew.tq-group.com>
Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
arch/arm64/boot/dts/freescale/imx8mn-tqma8mqnl-mba8mx.dts
arch/arm64/boot/dts/freescale/imx8mn-tqma8mqnl.dtsi

index d7f7f9aafb7d1b65180fc4f3c29039598c239233..0d009f4be804e860e2b333dd7baa94eb0627fa37 100644 (file)
        samsung,esc-clock-frequency = <20000000>;
 };
 
+&reg_usdhc2_vqmmc {
+       status = "okay";
+};
+
 &sai3 {
        assigned-clocks = <&clk IMX8MN_CLK_SAI3>;
        assigned-clock-parents = <&clk IMX8MN_AUDIO_PLL1_OUT>;
                           <MX8MN_IOMUXC_SD2_DATA0_USDHC2_DATA0         0x1d4>,
                           <MX8MN_IOMUXC_SD2_DATA1_USDHC2_DATA1         0x1d4>,
                           <MX8MN_IOMUXC_SD2_DATA2_USDHC2_DATA2         0x1d4>,
-                          <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3         0x1d4>,
-                          <MX8MN_IOMUXC_GPIO1_IO04_USDHC2_VSELECT      0x84>;
+                          <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3         0x1d4>;
        };
 
        pinctrl_usdhc2_100mhz: usdhc2-100mhzgrp {
                           <MX8MN_IOMUXC_SD2_DATA0_USDHC2_DATA0         0x1d4>,
                           <MX8MN_IOMUXC_SD2_DATA1_USDHC2_DATA1         0x1d4>,
                           <MX8MN_IOMUXC_SD2_DATA2_USDHC2_DATA2         0x1d4>,
-                          <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3         0x1d4>,
-                          <MX8MN_IOMUXC_GPIO1_IO04_USDHC2_VSELECT      0x84>;
+                          <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3         0x1d4>;
        };
 
        pinctrl_usdhc2_200mhz: usdhc2-200mhzgrp {
                           <MX8MN_IOMUXC_SD2_DATA0_USDHC2_DATA0         0x1d4>,
                           <MX8MN_IOMUXC_SD2_DATA1_USDHC2_DATA1         0x1d4>,
                           <MX8MN_IOMUXC_SD2_DATA2_USDHC2_DATA2         0x1d4>,
-                          <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3         0x1d4>,
-                          <MX8MN_IOMUXC_GPIO1_IO04_USDHC2_VSELECT      0x84>;
+                          <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3         0x1d4>;
        };
 
        pinctrl_usdhc2_gpio: usdhc2-gpiogrp {
index ac6ce5d814c508e05cde635bf2c6d688413423b5..31a3ca137e63640a2387d3497274f10a6b8c6766 100644 (file)
                reg = <0x00000000 0x40000000 0 0x40000000>;
        };
 
+       reg_usdhc2_vqmmc: regulator-usdhc2-vqmmc {
+               compatible = "regulator-gpio";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_reg_usdhc2_vqmmc>;
+               regulator-name = "V_SD2";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+               gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
+               states = <1800000 0x1>,
+                        <3300000 0x0>;
+               vin-supply = <&ldo5_reg>;
+               status = "disabled";
+       };
+
        reserved-memory {
                #address-cells = <2>;
                #size-cells = <2>;
        vddio-supply = <&ldo3_reg>;
 };
 
+&usdhc2 {
+       vqmmc-supply = <&reg_usdhc2_vqmmc>;
+};
+
 &usdhc3 {
        pinctrl-names = "default", "state_100mhz", "state_200mhz";
        pinctrl-0 = <&pinctrl_usdhc3>;
                fsl,pins = <MX8MN_IOMUXC_SD2_RESET_B_GPIO2_IO19         0x84>;
        };
 
+       pinctrl_reg_usdhc2_vqmmc: regusdhc2vqmmcgrp {
+               fsl,pins = <MX8MN_IOMUXC_GPIO1_IO04_GPIO1_IO4           0xc0>;
+       };
+
        pinctrl_usdhc3: usdhc3grp {
                fsl,pins = <MX8MN_IOMUXC_NAND_WE_B_USDHC3_CLK           0x1d4>,
                           <MX8MN_IOMUXC_NAND_WP_B_USDHC3_CMD           0x1d2>,