diff options
author | Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> | 2015-04-15 00:53:16 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-04-17 07:23:46 +0200 |
commit | 9744da2e2b073102bf84438f073352339c1047ce (patch) | |
tree | 693e9110f3adcf31f219f47ac87dd5377914dc75 /drivers/gpio | |
parent | ab3da15bc14cc5297b2da27eb3dcd8d70dac41df (diff) | |
download | barebox-9744da2e2b073102bf84438f073352339c1047ce.tar.gz barebox-9744da2e2b073102bf84438f073352339c1047ce.tar.xz |
gpio: Return -EPROBE_DEFER on gpio_get_num()
GPIO drivers can be registered quite late in registration process
causing dependant devices to fail probing. If we know gpio_get_num
will be called with a non-NULL device, return -EPROBE_DEFER instead
of -ENODEV to allow re-probing later.
Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/gpio')
-rw-r--r-- | drivers/gpio/gpiolib.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 611e41ea56..1f57c76ec1 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -292,12 +292,15 @@ int gpio_get_num(struct device_d *dev, int gpio) { struct gpio_chip *chip; + if (!dev) + return -ENODEV; + list_for_each_entry(chip, &chip_list, list) { if (chip->dev == dev) return chip->base + gpio; } - return -ENODEV; + return -EPROBE_DEFER; } #ifdef CONFIG_CMD_GPIO |