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

pwm: bcm-iproc: 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-2-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
b498c14e 8151b37b

+9 -28
+9 -28
drivers/pwm/pwm-bcm-iproc.c
··· 206 206 if (IS_ERR(ip->base)) 207 207 return PTR_ERR(ip->base); 208 208 209 - ip->clk = devm_clk_get(&pdev->dev, NULL); 210 - if (IS_ERR(ip->clk)) { 211 - dev_err(&pdev->dev, "failed to get clock: %ld\n", 212 - PTR_ERR(ip->clk)); 213 - return PTR_ERR(ip->clk); 214 - } 215 - 216 - ret = clk_prepare_enable(ip->clk); 217 - if (ret < 0) { 218 - dev_err(&pdev->dev, "failed to enable clock: %d\n", ret); 219 - return ret; 220 - } 209 + ip->clk = devm_clk_get_enabled(&pdev->dev, NULL); 210 + if (IS_ERR(ip->clk)) 211 + return dev_err_probe(&pdev->dev, PTR_ERR(ip->clk), 212 + "failed to get clock\n"); 221 213 222 214 /* Set full drive and normal polarity for all channels */ 223 215 value = readl(ip->base + IPROC_PWM_CTRL_OFFSET); ··· 221 229 222 230 writel(value, ip->base + IPROC_PWM_CTRL_OFFSET); 223 231 224 - ret = pwmchip_add(&ip->chip); 225 - if (ret < 0) { 226 - dev_err(&pdev->dev, "failed to add PWM chip: %d\n", ret); 227 - clk_disable_unprepare(ip->clk); 228 - } 232 + ret = devm_pwmchip_add(&pdev->dev, &ip->chip); 233 + if (ret < 0) 234 + return dev_err_probe(&pdev->dev, ret, 235 + "failed to add PWM chip\n"); 229 236 230 - return ret; 231 - } 232 - 233 - static void iproc_pwmc_remove(struct platform_device *pdev) 234 - { 235 - struct iproc_pwmc *ip = platform_get_drvdata(pdev); 236 - 237 - pwmchip_remove(&ip->chip); 238 - 239 - clk_disable_unprepare(ip->clk); 237 + return 0; 240 238 } 241 239 242 240 static const struct of_device_id bcm_iproc_pwmc_dt[] = { ··· 241 259 .of_match_table = bcm_iproc_pwmc_dt, 242 260 }, 243 261 .probe = iproc_pwmc_probe, 244 - .remove_new = iproc_pwmc_remove, 245 262 }; 246 263 module_platform_driver(iproc_pwmc_driver); 247 264