diff options
Diffstat (limited to 'drivers/gpio/gpiolib-of.c')
| -rw-r--r-- | drivers/gpio/gpiolib-of.c | 15 | 
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index 564bb7a31da4..84e5a9df2344 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -241,6 +241,19 @@ struct gpio_desc *of_find_gpio(struct device *dev, const char *con_id,  		desc = of_get_named_gpiod_flags(dev->of_node, prop_name, idx,  						&of_flags); +		/* +		 * -EPROBE_DEFER in our case means that we found a +		 * valid GPIO property, but no controller has been +		 * registered so far. +		 * +		 * This means we don't need to look any further for +		 * alternate name conventions, and we should really +		 * preserve the return code for our user to be able to +		 * retry probing later. +		 */ +		if (IS_ERR(desc) && PTR_ERR(desc) == -EPROBE_DEFER) +			return desc; +  		if (!IS_ERR(desc) || (PTR_ERR(desc) != -ENOENT))  			break;  	} @@ -250,7 +263,7 @@ struct gpio_desc *of_find_gpio(struct device *dev, const char *con_id,  		desc = of_find_spi_gpio(dev, con_id, &of_flags);  	/* Special handling for regulator GPIOs if used */ -	if (IS_ERR(desc)) +	if (IS_ERR(desc) && PTR_ERR(desc) != -EPROBE_DEFER)  		desc = of_find_regulator_gpio(dev, con_id, &of_flags);  	if (IS_ERR(desc))  |