gpio: sch311x: Use devm_gpiochip_add_data() to simplify remove path
PATCH v3 1/1 gpio: sch311x: Use devm_gpiochip_add_data() to simplify remove path
Use devm version of gpiochip add function to handle removal for us.
---
Changes from v2:
- Remove platform_driver.remove (thanks kernel test robot)
drivers/gpio/gpio-sch311x.c | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-)
drivers/gpio/gpio-sch311x.c +2 -24
@@ -281,8 +281,6 @@ static int sch311x_gpio_probe(struct platform_device *pdev)if (!priv)return -ENOMEM ; -platform_set_drvdata (pdev, priv); -for (i =0 ; i <ARRAY_SIZE (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->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 ) {dev_err (&pdev->dev,"Could not register gpiochip, %d\n" , err); - goto exit_err; +return err; }dev_info (&pdev->dev,"SMSC SCH311x GPIO block %d registered.\n" , i); }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 = { .driver.name =DRV_NAME , .probe = sch311x_gpio_probe, - .remove = sch311x_gpio_remove, };
Signature · 1 line
2.39.2
Quoted 2 lines · Andrew Davis
Use devm version of gpiochip add function to handle removal for us.
...version of gpiochip_add() function...
...
drivers/gpio/gpio-sch311x.c static int sch311x_gpio_probe(struct platform_device *pdev) · line 310
Quoted 6 lines
drivers/gpio/gpio-sch311x.c +2
-1+ err =devm_gpiochip_add_data (&pdev->dev, &block->chip, block);if (err <0 ) {dev_err (&pdev->dev,"Could not register gpiochip, %d\n" , err); - goto exit_err; +return err;
With this applied you can consider a followup to have this be converted to use
return dev_err_probe(...);
here and in other ->probe() related pieces.
Quoted 1 line
}
Signature · 2 lines
With Best Regards, Andy Shevchenko
Quoted 15 lines · Andy Shevchenko
Quoted 2 lines · Andrew Davis
Use devm version of gpiochip add function to handle removal for us.
...version of
gpiochip_add()function......
drivers/gpio/gpio-sch311x.c static int sch311x_gpio_probe(struct platform_device *pdev) · line 310
Quoted 6 lines
drivers/gpio/gpio-sch311x.c +2
-1+ err =devm_gpiochip_add_data (&pdev->dev, &block->chip, block);if (err <0 ) {dev_err (&pdev->dev,"Could not register gpiochip, %d\n" , err); - goto exit_err; +return err;
Quoted 6 lines
With this applied you can consider a followup to have this be converted to use
return dev_err_probe(...);here and in other ->probe() related pieces.
Sure, I can add that cleanup to my list.
Or maybe Coccinelle can help do this everywhere, will have to look into that.
Andrew
Quoted 2 lines
Quoted 1 line
}
Bartosz Golaszewski
AppliedQuoted 5 lines · Andrew Davis
Use devm version of gpiochip add function to handle removal for us.
Signed-off-by Andrew Davis <[email protected]>---
Applied, thanks!
Bart