]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpiolib: Introduce for_each_gpio_property_name() helper
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 19 Aug 2024 14:28:56 +0000 (17:28 +0300)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 20 Aug 2024 08:22:38 +0000 (10:22 +0200)
Introduce a helper macro for_each_gpio_property_name().
With that in place, update users. This, in particular,
will help making the following simplifications easier.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20240819142945.327808-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpiolib-acpi.c
drivers/gpio/gpiolib-of.c
drivers/gpio/gpiolib.h

index 69cd2be9c7f3b3a1e6cba8dd0c32985720f3ffd2..cf4b1f068bacf692d9f1c6236ed859f2a290569c 100644 (file)
@@ -973,18 +973,9 @@ __acpi_find_gpio(struct fwnode_handle *fwnode, const char *con_id, unsigned int
        struct acpi_device *adev = to_acpi_device_node(fwnode);
        struct gpio_desc *desc;
        char propname[32];
-       int i;
 
        /* Try first from _DSD */
-       for (i = 0; i < gpio_suffix_count; i++) {
-               if (con_id) {
-                       snprintf(propname, sizeof(propname), "%s-%s",
-                                con_id, gpio_suffixes[i]);
-               } else {
-                       snprintf(propname, sizeof(propname), "%s",
-                                gpio_suffixes[i]);
-               }
-
+       for_each_gpio_property_name(propname, con_id) {
                if (adev)
                        desc = acpi_get_gpiod_by_index(adev,
                                                       propname, idx, info);
@@ -1450,17 +1441,9 @@ int acpi_gpio_count(const struct fwnode_handle *fwnode, const char *con_id)
        int count = -ENOENT;
        int ret;
        char propname[32];
-       unsigned int i;
 
        /* Try first from _DSD */
-       for (i = 0; i < gpio_suffix_count; i++) {
-               if (con_id)
-                       snprintf(propname, sizeof(propname), "%s-%s",
-                                con_id, gpio_suffixes[i]);
-               else
-                       snprintf(propname, sizeof(propname), "%s",
-                                gpio_suffixes[i]);
-
+       for_each_gpio_property_name(propname, con_id) {
                ret = acpi_dev_get_property(adev, propname, ACPI_TYPE_ANY, &obj);
                if (ret == 0) {
                        if (obj->type == ACPI_TYPE_LOCAL_REFERENCE)
index 3bd3283b349c5d497f9b2d81739978d4fdbf0159..d0d78e0fa28cc992ee24a3327630d95d5d24065e 100644 (file)
@@ -97,20 +97,12 @@ int of_gpio_count(const struct fwnode_handle *fwnode, const char *con_id)
        const struct device_node *np = to_of_node(fwnode);
        int ret;
        char propname[32];
-       unsigned int i;
 
        ret = of_gpio_spi_cs_get_count(np, con_id);
        if (ret > 0)
                return ret;
 
-       for (i = 0; i < gpio_suffix_count; i++) {
-               if (con_id)
-                       snprintf(propname, sizeof(propname), "%s-%s",
-                                con_id, gpio_suffixes[i]);
-               else
-                       snprintf(propname, sizeof(propname), "%s",
-                                gpio_suffixes[i]);
-
+       for_each_gpio_property_name(propname, con_id) {
                ret = of_gpio_named_count(np, propname);
                if (ret > 0)
                        break;
@@ -685,23 +677,14 @@ static const of_find_gpio_quirk of_find_gpio_quirks[] = {
 struct gpio_desc *of_find_gpio(struct device_node *np, const char *con_id,
                               unsigned int idx, unsigned long *flags)
 {
-       char prop_name[32]; /* 32 is max size of property name */
+       char propname[32]; /* 32 is max size of property name */
        enum of_gpio_flags of_flags;
        const of_find_gpio_quirk *q;
        struct gpio_desc *desc;
-       unsigned int i;
 
        /* Try GPIO property "foo-gpios" and "foo-gpio" */
-       for (i = 0; i < gpio_suffix_count; i++) {
-               if (con_id)
-                       snprintf(prop_name, sizeof(prop_name), "%s-%s", con_id,
-                                gpio_suffixes[i]);
-               else
-                       snprintf(prop_name, sizeof(prop_name), "%s",
-                                gpio_suffixes[i]);
-
-               desc = of_get_named_gpiod_flags(np, prop_name, idx, &of_flags);
-
+       for_each_gpio_property_name(propname, con_id) {
+               desc = of_get_named_gpiod_flags(np, propname, idx, &of_flags);
                if (!gpiod_not_found(desc))
                        break;
        }
index 4de0bf1a62d383d1193da2de6311f007d14e3dc6..0271e747fb6e9d46a517f9fbbfbbfe0ab3324778 100644 (file)
@@ -93,6 +93,19 @@ static inline struct gpio_device *to_gpio_device(struct device *dev)
 extern const char *const gpio_suffixes[];
 extern const size_t gpio_suffix_count;
 
+#define for_each_gpio_property_name(propname, con_id)                                  \
+       for (unsigned int __i = 0;                                                      \
+            __i < gpio_suffix_count && ({                                              \
+                    const char *__gs = gpio_suffixes[__i];                             \
+                                                                                       \
+               if (con_id)                                                             \
+                       snprintf(propname, sizeof(propname), "%s-%s", con_id, __gs);    \
+               else                                                                    \
+                       snprintf(propname, sizeof(propname), "%s", __gs);               \
+               1;                                                                      \
+            });                                                                        \
+            __i++)
+
 /**
  * struct gpio_array - Opaque descriptor for a structure of GPIO array attributes
  *