diff options
Diffstat (limited to 'drivers/gpio/gpiolib-of.c')
-rw-r--r-- | drivers/gpio/gpiolib-of.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index d18068a9f3ec..a18c4aa68b1e 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c | |||
@@ -21,7 +21,7 @@ | |||
21 | #include <linux/of_gpio.h> | 21 | #include <linux/of_gpio.h> |
22 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
23 | 23 | ||
24 | /* Private data structure for of_gpiochip_is_match */ | 24 | /* Private data structure for of_gpiochip_find_and_xlate */ |
25 | struct gg_data { | 25 | struct gg_data { |
26 | enum of_gpio_flags *flags; | 26 | enum of_gpio_flags *flags; |
27 | struct of_phandle_args gpiospec; | 27 | struct of_phandle_args gpiospec; |
@@ -62,7 +62,10 @@ static int of_gpiochip_find_and_xlate(struct gpio_chip *gc, void *data) | |||
62 | int of_get_named_gpio_flags(struct device_node *np, const char *propname, | 62 | int of_get_named_gpio_flags(struct device_node *np, const char *propname, |
63 | int index, enum of_gpio_flags *flags) | 63 | int index, enum of_gpio_flags *flags) |
64 | { | 64 | { |
65 | struct gg_data gg_data = { .flags = flags, .out_gpio = -ENODEV }; | 65 | /* Return -EPROBE_DEFER to support probe() functions to be called |
66 | * later when the GPIO actually becomes available | ||
67 | */ | ||
68 | struct gg_data gg_data = { .flags = flags, .out_gpio = -EPROBE_DEFER }; | ||
66 | int ret; | 69 | int ret; |
67 | 70 | ||
68 | /* .of_xlate might decide to not fill in the flags, so clear it. */ | 71 | /* .of_xlate might decide to not fill in the flags, so clear it. */ |
@@ -73,7 +76,7 @@ int of_get_named_gpio_flags(struct device_node *np, const char *propname, | |||
73 | &gg_data.gpiospec); | 76 | &gg_data.gpiospec); |
74 | if (ret) { | 77 | if (ret) { |
75 | pr_debug("%s: can't parse gpios property\n", __func__); | 78 | pr_debug("%s: can't parse gpios property\n", __func__); |
76 | return -EINVAL; | 79 | return ret; |
77 | } | 80 | } |
78 | 81 | ||
79 | gpiochip_find(&gg_data, of_gpiochip_find_and_xlate); | 82 | gpiochip_find(&gg_data, of_gpiochip_find_and_xlate); |