diff options
| -rw-r--r-- | drivers/gpio/gpiolib.c | 18 | 
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 3ca36542e33..713ca0e37f2 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -1101,14 +1101,20 @@ int gpiochip_add(struct gpio_chip *chip)  unlock:  	spin_unlock_irqrestore(&gpio_lock, flags); -	if (status == 0) -		status = gpiochip_export(chip); + +	if (status) +		goto fail; + +	status = gpiochip_export(chip); +	if (status) +		goto fail; + +	return 0;  fail:  	/* failures here can mean systems won't boot... */ -	if (status) -		pr_err("gpiochip_add: gpios %d..%d (%s) failed to register\n", -			chip->base, chip->base + chip->ngpio - 1, -			chip->label ? : "generic"); +	pr_err("gpiochip_add: gpios %d..%d (%s) failed to register\n", +		chip->base, chip->base + chip->ngpio - 1, +		chip->label ? : "generic");  	return status;  }  EXPORT_SYMBOL_GPL(gpiochip_add);  |