]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
pinctrl: cix: sky1: Provide pin control dummy states
authorLinus Walleij <linus.walleij@linaro.org>
Tue, 4 Nov 2025 13:01:03 +0000 (14:01 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 5 Nov 2025 17:13:33 +0000 (18:13 +0100)
This exports and calls the pinctrl_provide_dummies() function from
the CIX SKY1 driver.

The reasons are explained in a comment in the commit, in essence the
two pin controllers need to go through explicit state transitions
default->sleep->default despite they only handle one single state
each.

Reviewed-by: Hans Zhang <hans.zhang@cixtech.com>
Reviewed-by: Fugang Duan <fugang.duan@cixtech.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/cix/pinctrl-sky1-base.c
drivers/pinctrl/core.c

index b03e10147b09fc4b69593d5cd9851b74ba1aaac1..a5b583f10441e42cea34c275bc61fb36b949c0e4 100644 (file)
@@ -560,6 +560,21 @@ int sky1_base_pinctrl_probe(struct platform_device *pdev,
                return ret;
        }
 
+       /*
+        * The SKY1 SoC has two pin controllers: one for normal working state
+        * and one for sleep state. Since one controller only has working
+        * states and the other only sleep states, it will seem to the
+        * controller is always in the first configured state, so no
+        * transitions between default->sleep->default are detected and no
+        * new pin states are applied when we go in and out of sleep state.
+        *
+        * To counter this, provide dummies, so that the sleep-only pin
+        * controller still get some default states, and the working state pin
+        * controller get some sleep states, so that state transitions occur
+        * and we re-configure pins for default and sleep states.
+        */
+       pinctrl_provide_dummies();
+
        dev_dbg(&pdev->dev, "initialized SKY1 pinctrl driver\n");
 
        return pinctrl_enable(spctl->pctl);
index 157510157d47aad96b459abf68cc0e4eed957f2d..83254a95ef1741eaf4784ba4e5a95176af497845 100644 (file)
@@ -70,6 +70,7 @@ void pinctrl_provide_dummies(void)
 {
        pinctrl_dummy_state = true;
 }
+EXPORT_SYMBOL_GPL(pinctrl_provide_dummies);
 
 const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev)
 {