arm64: dts: qcom: msm8916/39: Fix SD card detect pinctrl
authorStephan Gerhold <stephan@gerhold.net>
Tue, 30 May 2023 07:15:22 +0000 (09:15 +0200)
committerBjorn Andersson <andersson@kernel.org>
Tue, 13 Jun 2023 23:27:46 +0000 (16:27 -0700)
The current SD card detect pinctrl setup configures bias-pull-up for
the "default" (active) case and bias-disable for the "sleep" case.
Before commit b5c833b703cc ("mmc: sdhci-msm: Set IO pins in low power
state during suspend") the pull up was permanently active. Since then
it is only active when a valid SD card is inserted.

This does not really make sense: For an active-low CD, the pull up is
needed to pull the GPIO high when the card is not inserted. When the
card gets inserted CD is shorted to ground (low). This means right now
the pull-up is removed exactly when it is needed to detect the next
card insertion. Generally, applying different bias for CD does not
really make sense. It should always stay the same so card removals and
insertions can be detected properly.

The reason why card detection still works fine in practice is that most
boards seem to have external pull up on the CD pin. However, this means
that there is no need to configure an internal pull-up at all and we
can keep bias-disable permanently.

There are also some boards with different CD polarity (acer-a1-724) and
with different GPIO number (huawei-g7). All in all this makes it
obvious that the CD pin is board-specific and the pinctrl for it should
be defined in the board DT.

Move it to the boards that need it and use bias-disable permanently for
the boards that seem to have external pull-up. The vendor device tree
for msm8939-sony-xperia-kanuti-tulip suggests that it needs the
internal pull-up permanently [1] so it gets bias-pull-up to be sure.

[1]: https://github.com/sonyxperiadev/kernel/blob/57b5050e340f40a88e1ddb8d16fd9adb44418923/arch/arm/boot/dts/qcom/msm8939-kanuti_tulip.dtsi#L634-L636

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230529-msm8916-pinctrl-v1-1-11f540b51c93@gerhold.net
13 files changed:
arch/arm64/boot/dts/qcom/apq8016-sbc.dts
arch/arm64/boot/dts/qcom/msm8916-acer-a1-724.dts
arch/arm64/boot/dts/qcom/msm8916-alcatel-idol347.dts
arch/arm64/boot/dts/qcom/msm8916-asus-z00l.dts
arch/arm64/boot/dts/qcom/msm8916-gplus-fl8005a.dts
arch/arm64/boot/dts/qcom/msm8916-huawei-g7.dts
arch/arm64/boot/dts/qcom/msm8916-longcheer-l8910.dts
arch/arm64/boot/dts/qcom/msm8916-pins.dtsi
arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
arch/arm64/boot/dts/qcom/msm8916-samsung-gt5-common.dtsi
arch/arm64/boot/dts/qcom/msm8916-samsung-j5-common.dtsi
arch/arm64/boot/dts/qcom/msm8939-sony-xperia-kanuti-tulip.dts
arch/arm64/boot/dts/qcom/msm8939.dtsi

index 56dfca61253e6254732ddabd557efd003baf95aa..b8537fe576a8b5ca2ceb2cf3dffd21dfb1f4ee7c 100644 (file)
        status = "okay";
 
        pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
-       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
+       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_default>;
 
        cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
 };
                "USR_LED_2_CTRL", /* GPIO 120 */
                "SB_HS_ID";
 
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
        tlmm_leds: tlmm-leds-state {
                pins = "gpio21", "gpio120";
                function = "gpio";
index 5025c08e481730e1a02e0c16e8441140b0b53326..9846584daf647f912f09f860ee89796f80331dc0 100644 (file)
 
 &sdhc_2 {
        pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on>;
-       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off>;
+       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_default>;
 
        cd-gpios = <&tlmm 38 GPIO_ACTIVE_HIGH>;
 
                bias-pull-up;
        };
 
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
        touchscreen_default: touchscreen-default-state {
                reset-pins {
                        pins = "gpio12";
index 7b629243ef0d7e5b43c8d53dd7601cde59e7df43..4ad7d36cf35063d3fd25c036e02a3d313ea34911 100644 (file)
        status = "okay";
 
        pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
-       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
+       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_default>;
 
        cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
 };
                bias-pull-up;
        };
 
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
        ts_int_reset_default: ts-int-reset-default-state {
                pins = "gpio13", "gpio100";
                function = "gpio";
index b8c217b04a3b9bd640464426333a550843b7444a..33ca4e157cd593016dcf2b9630bdf13d9d1d8d3f 100644 (file)
        vmmc-supply = <&reg_sd_vmmc>;
 
        pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
-       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
+       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_default>;
        cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
 };
 
                bias-disable;
        };
 
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
        touchscreen_default: touchscreen-default-state {
                touch-pins {
                        pins = "gpio13";
index 56c42b0c973367ea47ee7b6c9c1b2219f44d06d0..0d387d9507c33e9dad38c2300f48593c0671f703 100644 (file)
 };
 
 &sdhc_2 {
-       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on>;
-       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off>;
+       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_default>;
        pinctrl-names = "default", "sleep";
 
        cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
                bias-disable;
        };
 
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
        touchscreen_default: touchscreen-default-state {
                reset-pins {
                        pins = "gpio12";
index 175ca011998c65d8a6f9652bd08be468814ea084..39be7b6b1695c6b153616300751f565079298b61 100644 (file)
        status = "okay";
 
        pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdhc2_cd_default>;
-       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdhc2_cd_default>;
+       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_default>;
 
        /*
         * The Huawei device tree sets cd-gpios = <&tlmm 38 GPIO_ACTIVE_HIGH>.
                bias-disable;
        };
 
-       sdhc2_cd_default: sdhc2-cd-default-state {
+       sdc2_cd_default: sdc2-cd-default-state {
                pins = "gpio56";
                function = "gpio";
 
index f23cfb2bf7934a946e96902590d712e9d29b07f1..04e598a436cb3b5750e912cbe2c4e91e4572cfbf 100644 (file)
        status = "okay";
 
        pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
-       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
+       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_default>;
 
        cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
 };
                bias-disable;
        };
 
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
        usb_id_default: usb-id-default-state {
                pins = "gpio110";
                function = "gpio";
index 1b60d42a13c7d78bada86cb9c0a23bb89bc45bb5..c2149bcf53c424c5e665c771847a7b102e1e13fa 100644 (file)
                };
        };
 
-       pmx-sdc2-cd-pin-state {
-               sdc2_cd_on: cd-on-pins {
-                       pins = "gpio38";
-                       function = "gpio";
-
-                       drive-strength = <2>;
-                       bias-pull-up;
-               };
-               sdc2_cd_off: cd-off-pins {
-                       pins = "gpio38";
-                       function = "gpio";
-
-                       drive-strength = <2>;
-                       bias-disable;
-               };
-       };
-
        cdc-pdm-lines-state {
                cdc_pdm_lines_act: pdm-lines-on-pins {
                        pins = "gpio63", "gpio64", "gpio65", "gpio66",
index 895036fb6eb89689327379c0065694701c377b35..3c145a0aac99b668867c8bb6dc91824bcf423abc 100644 (file)
        status = "okay";
 
        pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
-       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
+       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_default>;
 
        cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
 };
                bias-disable;
        };
 
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
        tkey_default: tkey-default-state {
                pins = "gpio98";
                function = "gpio";
index 94cfb3200496cd61f53157ba9454ea78973a3c35..057ce62c03055422e70a05ccab9aab3cc742748b 100644 (file)
 };
 
 &sdhc_2 {
-       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
-       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
+       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_default>;
        pinctrl-names = "default", "sleep";
 
        cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
                drive-strength = <2>;
                bias-disable;
        };
+
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
 };
index f2a5800f1605b769be2e2b4b14aac0b4136e6355..36233a31b98be89834d10e19b0051f062bb4c92e 100644 (file)
        status = "okay";
 
        pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
-       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
+       pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_default>;
 
        cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
 };
                drive-strength = <2>;
                bias-disable;
        };
+
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
 };
index 85a8d8fe212ffda16c3180b353c968af5e29aa9c..80e4f0a6eea1c8403e5cebc026a91f268be7b4df 100644 (file)
 };
 
 &tlmm {
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-pull-up;
+       };
+
        usb_id_default: usb-id-default-state {
                pins = "gpio110";
                function = "gpio";
 };
 
 &sdhc_2 {
-       pinctrl-0 = <&sdc2_default_state>;
-       pinctrl-1 = <&sdc2_sleep_state>;
+       pinctrl-0 = <&sdc2_default_state &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_sleep_state &sdc2_cd_default>;
        pinctrl-names = "default", "sleep";
        cd-gpios = <&tlmm 38 GPIO_ACTIVE_HIGH>;
        status = "okay";
index 0d9f8b951b66e4ed06ed2ff97fff6829e94179fc..2cbd4baa9b959f49b0534fd9ba7995f6e64e9f4f 100644 (file)
                                        bias-pull-up;
                                        drive-strength = <10>;
                                };
-
-                               cd-pins {
-                                       pins = "gpio38";
-                                       function = "gpio";
-                                       drive-strength = <2>;
-                                       bias-pull-up;
-                               };
                        };
 
                        sdc2_sleep_state: sdc2-sleep-state {
                                        bias-pull-up;
                                        drive-strength = <2>;
                                };
-
-                               cd-pins {
-                                       pins = "gpio38";
-                                       function = "gpio";
-                                       drive-strength = <2>;
-                                       bias-disable;
-                               };
                        };
 
                        wcnss_pin_a: wcnss-active-state {