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

watchdog: lpc18xx: Use devm_clk_get_enabled() helper

The devm_clk_get_enabled() helper:
- calls devm_clk_get()
- calls clk_prepare_enable() and registers what is needed in order to
call clk_disable_unprepare() when needed, as a managed resource.

This simplifies the code and avoids the need of a dedicated function used
with devm_add_action_or_reset().

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/d4c675190d3ddfbba5c354edb4274757f9117304.1672489554.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>

authored by

Christophe JAILLET and committed by
Wim Van Sebroeck
5eb3fb95 e0912ea8

+2 -28
+2 -28
drivers/watchdog/lpc18xx_wdt.c
··· 197 197 .restart = lpc18xx_wdt_restart, 198 198 }; 199 199 200 - static void lpc18xx_clk_disable_unprepare(void *data) 201 - { 202 - clk_disable_unprepare(data); 203 - } 204 - 205 200 static int lpc18xx_wdt_probe(struct platform_device *pdev) 206 201 { 207 202 struct lpc18xx_wdt_dev *lpc18xx_wdt; 208 203 struct device *dev = &pdev->dev; 209 - int ret; 210 204 211 205 lpc18xx_wdt = devm_kzalloc(dev, sizeof(*lpc18xx_wdt), GFP_KERNEL); 212 206 if (!lpc18xx_wdt) ··· 210 216 if (IS_ERR(lpc18xx_wdt->base)) 211 217 return PTR_ERR(lpc18xx_wdt->base); 212 218 213 - lpc18xx_wdt->reg_clk = devm_clk_get(dev, "reg"); 219 + lpc18xx_wdt->reg_clk = devm_clk_get_enabled(dev, "reg"); 214 220 if (IS_ERR(lpc18xx_wdt->reg_clk)) { 215 221 dev_err(dev, "failed to get the reg clock\n"); 216 222 return PTR_ERR(lpc18xx_wdt->reg_clk); 217 223 } 218 224 219 - lpc18xx_wdt->wdt_clk = devm_clk_get(dev, "wdtclk"); 225 + lpc18xx_wdt->wdt_clk = devm_clk_get_enabled(dev, "wdtclk"); 220 226 if (IS_ERR(lpc18xx_wdt->wdt_clk)) { 221 227 dev_err(dev, "failed to get the wdt clock\n"); 222 228 return PTR_ERR(lpc18xx_wdt->wdt_clk); 223 229 } 224 - 225 - ret = clk_prepare_enable(lpc18xx_wdt->reg_clk); 226 - if (ret) { 227 - dev_err(dev, "could not prepare or enable sys clock\n"); 228 - return ret; 229 - } 230 - ret = devm_add_action_or_reset(dev, lpc18xx_clk_disable_unprepare, 231 - lpc18xx_wdt->reg_clk); 232 - if (ret) 233 - return ret; 234 - 235 - ret = clk_prepare_enable(lpc18xx_wdt->wdt_clk); 236 - if (ret) { 237 - dev_err(dev, "could not prepare or enable wdt clock\n"); 238 - return ret; 239 - } 240 - ret = devm_add_action_or_reset(dev, lpc18xx_clk_disable_unprepare, 241 - lpc18xx_wdt->wdt_clk); 242 - if (ret) 243 - return ret; 244 230 245 231 /* We use the clock rate to calculate timeouts */ 246 232 lpc18xx_wdt->clk_rate = clk_get_rate(lpc18xx_wdt->wdt_clk);