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

pwm: imx-tpm: 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-5-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
92fcd5b6 5af615f8

+5 -24
+5 -24
drivers/pwm/pwm-imx-tpm.c
··· 350 350 if (IS_ERR(tpm->base)) 351 351 return PTR_ERR(tpm->base); 352 352 353 - tpm->clk = devm_clk_get(&pdev->dev, NULL); 353 + tpm->clk = devm_clk_get_enabled(&pdev->dev, NULL); 354 354 if (IS_ERR(tpm->clk)) 355 355 return dev_err_probe(&pdev->dev, PTR_ERR(tpm->clk), 356 356 "failed to get PWM clock\n"); 357 - 358 - ret = clk_prepare_enable(tpm->clk); 359 - if (ret) { 360 - dev_err(&pdev->dev, 361 - "failed to prepare or enable clock: %d\n", ret); 362 - return ret; 363 - } 364 357 365 358 tpm->chip.dev = &pdev->dev; 366 359 tpm->chip.ops = &imx_tpm_pwm_ops; ··· 364 371 365 372 mutex_init(&tpm->lock); 366 373 367 - ret = pwmchip_add(&tpm->chip); 368 - if (ret) { 369 - dev_err(&pdev->dev, "failed to add PWM chip: %d\n", ret); 370 - clk_disable_unprepare(tpm->clk); 371 - } 374 + ret = devm_pwmchip_add(&pdev->dev, &tpm->chip); 375 + if (ret) 376 + return dev_err_probe(&pdev->dev, ret, "failed to add PWM chip\n"); 372 377 373 - return ret; 374 - } 375 - 376 - static void pwm_imx_tpm_remove(struct platform_device *pdev) 377 - { 378 - struct imx_tpm_pwm_chip *tpm = platform_get_drvdata(pdev); 379 - 380 - pwmchip_remove(&tpm->chip); 381 - 382 - clk_disable_unprepare(tpm->clk); 378 + return 0; 383 379 } 384 380 385 381 static int __maybe_unused pwm_imx_tpm_suspend(struct device *dev) ··· 418 436 .pm = &imx_tpm_pwm_pm, 419 437 }, 420 438 .probe = pwm_imx_tpm_probe, 421 - .remove_new = pwm_imx_tpm_remove, 422 439 }; 423 440 module_platform_driver(imx_tpm_pwm_driver); 424 441