treewide: gpio-export: add error handling
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>
This commit is contained in:
parent
750e4b62b1
commit
a570933999
3 changed files with 9 additions and 3 deletions
|
@ -22,7 +22,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
|
|
||||||
#include "gpiolib.h"
|
#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);
|
gpiochip_remove_pin_ranges(chip);
|
||||||
of_node_put(chip->of_node);
|
of_node_put(chip->of_node);
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,8 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
+ enum of_gpio_flags of_flags;
|
+ enum of_gpio_flags of_flags;
|
||||||
+
|
+
|
||||||
+ gpio = of_get_gpio_flags(cnp, i, &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)
|
+ if (of_flags == OF_GPIO_ACTIVE_LOW)
|
||||||
+ flags |= GPIOF_ACTIVE_LOW;
|
+ flags |= GPIOF_ACTIVE_LOW;
|
||||||
|
|
|
@ -22,7 +22,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
|
|
||||||
#include "gpiolib.h"
|
#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);
|
gpiochip_remove_pin_ranges(chip);
|
||||||
of_node_put(chip->of_node);
|
of_node_put(chip->of_node);
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,8 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
+ enum of_gpio_flags of_flags;
|
+ enum of_gpio_flags of_flags;
|
||||||
+
|
+
|
||||||
+ gpio = of_get_gpio_flags(cnp, i, &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)
|
+ if (of_flags == OF_GPIO_ACTIVE_LOW)
|
||||||
+ flags |= GPIOF_ACTIVE_LOW;
|
+ flags |= GPIOF_ACTIVE_LOW;
|
||||||
|
|
|
@ -22,7 +22,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
|
|
||||||
#include "gpiolib.h"
|
#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);
|
gpiochip_remove_pin_ranges(chip);
|
||||||
of_node_put(chip->of_node);
|
of_node_put(chip->of_node);
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,8 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
||||||
+ enum of_gpio_flags of_flags;
|
+ enum of_gpio_flags of_flags;
|
||||||
+
|
+
|
||||||
+ gpio = of_get_gpio_flags(cnp, i, &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)
|
+ if (of_flags == OF_GPIO_ACTIVE_LOW)
|
||||||
+ flags |= GPIOF_ACTIVE_LOW;
|
+ flags |= GPIOF_ACTIVE_LOW;
|
||||||
|
|
Loading…
Reference in a new issue