diff options
author | Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com> | 2010-06-08 02:44:32 -0400 |
---|---|---|
committer | Wim Van Sebroeck <wim@iguana.be> | 2010-06-17 05:56:57 -0400 |
commit | f1f5bda4e9726456bd132e738bf60b727856477e (patch) | |
tree | da7fa43a1bd1ccaf2a0dae164a98001a8fa55721 /drivers/watchdog/at32ap700x_wdt.c | |
parent | 8acf7d00dfb62d7e5f2533c3f1132f60cb267369 (diff) |
watchdog: at32ap700x_wdt: register misc device last in probe() function
This patch reworks the probe() function in the at32ap700x_wdt driver, this to
make sure the miscdev is properly initialized and the driver is ready to be
accessed.
Reported-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
Signed-off-by: Wim Van sebroeck <wim@iguana.be>
Diffstat (limited to 'drivers/watchdog/at32ap700x_wdt.c')
-rw-r--r-- | drivers/watchdog/at32ap700x_wdt.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/watchdog/at32ap700x_wdt.c b/drivers/watchdog/at32ap700x_wdt.c index 1cddf92cb9a6..750bc5281d79 100644 --- a/drivers/watchdog/at32ap700x_wdt.c +++ b/drivers/watchdog/at32ap700x_wdt.c | |||
@@ -346,9 +346,13 @@ static int __init at32_wdt_probe(struct platform_device *pdev) | |||
346 | } else { | 346 | } else { |
347 | wdt->users = 0; | 347 | wdt->users = 0; |
348 | } | 348 | } |
349 | wdt->miscdev.minor = WATCHDOG_MINOR; | 349 | |
350 | wdt->miscdev.name = "watchdog"; | 350 | wdt->miscdev.minor = WATCHDOG_MINOR; |
351 | wdt->miscdev.fops = &at32_wdt_fops; | 351 | wdt->miscdev.name = "watchdog"; |
352 | wdt->miscdev.fops = &at32_wdt_fops; | ||
353 | wdt->miscdev.parent = &pdev->dev; | ||
354 | |||
355 | platform_set_drvdata(pdev, wdt); | ||
352 | 356 | ||
353 | if (at32_wdt_settimeout(timeout)) { | 357 | if (at32_wdt_settimeout(timeout)) { |
354 | at32_wdt_settimeout(TIMEOUT_DEFAULT); | 358 | at32_wdt_settimeout(TIMEOUT_DEFAULT); |
@@ -360,17 +364,17 @@ static int __init at32_wdt_probe(struct platform_device *pdev) | |||
360 | ret = misc_register(&wdt->miscdev); | 364 | ret = misc_register(&wdt->miscdev); |
361 | if (ret) { | 365 | if (ret) { |
362 | dev_dbg(&pdev->dev, "failed to register wdt miscdev\n"); | 366 | dev_dbg(&pdev->dev, "failed to register wdt miscdev\n"); |
363 | goto err_iounmap; | 367 | goto err_register; |
364 | } | 368 | } |
365 | 369 | ||
366 | platform_set_drvdata(pdev, wdt); | ||
367 | wdt->miscdev.parent = &pdev->dev; | ||
368 | dev_info(&pdev->dev, | 370 | dev_info(&pdev->dev, |
369 | "AT32AP700X WDT at 0x%p, timeout %d sec (nowayout=%d)\n", | 371 | "AT32AP700X WDT at 0x%p, timeout %d sec (nowayout=%d)\n", |
370 | wdt->regs, wdt->timeout, nowayout); | 372 | wdt->regs, wdt->timeout, nowayout); |
371 | 373 | ||
372 | return 0; | 374 | return 0; |
373 | 375 | ||
376 | err_register: | ||
377 | platform_set_drvdata(pdev, NULL); | ||
374 | err_iounmap: | 378 | err_iounmap: |
375 | iounmap(wdt->regs); | 379 | iounmap(wdt->regs); |
376 | err_free: | 380 | err_free: |