]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpiolib: Extract gpiochip_choose_fwnode() for wider use
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 13 Feb 2025 19:48:46 +0000 (21:48 +0200)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Fri, 21 Feb 2025 08:42:45 +0000 (09:42 +0100)
Extract gpiochip_choose_fwnode() for the future use in another function.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Tested-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Reviewed-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Link: https://lore.kernel.org/r/20250213195621.3133406-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpiolib.c

index 65ca749a10782d64d542d3c34557c62a0ea8614f..ba3de5f7d2038e3d3a889c0f3abe18c8d187282a 100644 (file)
@@ -883,6 +883,21 @@ void *gpiochip_get_data(struct gpio_chip *gc)
 }
 EXPORT_SYMBOL_GPL(gpiochip_get_data);
 
+/*
+ * If the calling driver provides the specific firmware node,
+ * use it. Otherwise use the one from the parent device, if any.
+ */
+static struct fwnode_handle *gpiochip_choose_fwnode(struct gpio_chip *gc)
+{
+       if (gc->fwnode)
+               return gc->fwnode;
+
+       if (gc->parent)
+               return dev_fwnode(gc->parent);
+
+       return NULL;
+}
+
 int gpiochip_get_ngpios(struct gpio_chip *gc, struct device *dev)
 {
        u32 ngpios = gc->ngpio;
@@ -942,14 +957,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
        gc->gpiodev = gdev;
        gpiochip_set_data(gc, data);
 
-       /*
-        * If the calling driver did not initialize firmware node,
-        * do it here using the parent device, if any.
-        */
-       if (gc->fwnode)
-               device_set_node(&gdev->dev, gc->fwnode);
-       else if (gc->parent)
-               device_set_node(&gdev->dev, dev_fwnode(gc->parent));
+       device_set_node(&gdev->dev, gpiochip_choose_fwnode(gc));
 
        gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
        if (gdev->id < 0) {