diff options
Diffstat (limited to 'drivers/gpio/gpiolib.c')
| -rw-r--r-- | drivers/gpio/gpiolib.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index c2534d62911..a35c5b932eb 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -136,7 +136,7 @@ static struct gpio_desc *gpio_to_desc(unsigned gpio)   */  static int desc_to_gpio(const struct gpio_desc *desc)  { -	return desc->chip->base + gpio_chip_hwgpio(desc); +	return desc - &gpio_desc[0];  } @@ -1214,15 +1214,14 @@ int gpiochip_add(struct gpio_chip *chip)  		}  	} +	spin_unlock_irqrestore(&gpio_lock, flags); +  #ifdef CONFIG_PINCTRL  	INIT_LIST_HEAD(&chip->pin_ranges);  #endif  	of_gpiochip_add(chip); -unlock: -	spin_unlock_irqrestore(&gpio_lock, flags); -  	if (status)  		goto fail; @@ -1235,6 +1234,9 @@ unlock:  		chip->label ? : "generic");  	return 0; + +unlock: +	spin_unlock_irqrestore(&gpio_lock, flags);  fail:  	/* failures here can mean systems won't boot... */  	pr_err("gpiochip_add: gpios %d..%d (%s) failed to register\n",  |