Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target...
[firefly-linux-kernel-4.4.55.git] / drivers / gpio / gpiolib-of.c
index d18068a9f3ecf18aaf0a0106ca7c1b4c752d25c9..a18c4aa68b1e8dcfadd5340e3f076bf33ecb788f 100644 (file)
@@ -21,7 +21,7 @@
 #include <linux/of_gpio.h>
 #include <linux/slab.h>
 
-/* Private data structure for of_gpiochip_is_match */
+/* Private data structure for of_gpiochip_find_and_xlate */
 struct gg_data {
        enum of_gpio_flags *flags;
        struct of_phandle_args gpiospec;
@@ -62,7 +62,10 @@ static int of_gpiochip_find_and_xlate(struct gpio_chip *gc, void *data)
 int of_get_named_gpio_flags(struct device_node *np, const char *propname,
                            int index, enum of_gpio_flags *flags)
 {
-       struct gg_data gg_data = { .flags = flags, .out_gpio = -ENODEV };
+       /* Return -EPROBE_DEFER to support probe() functions to be called
+        * later when the GPIO actually becomes available
+        */
+       struct gg_data gg_data = { .flags = flags, .out_gpio = -EPROBE_DEFER };
        int ret;
 
        /* .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,
                                         &gg_data.gpiospec);
        if (ret) {
                pr_debug("%s: can't parse gpios property\n", __func__);
-               return -EINVAL;
+               return ret;
        }
 
        gpiochip_find(&gg_data, of_gpiochip_find_and_xlate);