treewide: gpio-export: add error handling
authorMathias Kresin <dev@kresin.me>
Thu, 28 Jun 2018 16:23:37 +0000 (18:23 +0200)
committerMathias Kresin <dev@kresin.me>
Thu, 28 Jun 2018 16:39:57 +0000 (18:39 +0200)
Check if the GPIO is valid (or set at all). If no GPIO is set in the
devicetree, a gpiolib related kernel warning + stacktrace is shown during
boot and gpio-export reports GPIOs as exported albeit none really is.

Signed-off-by: Mathias Kresin <dev@kresin.me>
target/linux/ath79/patches-4.14/0024-GPIO-add-named-gpio-exports.patch
target/linux/lantiq/patches-4.14/0030-GPIO-add-named-gpio-exports.patch
target/linux/ramips/patches-4.14/0024-GPIO-add-named-gpio-exports.patch

index 0c1bc73926892508729de6cfb73260b3995b5c07..10ca24bc7115c7d36a541470155b22668bbc3730 100644 (file)
@@ -22,7 +22,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
  #include "gpiolib.h"
  
-@@ -506,3 +508,69 @@ void of_gpiochip_remove(struct gpio_chip
+@@ -506,3 +508,71 @@ void of_gpiochip_remove(struct gpio_chip
        gpiochip_remove_pin_ranges(chip);
        of_node_put(chip->of_node);
  }
@@ -56,6 +56,8 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +                      enum of_gpio_flags of_flags;
 +
 +                      gpio = of_get_gpio_flags(cnp, i, &of_flags);
++                      if (!gpio_is_valid(gpio))
++                              return gpio;
 +
 +                      if (of_flags == OF_GPIO_ACTIVE_LOW)
 +                              flags |= GPIOF_ACTIVE_LOW;
index 30b6a11818ba25570411dd318cf300d847a3d8e3..013d802265026d24df7361b81f2971fe8ff4b379 100644 (file)
@@ -22,7 +22,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
  #include "gpiolib.h"
  
-@@ -506,3 +508,73 @@ void of_gpiochip_remove(struct gpio_chip
+@@ -506,3 +508,75 @@ void of_gpiochip_remove(struct gpio_chip
        gpiochip_remove_pin_ranges(chip);
        of_node_put(chip->of_node);
  }
@@ -58,6 +58,8 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +                      enum of_gpio_flags of_flags;
 +
 +                      gpio = of_get_gpio_flags(cnp, i, &of_flags);
++                      if (!gpio_is_valid(gpio))
++                              return gpio;
 +
 +                      if (of_flags == OF_GPIO_ACTIVE_LOW)
 +                              flags |= GPIOF_ACTIVE_LOW;
index 0c1bc73926892508729de6cfb73260b3995b5c07..10ca24bc7115c7d36a541470155b22668bbc3730 100644 (file)
@@ -22,7 +22,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
  #include "gpiolib.h"
  
-@@ -506,3 +508,69 @@ void of_gpiochip_remove(struct gpio_chip
+@@ -506,3 +508,71 @@ void of_gpiochip_remove(struct gpio_chip
        gpiochip_remove_pin_ranges(chip);
        of_node_put(chip->of_node);
  }
@@ -56,6 +56,8 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +                      enum of_gpio_flags of_flags;
 +
 +                      gpio = of_get_gpio_flags(cnp, i, &of_flags);
++                      if (!gpio_is_valid(gpio))
++                              return gpio;
 +
 +                      if (of_flags == OF_GPIO_ACTIVE_LOW)
 +                              flags |= GPIOF_ACTIVE_LOW;