diff options
| -rw-r--r-- | drivers/gpio/gpio-arizona.c | 1 | ||||
| -rw-r--r-- | drivers/gpio/gpio-dwapb.c | 2 | ||||
| -rw-r--r-- | drivers/gpio/gpio-eic-sprd.c | 2 | ||||
| -rw-r--r-- | drivers/gpio/gpio-mvebu.c | 16 | ||||
| -rw-r--r-- | drivers/gpio/gpio-zynq.c | 4 | ||||
| -rw-r--r-- | drivers/gpio/gpiolib.c | 5 | 
6 files changed, 22 insertions, 8 deletions
| diff --git a/drivers/gpio/gpio-arizona.c b/drivers/gpio/gpio-arizona.c index 5bda38e0780f..2bc173c352ce 100644 --- a/drivers/gpio/gpio-arizona.c +++ b/drivers/gpio/gpio-arizona.c @@ -192,6 +192,7 @@ static int arizona_gpio_probe(struct platform_device *pdev)  	ret = devm_gpiochip_add_data(&pdev->dev, &arizona_gpio->gpio_chip,  				     arizona_gpio);  	if (ret < 0) { +		pm_runtime_disable(&pdev->dev);  		dev_err(&pdev->dev, "Could not register gpiochip, %d\n",  			ret);  		return ret; diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c index 2a9046c0fb16..4275c18a097a 100644 --- a/drivers/gpio/gpio-dwapb.c +++ b/drivers/gpio/gpio-dwapb.c @@ -724,6 +724,8 @@ static int dwapb_gpio_probe(struct platform_device *pdev)  			return err;  	} +	platform_set_drvdata(pdev, gpio); +  	return 0;  } diff --git a/drivers/gpio/gpio-eic-sprd.c b/drivers/gpio/gpio-eic-sprd.c index ad61daf6c212..865ab2b34fdd 100644 --- a/drivers/gpio/gpio-eic-sprd.c +++ b/drivers/gpio/gpio-eic-sprd.c @@ -598,7 +598,7 @@ static int sprd_eic_probe(struct platform_device *pdev)  		 */  		res = platform_get_resource(pdev, IORESOURCE_MEM, i);  		if (!res) -			continue; +			break;  		sprd_eic->base[i] = devm_ioremap_resource(&pdev->dev, res);  		if (IS_ERR(sprd_eic->base[i])) diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c index 433e2c3f3fd5..2f245594a90a 100644 --- a/drivers/gpio/gpio-mvebu.c +++ b/drivers/gpio/gpio-mvebu.c @@ -1197,6 +1197,13 @@ static int mvebu_gpio_probe(struct platform_device *pdev)  	devm_gpiochip_add_data(&pdev->dev, &mvchip->chip, mvchip); +	/* Some MVEBU SoCs have simple PWM support for GPIO lines */ +	if (IS_ENABLED(CONFIG_PWM)) { +		err = mvebu_pwm_probe(pdev, mvchip, id); +		if (err) +			return err; +	} +  	/* Some gpio controllers do not provide irq support */  	if (!have_irqs)  		return 0; @@ -1206,7 +1213,8 @@ static int mvebu_gpio_probe(struct platform_device *pdev)  	if (!mvchip->domain) {  		dev_err(&pdev->dev, "couldn't allocate irq domain %s (DT).\n",  			mvchip->chip.label); -		return -ENODEV; +		err = -ENODEV; +		goto err_pwm;  	}  	err = irq_alloc_domain_generic_chips( @@ -1254,14 +1262,12 @@ static int mvebu_gpio_probe(struct platform_device *pdev)  						 mvchip);  	} -	/* Some MVEBU SoCs have simple PWM support for GPIO lines */ -	if (IS_ENABLED(CONFIG_PWM)) -		return mvebu_pwm_probe(pdev, mvchip, id); -  	return 0;  err_domain:  	irq_domain_remove(mvchip->domain); +err_pwm: +	pwmchip_remove(&mvchip->mvpwm->chip);  	return err;  } diff --git a/drivers/gpio/gpio-zynq.c b/drivers/gpio/gpio-zynq.c index 0b5a17ab996f..3521c1dc3ac0 100644 --- a/drivers/gpio/gpio-zynq.c +++ b/drivers/gpio/gpio-zynq.c @@ -574,7 +574,7 @@ static int zynq_gpio_irq_reqres(struct irq_data *d)  	struct gpio_chip *chip = irq_data_get_irq_chip_data(d);  	int ret; -	ret = pm_runtime_get_sync(chip->parent); +	ret = pm_runtime_resume_and_get(chip->parent);  	if (ret < 0)  		return ret; @@ -942,7 +942,7 @@ static int zynq_gpio_probe(struct platform_device *pdev)  	pm_runtime_set_active(&pdev->dev);  	pm_runtime_enable(&pdev->dev); -	ret = pm_runtime_get_sync(&pdev->dev); +	ret = pm_runtime_resume_and_get(&pdev->dev);  	if (ret < 0)  		goto err_pm_dis; diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 089ddcaa9bc6..6e3c4d7a7d14 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -1806,6 +1806,11 @@ EXPORT_SYMBOL_GPL(gpiochip_generic_request);   */  void gpiochip_generic_free(struct gpio_chip *gc, unsigned offset)  { +#ifdef CONFIG_PINCTRL +	if (list_empty(&gc->gpiodev->pin_ranges)) +		return; +#endif +  	pinctrl_gpio_free(gc->gpiodev->base + offset);  }  EXPORT_SYMBOL_GPL(gpiochip_generic_free); | 
