diff options
Diffstat (limited to 'drivers/gpio/gpiolib.c')
| -rw-r--r-- | drivers/gpio/gpiolib.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 86ef3461ec06..dadbac277267 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];  } @@ -408,7 +408,7 @@ static int gpio_setup_irq(struct gpio_desc *desc, struct device *dev,  			IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING;  	if (!value_sd) { -		value_sd = sysfs_get_dirent(dev->kobj.sd, NULL, "value"); +		value_sd = sysfs_get_dirent(dev->kobj.sd, "value");  		if (!value_sd) {  			ret = -ENODEV;  			goto err_out; @@ -1398,7 +1398,7 @@ static int gpiod_request(struct gpio_desc *desc, const char *label)  	int			status = -EPROBE_DEFER;  	unsigned long		flags; -	if (!desc || !desc->chip) { +	if (!desc) {  		pr_warn("%s: invalid GPIO\n", __func__);  		return -EINVAL;  	} @@ -1406,6 +1406,8 @@ static int gpiod_request(struct gpio_desc *desc, const char *label)  	spin_lock_irqsave(&gpio_lock, flags);  	chip = desc->chip; +	if (chip == NULL) +		goto done;  	if (!try_module_get(chip->owner))  		goto done;  | 
