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

watchdog: imgpdc: 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/1f8d1ce1e6a63c507a291aea624b1337326cc563.1672483996.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
c4b8e92b 4de0224c

+3 -28
+3 -28
drivers/watchdog/imgpdc_wdt.c
··· 175 175 .restart = pdc_wdt_restart, 176 176 }; 177 177 178 - static void pdc_clk_disable_unprepare(void *data) 179 - { 180 - clk_disable_unprepare(data); 181 - } 182 - 183 178 static int pdc_wdt_probe(struct platform_device *pdev) 184 179 { 185 180 struct device *dev = &pdev->dev; 186 181 u64 div; 187 - int ret, val; 182 + int val; 188 183 unsigned long clk_rate; 189 184 struct pdc_wdt_dev *pdc_wdt; 190 185 ··· 191 196 if (IS_ERR(pdc_wdt->base)) 192 197 return PTR_ERR(pdc_wdt->base); 193 198 194 - pdc_wdt->sys_clk = devm_clk_get(dev, "sys"); 199 + pdc_wdt->sys_clk = devm_clk_get_enabled(dev, "sys"); 195 200 if (IS_ERR(pdc_wdt->sys_clk)) { 196 201 dev_err(dev, "failed to get the sys clock\n"); 197 202 return PTR_ERR(pdc_wdt->sys_clk); 198 203 } 199 204 200 - pdc_wdt->wdt_clk = devm_clk_get(dev, "wdt"); 205 + pdc_wdt->wdt_clk = devm_clk_get_enabled(dev, "wdt"); 201 206 if (IS_ERR(pdc_wdt->wdt_clk)) { 202 207 dev_err(dev, "failed to get the wdt clock\n"); 203 208 return PTR_ERR(pdc_wdt->wdt_clk); 204 209 } 205 - 206 - ret = clk_prepare_enable(pdc_wdt->sys_clk); 207 - if (ret) { 208 - dev_err(dev, "could not prepare or enable sys clock\n"); 209 - return ret; 210 - } 211 - ret = devm_add_action_or_reset(dev, pdc_clk_disable_unprepare, 212 - pdc_wdt->sys_clk); 213 - if (ret) 214 - return ret; 215 - 216 - ret = clk_prepare_enable(pdc_wdt->wdt_clk); 217 - if (ret) { 218 - dev_err(dev, "could not prepare or enable wdt clock\n"); 219 - return ret; 220 - } 221 - ret = devm_add_action_or_reset(dev, pdc_clk_disable_unprepare, 222 - pdc_wdt->wdt_clk); 223 - if (ret) 224 - return ret; 225 210 226 211 /* We use the clock rate to calculate the max timeout */ 227 212 clk_rate = clk_get_rate(pdc_wdt->wdt_clk);