mirror of
https://github.com/torvalds/linux.git
synced 2025-04-12 16:47:42 +00:00
gpio: sch311x: Use devm_gpiochip_add_data() to simplify remove path
Use devm version of gpiochip_add() function to handle removal for us. Signed-off-by: Andrew Davis <afd@ti.com> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
parent
81b010990b
commit
4cf381bf8e
@ -281,8 +281,6 @@ static int sch311x_gpio_probe(struct platform_device *pdev)
|
|||||||
if (!priv)
|
if (!priv)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
platform_set_drvdata(pdev, priv);
|
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(priv->blocks); i++) {
|
for (i = 0; i < ARRAY_SIZE(priv->blocks); i++) {
|
||||||
block = &priv->blocks[i];
|
block = &priv->blocks[i];
|
||||||
|
|
||||||
@ -305,42 +303,22 @@ static int sch311x_gpio_probe(struct platform_device *pdev)
|
|||||||
block->data_reg = sch311x_gpio_blocks[i].data_reg;
|
block->data_reg = sch311x_gpio_blocks[i].data_reg;
|
||||||
block->runtime_reg = pdata->runtime_reg;
|
block->runtime_reg = pdata->runtime_reg;
|
||||||
|
|
||||||
err = gpiochip_add_data(&block->chip, block);
|
err = devm_gpiochip_add_data(&pdev->dev, &block->chip, block);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
dev_err(&pdev->dev,
|
dev_err(&pdev->dev,
|
||||||
"Could not register gpiochip, %d\n", err);
|
"Could not register gpiochip, %d\n", err);
|
||||||
goto exit_err;
|
return err;
|
||||||
}
|
}
|
||||||
dev_info(&pdev->dev,
|
dev_info(&pdev->dev,
|
||||||
"SMSC SCH311x GPIO block %d registered.\n", i);
|
"SMSC SCH311x GPIO block %d registered.\n", i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
exit_err:
|
|
||||||
/* release already registered chips */
|
|
||||||
for (--i; i >= 0; i--)
|
|
||||||
gpiochip_remove(&priv->blocks[i].chip);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int sch311x_gpio_remove(struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
struct sch311x_gpio_priv *priv = platform_get_drvdata(pdev);
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(priv->blocks); i++) {
|
|
||||||
gpiochip_remove(&priv->blocks[i].chip);
|
|
||||||
dev_info(&pdev->dev,
|
|
||||||
"SMSC SCH311x GPIO block %d unregistered.\n", i);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver sch311x_gpio_driver = {
|
static struct platform_driver sch311x_gpio_driver = {
|
||||||
.driver.name = DRV_NAME,
|
.driver.name = DRV_NAME,
|
||||||
.probe = sch311x_gpio_probe,
|
.probe = sch311x_gpio_probe,
|
||||||
.remove = sch311x_gpio_remove,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user