summaryrefslogtreecommitdiffstats
path: root/drivers/gpio
diff options
context:
space:
mode:
authorSebastian Hesselbarth <sebastian.hesselbarth@gmail.com>2015-04-15 00:53:16 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2015-04-17 07:23:46 +0200
commit9744da2e2b073102bf84438f073352339c1047ce (patch)
tree693e9110f3adcf31f219f47ac87dd5377914dc75 /drivers/gpio
parentab3da15bc14cc5297b2da27eb3dcd8d70dac41df (diff)
downloadbarebox-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.c5
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