]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
pinctrl: provide pinmux_generic_add_pinfunction()
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Wed, 9 Jul 2025 14:38:58 +0000 (16:38 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Sat, 19 Jul 2025 15:59:48 +0000 (17:59 +0200)
Several drivers call pinmux_generic_add_function() passing it the
contents of struct pinfunction as first three arguments. We can make
this shorter by simply providing an interface allowing to pass the
address of struct pinfunction directly when adding a new function.

Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Link: https://lore.kernel.org/20250709-pinctrl-gpio-pinfuncs-v2-2-b6135149c0d9@linaro.org
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinmux.c
drivers/pinctrl/pinmux.h

index a7865997ea14e31fa6d107ea2a2c38c31d91025d..79814758a084570adea0ea1a3151d186f65d1d1f 100644 (file)
@@ -874,14 +874,26 @@ int pinmux_generic_add_function(struct pinctrl_dev *pctldev,
                                const char * const *groups,
                                const unsigned int ngroups,
                                void *data)
+{
+       struct pinfunction func = PINCTRL_PINFUNCTION(name, groups, ngroups);
+
+       return pinmux_generic_add_pinfunction(pctldev, &func, data);
+}
+EXPORT_SYMBOL_GPL(pinmux_generic_add_function);
+
+/**
+ * pinmux_generic_add_pinfunction() - adds a function group
+ * @pctldev: pin controller device
+ * @func: pinfunction structure describing the function group
+ * @data: pin controller driver specific data
+ */
+int pinmux_generic_add_pinfunction(struct pinctrl_dev *pctldev,
+                                  const struct pinfunction *func, void *data)
 {
        struct function_desc *function;
        int selector, error;
 
-       if (!name)
-               return -EINVAL;
-
-       selector = pinmux_func_name_to_selector(pctldev, name);
+       selector = pinmux_func_name_to_selector(pctldev, func->name);
        if (selector >= 0)
                return selector;
 
@@ -891,7 +903,7 @@ int pinmux_generic_add_function(struct pinctrl_dev *pctldev,
        if (!function)
                return -ENOMEM;
 
-       function->func = PINCTRL_PINFUNCTION(name, groups, ngroups);
+       function->func = *func;
        function->data = data;
 
        error = radix_tree_insert(&pctldev->pin_function_tree, selector, function);
@@ -902,7 +914,7 @@ int pinmux_generic_add_function(struct pinctrl_dev *pctldev,
 
        return selector;
 }
-EXPORT_SYMBOL_GPL(pinmux_generic_add_function);
+EXPORT_SYMBOL_GPL(pinmux_generic_add_pinfunction);
 
 /**
  * pinmux_generic_remove_function() - removes a numbered function
index 5c039fd09f7474b4c104d3c36e0e8b8dc73a2ddd..bdb5be1a636ead9695410824b5557937c5baa89a 100644 (file)
@@ -161,6 +161,9 @@ int pinmux_generic_add_function(struct pinctrl_dev *pctldev,
                                unsigned int const ngroups,
                                void *data);
 
+int pinmux_generic_add_pinfunction(struct pinctrl_dev *pctldev,
+                                  const struct pinfunction *func, void *data);
+
 int pinmux_generic_remove_function(struct pinctrl_dev *pctldev,
                                   unsigned int selector);