ret = gpiod_hog(desc, name, lflags, dflags);
if (ret < 0) {
of_node_put(np);
-@@ -499,7 +506,10 @@ int of_gpiochip_add(struct gpio_chip *ch
+@@ -499,12 +506,13 @@ int of_gpiochip_add(struct gpio_chip *ch
of_node_get(chip->of_node);
-- return of_gpiochip_scan_gpios(chip);
-+ if (!chip->request)
-+ status = of_gpiochip_scan_gpios(chip, 0, chip->ngpio);
-+
-+ return status;
+- status = of_gpiochip_scan_gpios(chip);
+- if (status) {
+- of_node_put(chip->of_node);
+- gpiochip_remove_pin_ranges(chip);
++ if (!chip->request) {
++ status = of_gpiochip_scan_gpios(chip);
++ if (status) {
++ of_node_put(chip->of_node);
++ gpiochip_remove_pin_ranges(chip);
++ }
+ }
+-
+ return status;
}
- void of_gpiochip_remove(struct gpio_chip *chip)
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1938,7 +1938,8 @@ int gpiochip_add_pingroup_range(struct g