gpiolib: Defer on non-DT find_chip_by_name() failure
Avoid replication of error code conversion in non-DT GPIO consumers' code by returning -EPROBE_DEFER from gpiod_find() in case a chip identified by its label in a registered lookup table is not ready. See https://lkml.org/lkml/2018/5/30/176 for example case. Suggested-by: Boris Brezillon <boris.brezillon@bootlin.com> Signed-off-by: Janusz Krzysztofik <jmkrzyszt@gmail.com> Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
36b312792b
commit
8853daf3b4
|
@ -3656,9 +3656,16 @@ static struct gpio_desc *gpiod_find(struct device *dev, const char *con_id,
|
|||
chip = find_chip_by_name(p->chip_label);
|
||||
|
||||
if (!chip) {
|
||||
dev_err(dev, "cannot find GPIO chip %s\n",
|
||||
p->chip_label);
|
||||
return ERR_PTR(-ENODEV);
|
||||
/*
|
||||
* As the lookup table indicates a chip with
|
||||
* p->chip_label should exist, assume it may
|
||||
* still appear later and let the interested
|
||||
* consumer be probed again or let the Deferred
|
||||
* Probe infrastructure handle the error.
|
||||
*/
|
||||
dev_warn(dev, "cannot find GPIO chip %s, deferring\n",
|
||||
p->chip_label);
|
||||
return ERR_PTR(-EPROBE_DEFER);
|
||||
}
|
||||
|
||||
if (chip->ngpio <= p->chip_hwnum) {
|
||||
|
|
Loading…
Reference in New Issue