Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pwm: brcmstb: Simplify using devm functions

With devm_clk_get_enabled() the call to clk_disable_unprepare() can be
dropped from the error path and the remove callback. With
devm_pwmchip_add() pwmchip_remove() can be dropped. Then the remove
callback is empty and can go away, too.

Also use dev_err_probe() for simplified (and improved) error reporting.

Link: https://lore.kernel.org/r/20230929161918.2410424-4-u.kleine-koenig@pengutronix.de
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>

authored by

Uwe Kleine-König and committed by
Thierry Reding
5af615f8 2ce7b7f6

+9 -33
+9 -33
drivers/pwm/pwm-brcmstb.c
··· 237 237 if (!p) 238 238 return -ENOMEM; 239 239 240 - p->clk = devm_clk_get(&pdev->dev, NULL); 241 - if (IS_ERR(p->clk)) { 242 - dev_err(&pdev->dev, "failed to obtain clock\n"); 243 - return PTR_ERR(p->clk); 244 - } 245 - 246 - ret = clk_prepare_enable(p->clk); 247 - if (ret < 0) { 248 - dev_err(&pdev->dev, "failed to enable clock: %d\n", ret); 249 - return ret; 250 - } 240 + p->clk = devm_clk_get_enabled(&pdev->dev, NULL); 241 + if (IS_ERR(p->clk)) 242 + return dev_err_probe(&pdev->dev, PTR_ERR(p->clk), 243 + "failed to obtain clock\n"); 251 244 252 245 platform_set_drvdata(pdev, p); 253 246 ··· 249 256 p->chip.npwm = 2; 250 257 251 258 p->base = devm_platform_ioremap_resource(pdev, 0); 252 - if (IS_ERR(p->base)) { 253 - ret = PTR_ERR(p->base); 254 - goto out_clk; 255 - } 259 + if (IS_ERR(p->base)) 260 + return PTR_ERR(p->base); 256 261 257 - ret = pwmchip_add(&p->chip); 258 - if (ret) { 259 - dev_err(&pdev->dev, "failed to add PWM chip: %d\n", ret); 260 - goto out_clk; 261 - } 262 + ret = devm_pwmchip_add(&pdev->dev, &p->chip); 263 + if (ret) 264 + return dev_err_probe(&pdev->dev, ret, "failed to add PWM chip\n"); 262 265 263 266 return 0; 264 - 265 - out_clk: 266 - clk_disable_unprepare(p->clk); 267 - return ret; 268 - } 269 - 270 - static void brcmstb_pwm_remove(struct platform_device *pdev) 271 - { 272 - struct brcmstb_pwm *p = platform_get_drvdata(pdev); 273 - 274 - pwmchip_remove(&p->chip); 275 - clk_disable_unprepare(p->clk); 276 267 } 277 268 278 269 #ifdef CONFIG_PM_SLEEP ··· 284 307 285 308 static struct platform_driver brcmstb_pwm_driver = { 286 309 .probe = brcmstb_pwm_probe, 287 - .remove_new = brcmstb_pwm_remove, 288 310 .driver = { 289 311 .name = "pwm-brcmstb", 290 312 .of_match_table = brcmstb_pwm_of_match,