]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
pinctrl: qcom: lpass-lpi: Enable runtime PM hooks on LPASS LPI SoCs
authorAjay Kumar Nandam <ajay.nandam@oss.qualcomm.com>
Fri, 22 May 2026 20:46:43 +0000 (02:16 +0530)
committerLinus Walleij <linusw@kernel.org>
Mon, 8 Jun 2026 08:46:41 +0000 (10:46 +0200)
The LPASS LPI core conversion to PM clock framework relies on variant
drivers wiring runtime PM callbacks.

Hook up runtime PM callbacks for the LPASS LPI variant drivers touched
in this patch so they are prepared for the shared core conversion.

This commit is a preparatory NOP on its own, as runtime PM is still
disabled on these devices until the following core conversion patch.

This is a mechanical per-variant driver update that relies on the
same generic PM clock flow (of_pm_clk_add_clks() + pm_clk_suspend/
pm_clk_resume()) and DT-provided clocks.

Runtime behavior was validated on Kodiak (sc7280).

Suggested-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Ajay Kumar Nandam <ajay.nandam@oss.qualcomm.com>
Signed-off-by: Linus Walleij <linusw@kernel.org>
12 files changed:
drivers/pinctrl/qcom/pinctrl-milos-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sc7280-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sc8280xp-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sdm660-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sdm670-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sm4250-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sm6115-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sm6350-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sm8250-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sm8450-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sm8550-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sm8650-lpass-lpi.c

index 3bf6fe0cf1bbe12a79350f72d01d6fa8763d5dd7..72b8ffd97860b782371715b940476400d312c002 100644 (file)
@@ -7,6 +7,8 @@
 #include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 
 #include "pinctrl-lpass-lpi.h"
 
@@ -203,10 +205,15 @@ static const struct of_device_id lpi_pinctrl_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver lpi_pinctrl_driver = {
        .driver = {
                .name = "qcom-milos-lpass-lpi-pinctrl",
                .of_match_table = lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index 750f410311a8fbb287afb08641de4e59ce2649c9..a61df10d46cb3a952bdc2fbc45776290b86d5c19 100644 (file)
@@ -7,6 +7,8 @@
 #include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 
 #include "pinctrl-lpass-lpi.h"
 
@@ -129,20 +131,25 @@ static const struct lpi_pinctrl_variant_data sc7280_lpi_data = {
 
 static const struct of_device_id lpi_pinctrl_of_match[] = {
        {
-              .compatible = "qcom,sc7280-lpass-lpi-pinctrl",
-              .data = &sc7280_lpi_data,
+               .compatible = "qcom,sc7280-lpass-lpi-pinctrl",
+               .data = &sc7280_lpi_data,
        }, {
-              .compatible = "qcom,sm8350-lpass-lpi-pinctrl",
-              .data = &sc7280_lpi_data,
+               .compatible = "qcom,sm8350-lpass-lpi-pinctrl",
+               .data = &sc7280_lpi_data,
        },
        { }
 };
 MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver lpi_pinctrl_driver = {
        .driver = {
-                  .name = "qcom-sc7280-lpass-lpi-pinctrl",
-                  .of_match_table = lpi_pinctrl_of_match,
+               .name = "qcom-sc7280-lpass-lpi-pinctrl",
+               .of_match_table = lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index 0e839b6aaaf4bd88f078cf36091faa9c2c885518..27c47710365efbc08190fd4c4c2277e89011be61 100644 (file)
@@ -6,6 +6,8 @@
 #include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 
 #include "pinctrl-lpass-lpi.h"
 
@@ -166,17 +168,22 @@ static const struct lpi_pinctrl_variant_data sc8280xp_lpi_data = {
 
 static const struct of_device_id lpi_pinctrl_of_match[] = {
        {
-              .compatible = "qcom,sc8280xp-lpass-lpi-pinctrl",
-              .data = &sc8280xp_lpi_data,
+               .compatible = "qcom,sc8280xp-lpass-lpi-pinctrl",
+               .data = &sc8280xp_lpi_data,
        },
        { }
 };
 MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver lpi_pinctrl_driver = {
        .driver = {
-                  .name = "qcom-sc8280xp-lpass-lpi-pinctrl",
-                  .of_match_table = lpi_pinctrl_of_match,
+               .name = "qcom-sc8280xp-lpass-lpi-pinctrl",
+               .of_match_table = lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index 65411abfbfaca7c3493eab03935d4c82d0e8900b..7b5aacaae7d7cb514d1c5b602b2c2f72eb88eac4 100644 (file)
@@ -10,6 +10,8 @@
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 #include <linux/pinctrl/pinctrl.h>
 
 #include "pinctrl-lpass-lpi.h"
@@ -145,10 +147,15 @@ static const struct of_device_id sdm660_lpi_pinctrl_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, sdm660_lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver sdm660_lpi_pinctrl_driver = {
        .driver = {
                .name = "qcom-sdm660-lpass-lpi-pinctrl",
                .of_match_table = sdm660_lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index 858146c408d0c1bd8cf21bb68c2f44c37ed06663..0a31f7ad2e0d69e5935ce3bf366ef98bf89ffe88 100644 (file)
@@ -7,6 +7,8 @@
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 #include <linux/pinctrl/pinctrl.h>
 
 #include "pinctrl-lpass-lpi.h"
@@ -151,10 +153,15 @@ static const struct of_device_id sdm670_lpi_pinctrl_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, sdm670_lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver sdm670_lpi_pinctrl_driver = {
        .driver = {
                .name = "qcom-sdm670-lpass-lpi-pinctrl",
                .of_match_table = sdm670_lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index c0e178be9cfc3ea8578a39d8998033058f40dabf..75bafa62426a223a40eeb7be9a1195451bae6d7e 100644 (file)
@@ -7,6 +7,8 @@
 #include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 
 #include "pinctrl-lpass-lpi.h"
 
@@ -221,10 +223,15 @@ static const struct of_device_id lpi_pinctrl_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver lpi_pinctrl_driver = {
        .driver = {
                .name = "qcom-sm4250-lpass-lpi-pinctrl",
                .of_match_table = lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index b7d9186861a2ffa9f3c00a660bde00858fff9462..05435ea6e17a6f34859b0555c14333ae57d856d3 100644 (file)
@@ -7,6 +7,8 @@
 #include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 
 #include "pinctrl-lpass-lpi.h"
 
@@ -141,10 +143,15 @@ static const struct of_device_id lpi_pinctrl_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver lpi_pinctrl_driver = {
        .driver = {
                .name = "qcom-sm6115-lpass-lpi-pinctrl",
                .of_match_table = lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index 4d06abcfedfd7136f6a4016e7af3bfb116641c52..946b230843047fe22b5c20cdec8ba8f01f09b427 100644 (file)
@@ -6,6 +6,8 @@
 #include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 
 #include "pinctrl-lpass-lpi.h"
 
@@ -135,10 +137,15 @@ static const struct of_device_id lpi_pinctrl_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver lpi_pinctrl_driver = {
        .driver = {
                   .name = "qcom-sm6350-lpass-lpi-pinctrl",
                   .of_match_table = lpi_pinctrl_of_match,
+                  .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index c27452eece3e6b8a5f1a81233c03d8f9bd1f1f63..454de788be2150bc3907b20d6e7194418fa1f196 100644 (file)
@@ -7,6 +7,8 @@
 #include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 
 #include "pinctrl-lpass-lpi.h"
 
@@ -127,17 +129,22 @@ static const struct lpi_pinctrl_variant_data sm8250_lpi_data = {
 
 static const struct of_device_id lpi_pinctrl_of_match[] = {
        {
-              .compatible = "qcom,sm8250-lpass-lpi-pinctrl",
-              .data = &sm8250_lpi_data,
+               .compatible = "qcom,sm8250-lpass-lpi-pinctrl",
+               .data = &sm8250_lpi_data,
        },
        { }
 };
 MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver lpi_pinctrl_driver = {
        .driver = {
-                  .name = "qcom-sm8250-lpass-lpi-pinctrl",
-                  .of_match_table = lpi_pinctrl_of_match,
+               .name = "qcom-sm8250-lpass-lpi-pinctrl",
+               .of_match_table = lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index 439f6541622e924a2a77db7a8b15ccb709e7a53d..834eee8dcce92a172beb78f296e2172abc069c1d 100644 (file)
@@ -6,6 +6,8 @@
 #include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 
 #include "pinctrl-lpass-lpi.h"
 
@@ -195,17 +197,22 @@ static const struct lpi_pinctrl_variant_data sm8450_lpi_data = {
 
 static const struct of_device_id lpi_pinctrl_of_match[] = {
        {
-              .compatible = "qcom,sm8450-lpass-lpi-pinctrl",
-              .data = &sm8450_lpi_data,
+               .compatible = "qcom,sm8450-lpass-lpi-pinctrl",
+               .data = &sm8450_lpi_data,
        },
        { }
 };
 MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver lpi_pinctrl_driver = {
        .driver = {
-                  .name = "qcom-sm8450-lpass-lpi-pinctrl",
-                  .of_match_table = lpi_pinctrl_of_match,
+               .name = "qcom-sm8450-lpass-lpi-pinctrl",
+               .of_match_table = lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index 73065919c8c2654670b07372bd2dd5839baf2979..875e04e5d2b90b506def95181a63767bb15c4c17 100644 (file)
@@ -6,6 +6,8 @@
 #include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 
 #include "pinctrl-lpass-lpi.h"
 
@@ -203,17 +205,22 @@ static const struct lpi_pinctrl_variant_data sm8550_lpi_data = {
 
 static const struct of_device_id lpi_pinctrl_of_match[] = {
        {
-              .compatible = "qcom,sm8550-lpass-lpi-pinctrl",
-              .data = &sm8550_lpi_data,
+               .compatible = "qcom,sm8550-lpass-lpi-pinctrl",
+               .data = &sm8550_lpi_data,
        },
        { }
 };
 MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver lpi_pinctrl_driver = {
        .driver = {
-                  .name = "qcom-sm8550-lpass-lpi-pinctrl",
-                  .of_match_table = lpi_pinctrl_of_match,
+               .name = "qcom-sm8550-lpass-lpi-pinctrl",
+               .of_match_table = lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,
index f9fcedf5a65d7115e605c54229ba0096b9081636..bc7889c993d05fdd194662145218509529fe3d76 100644 (file)
@@ -6,6 +6,8 @@
 #include <linux/gpio/driver.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
+#include <linux/pm_runtime.h>
 
 #include "pinctrl-lpass-lpi.h"
 
@@ -210,17 +212,22 @@ static const struct lpi_pinctrl_variant_data sm8650_lpi_data = {
 
 static const struct of_device_id lpi_pinctrl_of_match[] = {
        {
-              .compatible = "qcom,sm8650-lpass-lpi-pinctrl",
-              .data = &sm8650_lpi_data,
+               .compatible = "qcom,sm8650-lpass-lpi-pinctrl",
+               .data = &sm8650_lpi_data,
        },
        { }
 };
 MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
 
+static const struct dev_pm_ops lpi_pinctrl_pm_ops = {
+       RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
 static struct platform_driver lpi_pinctrl_driver = {
        .driver = {
-                  .name = "qcom-sm8650-lpass-lpi-pinctrl",
-                  .of_match_table = lpi_pinctrl_of_match,
+               .name = "qcom-sm8650-lpass-lpi-pinctrl",
+               .of_match_table = lpi_pinctrl_of_match,
+               .pm = pm_ptr(&lpi_pinctrl_pm_ops),
        },
        .probe = lpi_pinctrl_probe,
        .remove = lpi_pinctrl_remove,