pinctrl: support gpio request deferred probing
authorDong Aisheng <dong.aisheng@linaro.org>
Wed, 25 Apr 2012 11:38:13 +0000 (19:38 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 1 May 2012 23:14:20 +0000 (01:14 +0200)
As pinctrl handles, it may be possible the pinctrl gpio ranges
are still not got registered when user call pinctrl_gpio_request.
Thus, add defer support for it too.

Signed-off-by: Dong Aisheng <dong.aisheng@linaro.org>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/core.c

index a6386b3a3c157c2dbd01573c713b6753a1a1c972..c3b331b74fa0a5702300745b0d6423a19d88d30a 100644 (file)
@@ -291,7 +291,8 @@ pinctrl_match_gpio_range(struct pinctrl_dev *pctldev, unsigned gpio)
  *
  * Find the pin controller handling a certain GPIO pin from the pinspace of
  * the GPIO subsystem, return the device and the matching GPIO range. Returns
- * negative if the GPIO range could not be found in any device.
+ * -EPROBE_DEFER if the GPIO range could not be found in any device since it
+ * may still have not been registered.
  */
 static int pinctrl_get_device_gpio_range(unsigned gpio,
                                         struct pinctrl_dev **outdev,
@@ -311,7 +312,7 @@ static int pinctrl_get_device_gpio_range(unsigned gpio,
                }
        }
 
-       return -EINVAL;
+       return -EPROBE_DEFER;
 }
 
 /**
@@ -397,7 +398,7 @@ int pinctrl_request_gpio(unsigned gpio)
        ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range);
        if (ret) {
                mutex_unlock(&pinctrl_mutex);
-               return -EINVAL;
+               return ret;
        }
 
        /* Convert to the pin controllers number space */