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

pwm: sprd: Simplify using devm_pwmchip_add() and dev_err_probe()

Using devm_pwmchip_add() allows to drop pwmchip_remove() from the remove
function which makes this function empty. Then there is no user of
drvdata left and platform_set_drvdata() can be dropped, too.

Further simplify and improve error returning using dev_err_probe().

Link: https://lore.kernel.org/r/20230929161918.2410424-9-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
21c0e1aa d8a2f6f2

+3 -14
+3 -14
drivers/pwm/pwm-sprd.c
··· 242 242 chn->clk_rate = clk_get_rate(clk_pwm); 243 243 } 244 244 245 - if (!i) { 246 - dev_err(spc->dev, "no available PWM channels\n"); 247 - return -ENODEV; 248 - } 245 + if (!i) 246 + return dev_err_probe(spc->dev, -ENODEV, "no available PWM channels\n"); 249 247 250 248 spc->num_pwms = i; 251 249 ··· 264 266 return PTR_ERR(spc->base); 265 267 266 268 spc->dev = &pdev->dev; 267 - platform_set_drvdata(pdev, spc); 268 269 269 270 ret = sprd_pwm_clk_init(spc); 270 271 if (ret) ··· 273 276 spc->chip.ops = &sprd_pwm_ops; 274 277 spc->chip.npwm = spc->num_pwms; 275 278 276 - ret = pwmchip_add(&spc->chip); 279 + ret = devm_pwmchip_add(&pdev->dev, &spc->chip); 277 280 if (ret) 278 281 dev_err(&pdev->dev, "failed to add PWM chip\n"); 279 282 280 283 return ret; 281 - } 282 - 283 - static void sprd_pwm_remove(struct platform_device *pdev) 284 - { 285 - struct sprd_pwm_chip *spc = platform_get_drvdata(pdev); 286 - 287 - pwmchip_remove(&spc->chip); 288 284 } 289 285 290 286 static const struct of_device_id sprd_pwm_of_match[] = { ··· 292 302 .of_match_table = sprd_pwm_of_match, 293 303 }, 294 304 .probe = sprd_pwm_probe, 295 - .remove_new = sprd_pwm_remove, 296 305 }; 297 306 298 307 module_platform_driver(sprd_pwm_driver);