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

pwm: bcm2835: 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. With bcm2835_pwm_remove() the only
user of platform_get_drvdata() is gone and so platform_set_drvdata() can
be dropped from .probe(), too.

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

Link: https://lore.kernel.org/r/20230929161918.2410424-3-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
2ce7b7f6 b498c14e

+4 -23
+4 -23
drivers/pwm/pwm-bcm2835.c
··· 146 146 if (IS_ERR(pc->base)) 147 147 return PTR_ERR(pc->base); 148 148 149 - pc->clk = devm_clk_get(&pdev->dev, NULL); 149 + pc->clk = devm_clk_get_enabled(&pdev->dev, NULL); 150 150 if (IS_ERR(pc->clk)) 151 151 return dev_err_probe(&pdev->dev, PTR_ERR(pc->clk), 152 152 "clock not found\n"); 153 - 154 - ret = clk_prepare_enable(pc->clk); 155 - if (ret) 156 - return ret; 157 153 158 154 pc->chip.dev = &pdev->dev; 159 155 pc->chip.ops = &bcm2835_pwm_ops; 160 156 pc->chip.npwm = 2; 161 157 162 - platform_set_drvdata(pdev, pc); 163 - 164 - ret = pwmchip_add(&pc->chip); 158 + ret = devm_pwmchip_add(&pdev->dev, &pc->chip); 165 159 if (ret < 0) 166 - goto add_fail; 160 + return dev_err_probe(&pdev->dev, ret, 161 + "failed to add pwmchip\n"); 167 162 168 163 return 0; 169 - 170 - add_fail: 171 - clk_disable_unprepare(pc->clk); 172 - return ret; 173 - } 174 - 175 - static void bcm2835_pwm_remove(struct platform_device *pdev) 176 - { 177 - struct bcm2835_pwm *pc = platform_get_drvdata(pdev); 178 - 179 - pwmchip_remove(&pc->chip); 180 - 181 - clk_disable_unprepare(pc->clk); 182 164 } 183 165 184 166 static const struct of_device_id bcm2835_pwm_of_match[] = { ··· 175 193 .of_match_table = bcm2835_pwm_of_match, 176 194 }, 177 195 .probe = bcm2835_pwm_probe, 178 - .remove_new = bcm2835_pwm_remove, 179 196 }; 180 197 module_platform_driver(bcm2835_pwm_driver); 181 198