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

watchdog: sprd_wdt: Convert to use device managed functions and other improvements

Use device managed functions to simplify error handling, reduce
source code size, improve readability, and reduce the likelyhood of bugs.
Other improvements as listed below.

The conversion was done automatically with coccinelle using the
following semantic patches. The semantic patches and the scripts
used to generate this commit log are available at
https://github.com/groeck/coccinelle-patches

- Replace devm_add_action() followed by failure action with
devm_add_action_or_reset()
- Replace 'val = e; return val;' with 'return e;'
- Introduce local variable 'struct device *dev' and use it instead of
dereferencing it repeatedly
- Use devm_watchdog_register_driver() to register watchdog device

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>

authored by

Guenter Roeck and committed by
Wim Van Sebroeck
78d9bfad 72dbc27c

+18 -20
+18 -20
drivers/watchdog/sprd_wdt.c
··· 245 245 u32 val; 246 246 247 247 val = sprd_wdt_get_cnt_value(wdt); 248 - val = val / SPRD_WDT_CNT_STEP; 249 - 250 - return val; 248 + return val / SPRD_WDT_CNT_STEP; 251 249 } 252 250 253 251 static const struct watchdog_ops sprd_wdt_ops = { ··· 267 269 268 270 static int sprd_wdt_probe(struct platform_device *pdev) 269 271 { 272 + struct device *dev = &pdev->dev; 270 273 struct sprd_wdt *wdt; 271 274 int ret; 272 275 273 - wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); 276 + wdt = devm_kzalloc(dev, sizeof(*wdt), GFP_KERNEL); 274 277 if (!wdt) 275 278 return -ENOMEM; 276 279 ··· 279 280 if (IS_ERR(wdt->base)) 280 281 return PTR_ERR(wdt->base); 281 282 282 - wdt->enable = devm_clk_get(&pdev->dev, "enable"); 283 + wdt->enable = devm_clk_get(dev, "enable"); 283 284 if (IS_ERR(wdt->enable)) { 284 - dev_err(&pdev->dev, "can't get the enable clock\n"); 285 + dev_err(dev, "can't get the enable clock\n"); 285 286 return PTR_ERR(wdt->enable); 286 287 } 287 288 288 - wdt->rtc_enable = devm_clk_get(&pdev->dev, "rtc_enable"); 289 + wdt->rtc_enable = devm_clk_get(dev, "rtc_enable"); 289 290 if (IS_ERR(wdt->rtc_enable)) { 290 - dev_err(&pdev->dev, "can't get the rtc enable clock\n"); 291 + dev_err(dev, "can't get the rtc enable clock\n"); 291 292 return PTR_ERR(wdt->rtc_enable); 292 293 } 293 294 294 295 wdt->irq = platform_get_irq(pdev, 0); 295 296 if (wdt->irq < 0) { 296 - dev_err(&pdev->dev, "failed to get IRQ resource\n"); 297 + dev_err(dev, "failed to get IRQ resource\n"); 297 298 return wdt->irq; 298 299 } 299 300 300 - ret = devm_request_irq(&pdev->dev, wdt->irq, sprd_wdt_isr, 301 - IRQF_NO_SUSPEND, "sprd-wdt", (void *)wdt); 301 + ret = devm_request_irq(dev, wdt->irq, sprd_wdt_isr, IRQF_NO_SUSPEND, 302 + "sprd-wdt", (void *)wdt); 302 303 if (ret) { 303 - dev_err(&pdev->dev, "failed to register irq\n"); 304 + dev_err(dev, "failed to register irq\n"); 304 305 return ret; 305 306 } 306 307 307 308 wdt->wdd.info = &sprd_wdt_info; 308 309 wdt->wdd.ops = &sprd_wdt_ops; 309 - wdt->wdd.parent = &pdev->dev; 310 + wdt->wdd.parent = dev; 310 311 wdt->wdd.min_timeout = SPRD_WDT_MIN_TIMEOUT; 311 312 wdt->wdd.max_timeout = SPRD_WDT_MAX_TIMEOUT; 312 313 wdt->wdd.timeout = SPRD_WDT_MAX_TIMEOUT; 313 314 314 315 ret = sprd_wdt_enable(wdt); 315 316 if (ret) { 316 - dev_err(&pdev->dev, "failed to enable wdt\n"); 317 + dev_err(dev, "failed to enable wdt\n"); 317 318 return ret; 318 319 } 319 - ret = devm_add_action(&pdev->dev, sprd_wdt_disable, wdt); 320 + ret = devm_add_action_or_reset(dev, sprd_wdt_disable, wdt); 320 321 if (ret) { 321 - sprd_wdt_disable(wdt); 322 - dev_err(&pdev->dev, "Failed to add wdt disable action\n"); 322 + dev_err(dev, "Failed to add wdt disable action\n"); 323 323 return ret; 324 324 } 325 325 326 326 watchdog_set_nowayout(&wdt->wdd, WATCHDOG_NOWAYOUT); 327 - watchdog_init_timeout(&wdt->wdd, 0, &pdev->dev); 327 + watchdog_init_timeout(&wdt->wdd, 0, dev); 328 328 329 - ret = devm_watchdog_register_device(&pdev->dev, &wdt->wdd); 329 + ret = devm_watchdog_register_device(dev, &wdt->wdd); 330 330 if (ret) { 331 331 sprd_wdt_disable(wdt); 332 - dev_err(&pdev->dev, "failed to register watchdog\n"); 332 + dev_err(dev, "failed to register watchdog\n"); 333 333 return ret; 334 334 } 335 335 platform_set_drvdata(pdev, wdt);