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

watchdog: s3c2410_wdt: Use devm_* functions

Use devm_* functions to make cleanup paths more simple.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>

authored by

Jingoo Han and committed by
Wim Van Sebroeck
04ecc7dc e4504dab

+9 -33
+9 -33
drivers/watchdog/s3c2410_wdt.c
··· 309 309 unsigned int wtcon; 310 310 int started = 0; 311 311 int ret; 312 - int size; 313 312 314 313 DBG("%s: probe=%p\n", __func__, pdev); 315 314 ··· 329 330 } 330 331 331 332 /* get the memory region for the watchdog timer */ 332 - 333 - size = resource_size(wdt_mem); 334 - if (!request_mem_region(wdt_mem->start, size, pdev->name)) { 335 - dev_err(dev, "failed to get memory region\n"); 336 - ret = -EBUSY; 337 - goto err; 338 - } 339 - 340 - wdt_base = ioremap(wdt_mem->start, size); 333 + wdt_base = devm_request_and_ioremap(dev, wdt_mem); 341 334 if (wdt_base == NULL) { 342 - dev_err(dev, "failed to ioremap() region\n"); 343 - ret = -EINVAL; 344 - goto err_req; 335 + dev_err(dev, "failed to devm_request_and_ioremap() region\n"); 336 + ret = -ENOMEM; 337 + goto err; 345 338 } 346 339 347 340 DBG("probe: mapped wdt_base=%p\n", wdt_base); 348 341 349 - wdt_clock = clk_get(&pdev->dev, "watchdog"); 342 + wdt_clock = devm_clk_get(dev, "watchdog"); 350 343 if (IS_ERR(wdt_clock)) { 351 344 dev_err(dev, "failed to find watchdog clock source\n"); 352 345 ret = PTR_ERR(wdt_clock); 353 - goto err_map; 346 + goto err; 354 347 } 355 348 356 349 clk_prepare_enable(wdt_clock); ··· 369 378 "cannot start\n"); 370 379 } 371 380 372 - ret = request_irq(wdt_irq->start, s3c2410wdt_irq, 0, pdev->name, pdev); 381 + ret = devm_request_irq(dev, wdt_irq->start, s3c2410wdt_irq, 0, 382 + pdev->name, pdev); 373 383 if (ret != 0) { 374 384 dev_err(dev, "failed to install irq (%d)\n", ret); 375 385 goto err_cpufreq; ··· 381 389 ret = watchdog_register_device(&s3c2410_wdd); 382 390 if (ret) { 383 391 dev_err(dev, "cannot register watchdog (%d)\n", ret); 384 - goto err_irq; 392 + goto err_cpufreq; 385 393 } 386 394 387 395 if (tmr_atboot && started == 0) { ··· 406 414 407 415 return 0; 408 416 409 - err_irq: 410 - free_irq(wdt_irq->start, pdev); 411 - 412 417 err_cpufreq: 413 418 s3c2410wdt_cpufreq_deregister(); 414 419 415 420 err_clk: 416 421 clk_disable_unprepare(wdt_clock); 417 - clk_put(wdt_clock); 418 422 wdt_clock = NULL; 419 - 420 - err_map: 421 - iounmap(wdt_base); 422 - 423 - err_req: 424 - release_mem_region(wdt_mem->start, size); 425 423 426 424 err: 427 425 wdt_irq = NULL; ··· 423 441 { 424 442 watchdog_unregister_device(&s3c2410_wdd); 425 443 426 - free_irq(wdt_irq->start, dev); 427 - 428 444 s3c2410wdt_cpufreq_deregister(); 429 445 430 446 clk_disable_unprepare(wdt_clock); 431 - clk_put(wdt_clock); 432 447 wdt_clock = NULL; 433 448 434 - iounmap(wdt_base); 435 - 436 - release_mem_region(wdt_mem->start, resource_size(wdt_mem)); 437 449 wdt_irq = NULL; 438 450 wdt_mem = NULL; 439 451 return 0;