]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
pinctrl: qcom: use generic pin function helpers
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 2 Sep 2025 11:59:21 +0000 (13:59 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 8 Sep 2025 12:22:50 +0000 (14:22 +0200)
With the pinmux core no longer duplicating memory used to store the
struct pinfunction objects in .rodata, we can now use the existing
infrastructure for storing and looking up pin functions in qualcomm
drivers. Remove hand-crafted callbacks.

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Tested-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/qcom/Kconfig
drivers/pinctrl/qcom/pinctrl-msm.c

index dd9bbe8f3e11c37418d2143b33c21eeea10d456b..f7594de4b1e9b95458c2c817e1158026a8006f64 100644 (file)
@@ -8,6 +8,7 @@ config PINCTRL_MSM
        depends on OF
        select QCOM_SCM
        select PINMUX
+       select GENERIC_PINMUX_FUNCTIONS
        select PINCONF
        select GENERIC_PINCONF
        select GPIOLIB_IRQCHIP
index 83eb075b6bfa1728137e47741740fda78046514b..96e40c2342bdedb8857629e503897f171a80e579 100644 (file)
@@ -31,6 +31,7 @@
 #include "../core.h"
 #include "../pinconf.h"
 #include "../pinctrl-utils.h"
+#include "../pinmux.h"
 
 #include "pinctrl-msm.h"
 
@@ -150,33 +151,6 @@ static int msm_pinmux_request(struct pinctrl_dev *pctldev, unsigned offset)
        return gpiochip_line_is_valid(chip, offset) ? 0 : -EINVAL;
 }
 
-static int msm_get_functions_count(struct pinctrl_dev *pctldev)
-{
-       struct msm_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
-
-       return pctrl->soc->nfunctions;
-}
-
-static const char *msm_get_function_name(struct pinctrl_dev *pctldev,
-                                        unsigned function)
-{
-       struct msm_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
-
-       return pctrl->soc->functions[function].name;
-}
-
-static int msm_get_function_groups(struct pinctrl_dev *pctldev,
-                                  unsigned function,
-                                  const char * const **groups,
-                                  unsigned * const num_groups)
-{
-       struct msm_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
-
-       *groups = pctrl->soc->functions[function].groups;
-       *num_groups = pctrl->soc->functions[function].ngroups;
-       return 0;
-}
-
 static int msm_pinmux_set_mux(struct pinctrl_dev *pctldev,
                              unsigned function,
                              unsigned group)
@@ -288,9 +262,9 @@ static int msm_pinmux_request_gpio(struct pinctrl_dev *pctldev,
 
 static const struct pinmux_ops msm_pinmux_ops = {
        .request                = msm_pinmux_request,
-       .get_functions_count    = msm_get_functions_count,
-       .get_function_name      = msm_get_function_name,
-       .get_function_groups    = msm_get_function_groups,
+       .get_functions_count    = pinmux_generic_get_function_count,
+       .get_function_name      = pinmux_generic_get_function_name,
+       .get_function_groups    = pinmux_generic_get_function_groups,
        .gpio_request_enable    = msm_pinmux_request_gpio,
        .set_mux                = msm_pinmux_set_mux,
 };
@@ -1552,6 +1526,7 @@ EXPORT_SYMBOL(msm_pinctrl_dev_pm_ops);
 int msm_pinctrl_probe(struct platform_device *pdev,
                      const struct msm_pinctrl_soc_data *soc_data)
 {
+       const struct pinfunction *func;
        struct msm_pinctrl *pctrl;
        struct resource *res;
        int ret;
@@ -1606,6 +1581,14 @@ int msm_pinctrl_probe(struct platform_device *pdev,
                return PTR_ERR(pctrl->pctrl);
        }
 
+       for (i = 0; i < soc_data->nfunctions; i++) {
+               func = &soc_data->functions[i];
+
+               ret = pinmux_generic_add_pinfunction(pctrl->pctrl, func, NULL);
+               if (ret < 0)
+                       return ret;
+       }
+
        ret = msm_gpio_init(pctrl);
        if (ret)
                return ret;