gpiolib: Check "gpio-ranges" before calling ->add_pin_ranges()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 13 Jan 2023 21:53:49 +0000 (23:53 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 26 Jan 2023 12:38:55 +0000 (13:38 +0100)
The ->add_pin_ranges() is supposed to be called for the backward
compatiblity on Device Tree platforms or non-DT ones. Ensure that
by checking presense of the "gpio-ranges" property.

This allows to clean up a few existing drivers to avoid duplication
of the check.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Stefan Wahren <stefan.wahren@i2se.com>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Acked-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Link: https://lore.kernel.org/r/20230113215352.44272-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpiolib.c

index 5a66d9616d7ccedf5e8a43235203760f29f942ee..8a8551af80636eaa2af649dbb7c38cadd6bd97a3 100644 (file)
@@ -531,6 +531,14 @@ static void gpiochip_free_valid_mask(struct gpio_chip *gc)
 
 static int gpiochip_add_pin_ranges(struct gpio_chip *gc)
 {
+       /*
+        * Device Tree platforms are supposed to use "gpio-ranges"
+        * property. This check ensures that the ->add_pin_ranges()
+        * won't be called for them.
+        */
+       if (device_property_present(&gc->gpiodev->dev, "gpio-ranges"))
+               return 0;
+
        if (gc->add_pin_ranges)
                return gc->add_pin_ranges(gc);