gpiolib: replace find_chip_by_name() with gpio_device_find_by_label()
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Wed, 27 Sep 2023 14:29:27 +0000 (16:29 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Wed, 4 Oct 2023 11:35:49 +0000 (13:35 +0200)
Remove all remaining uses of find_chip_by_name() (and subsequently:
gpiochip_find()) from gpiolib.c and use the new
gpio_device_find_by_label() instead.

Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib.c

index 6bb8d4a0b1d46a19963646efba32952653858993..191f9c87b4d0b1f05928584fb04947980c26304a 100644 (file)
@@ -1145,18 +1145,6 @@ struct gpio_device *gpio_device_find_by_label(const char *label)
 }
 EXPORT_SYMBOL_GPL(gpio_device_find_by_label);
 
-static int gpiochip_match_name(struct gpio_chip *gc, void *data)
-{
-       const char *name = data;
-
-       return !strcmp(gc->label, name);
-}
-
-static struct gpio_chip *find_chip_by_name(const char *name)
-{
-       return gpiochip_find((void *)name, gpiochip_match_name);
-}
-
 /**
  * gpio_device_get() - Increase the reference count of this GPIO device
  * @gdev: GPIO device to increase the refcount for
@@ -3908,7 +3896,6 @@ EXPORT_SYMBOL_GPL(gpiod_remove_lookup_table);
  */
 void gpiod_add_hogs(struct gpiod_hog *hogs)
 {
-       struct gpio_chip *gc;
        struct gpiod_hog *hog;
 
        mutex_lock(&gpio_machine_hogs_mutex);
@@ -3920,9 +3907,10 @@ void gpiod_add_hogs(struct gpiod_hog *hogs)
                 * The chip may have been registered earlier, so check if it
                 * exists and, if so, try to hog the line now.
                 */
-               gc = find_chip_by_name(hog->chip_label);
-               if (gc)
-                       gpiochip_machine_hog(gc, hog);
+               struct gpio_device *gdev __free(gpio_device_put) =
+                               gpio_device_find_by_label(hog->chip_label);
+               if (gdev)
+                       gpiochip_machine_hog(gpio_device_get_chip(gdev), hog);
        }
 
        mutex_unlock(&gpio_machine_hogs_mutex);
@@ -3972,6 +3960,7 @@ static struct gpio_desc *gpiod_find(struct device *dev, const char *con_id,
        struct gpio_desc *desc = ERR_PTR(-ENOENT);
        struct gpiod_lookup_table *table;
        struct gpiod_lookup *p;
+       struct gpio_chip *gc;
 
        guard(mutex)(&gpio_lookup_lock);
 
@@ -3980,8 +3969,6 @@ static struct gpio_desc *gpiod_find(struct device *dev, const char *con_id,
                return desc;
 
        for (p = &table->table[0]; p->key; p++) {
-               struct gpio_chip *gc;
-
                /* idx must always match exactly */
                if (p->idx != idx)
                        continue;
@@ -4002,9 +3989,9 @@ static struct gpio_desc *gpiod_find(struct device *dev, const char *con_id,
                        return ERR_PTR(-EPROBE_DEFER);
                }
 
-               gc = find_chip_by_name(p->key);
-
-               if (!gc) {
+               struct gpio_device *gdev __free(gpio_device_put) =
+                                       gpio_device_find_by_label(p->key);
+               if (!gdev) {
                        /*
                         * As the lookup table indicates a chip with
                         * p->key should exist, assume it may
@@ -4017,6 +4004,8 @@ static struct gpio_desc *gpiod_find(struct device *dev, const char *con_id,
                        return ERR_PTR(-EPROBE_DEFER);
                }
 
+               gc = gpio_device_get_chip(gdev);
+
                if (gc->ngpio <= p->chip_hwnum) {
                        dev_err(dev,
                                "requested GPIO %u (%u) is out of range [0..%u] for chip %s\n",
@@ -4025,7 +4014,7 @@ static struct gpio_desc *gpiod_find(struct device *dev, const char *con_id,
                        return ERR_PTR(-EINVAL);
                }
 
-               desc = gpiochip_get_desc(gc, p->chip_hwnum);
+               desc = gpio_device_get_desc(gdev, p->chip_hwnum);
                *flags = p->flags;
 
                return desc;