diff options
| -rw-r--r-- | drivers/pinctrl/samsung/pinctrl-samsung.c | 36 | 
1 files changed, 18 insertions, 18 deletions
| diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c b/drivers/pinctrl/samsung/pinctrl-samsung.c index f9ddba7decc1..5d5337072350 100644 --- a/drivers/pinctrl/samsung/pinctrl-samsung.c +++ b/drivers/pinctrl/samsung/pinctrl-samsung.c @@ -884,7 +884,7 @@ static int samsung_pinctrl_register(struct platform_device *pdev,  		pin_bank->grange.id = bank;  		pin_bank->grange.pin_base = drvdata->pin_base  						+ pin_bank->pin_base; -		pin_bank->grange.base = pin_bank->gpio_chip.base; +		pin_bank->grange.base = pin_bank->grange.pin_base;  		pin_bank->grange.npins = pin_bank->gpio_chip.ngpio;  		pin_bank->grange.gc = &pin_bank->gpio_chip;  		pinctrl_add_gpio_range(drvdata->pctl_dev, &pin_bank->grange); @@ -893,6 +893,19 @@ static int samsung_pinctrl_register(struct platform_device *pdev,  	return 0;  } +/* unregister the pinctrl interface with the pinctrl subsystem */ +static int samsung_pinctrl_unregister(struct platform_device *pdev, +				      struct samsung_pinctrl_drv_data *drvdata) +{ +	struct samsung_pin_bank *bank = drvdata->pin_banks; +	int i; + +	for (i = 0; i < drvdata->nr_banks; ++i, ++bank) +		pinctrl_remove_gpio_range(drvdata->pctl_dev, &bank->grange); + +	return 0; +} +  static const struct gpio_chip samsung_gpiolib_chip = {  	.request = gpiochip_generic_request,  	.free = gpiochip_generic_free, @@ -917,7 +930,7 @@ static int samsung_gpiolib_register(struct platform_device *pdev,  		bank->gpio_chip = samsung_gpiolib_chip;  		gc = &bank->gpio_chip; -		gc->base = drvdata->pin_base + bank->pin_base; +		gc->base = bank->grange.base;  		gc->ngpio = bank->nr_pins;  		gc->parent = &pdev->dev;  		gc->of_node = bank->of_node; @@ -939,19 +952,6 @@ fail:  	return ret;  } -/* unregister the gpiolib interface with the gpiolib subsystem */ -static int samsung_gpiolib_unregister(struct platform_device *pdev, -				      struct samsung_pinctrl_drv_data *drvdata) -{ -	struct samsung_pin_bank *bank = drvdata->pin_banks; -	int i; - -	for (i = 0; i < drvdata->nr_banks; ++i, ++bank) -		gpiochip_remove(&bank->gpio_chip); - -	return 0; -} -  /* retrieve the soc specific data */  static const struct samsung_pin_ctrl *  samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d, @@ -1062,13 +1062,13 @@ static int samsung_pinctrl_probe(struct platform_device *pdev)  			return PTR_ERR(drvdata->retention_ctrl);  	} -	ret = samsung_gpiolib_register(pdev, drvdata); +	ret = samsung_pinctrl_register(pdev, drvdata);  	if (ret)  		return ret; -	ret = samsung_pinctrl_register(pdev, drvdata); +	ret = samsung_gpiolib_register(pdev, drvdata);  	if (ret) { -		samsung_gpiolib_unregister(pdev, drvdata); +		samsung_pinctrl_unregister(pdev, drvdata);  		return ret;  	} | 
