diff options
| author | Wim Van Sebroeck <wim@iguana.be> | 2009-12-26 14:13:00 -0500 |
|---|---|---|
| committer | Wim Van Sebroeck <wim@iguana.be> | 2010-03-07 05:30:59 -0500 |
| commit | 168b5251adddb1554926cfb94f79a8a28bc6ebe5 (patch) | |
| tree | d2f7ceac118991d8aa32418074dc599989106432 | |
| parent | 42747d712de56cf2087b702d2ad90af114c53138 (diff) | |
[WATCHDOG] change reboot_notifier to platform-shutdown method.
Platform device drivers can use the .shutdown method to handle soft
shutdown's instead of reboot_notifier's.
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
| -rw-r--r-- | drivers/watchdog/bfin_wdt.c | 52 | ||||
| -rw-r--r-- | drivers/watchdog/txx9wdt.c | 25 |
2 files changed, 21 insertions, 56 deletions
diff --git a/drivers/watchdog/bfin_wdt.c b/drivers/watchdog/bfin_wdt.c index 8c6babb2d652..9c7ccd1e9088 100644 --- a/drivers/watchdog/bfin_wdt.c +++ b/drivers/watchdog/bfin_wdt.c | |||
| @@ -19,8 +19,6 @@ | |||
| 19 | #include <linux/miscdevice.h> | 19 | #include <linux/miscdevice.h> |
| 20 | #include <linux/watchdog.h> | 20 | #include <linux/watchdog.h> |
| 21 | #include <linux/fs.h> | 21 | #include <linux/fs.h> |
| 22 | #include <linux/notifier.h> | ||
| 23 | #include <linux/reboot.h> | ||
| 24 | #include <linux/init.h> | 22 | #include <linux/init.h> |
| 25 | #include <linux/interrupt.h> | 23 | #include <linux/interrupt.h> |
| 26 | #include <linux/uaccess.h> | 24 | #include <linux/uaccess.h> |
| @@ -309,26 +307,6 @@ static long bfin_wdt_ioctl(struct file *file, | |||
| 309 | } | 307 | } |
| 310 | } | 308 | } |
| 311 | 309 | ||
| 312 | /** | ||
| 313 | * bfin_wdt_notify_sys - Notifier Handler | ||
| 314 | * @this: notifier block | ||
| 315 | * @code: notifier event | ||
| 316 | * @unused: unused | ||
| 317 | * | ||
| 318 | * Handles specific events, such as turning off the watchdog during a | ||
| 319 | * shutdown event. | ||
| 320 | */ | ||
| 321 | static int bfin_wdt_notify_sys(struct notifier_block *this, | ||
| 322 | unsigned long code, void *unused) | ||
| 323 | { | ||
| 324 | stampit(); | ||
| 325 | |||
| 326 | if (code == SYS_DOWN || code == SYS_HALT) | ||
| 327 | bfin_wdt_stop(); | ||
| 328 | |||
| 329 | return NOTIFY_DONE; | ||
| 330 | } | ||
| 331 | |||
| 332 | #ifdef CONFIG_PM | 310 | #ifdef CONFIG_PM |
| 333 | static int state_before_suspend; | 311 | static int state_before_suspend; |
| 334 | 312 | ||
| @@ -395,33 +373,21 @@ static const struct watchdog_info bfin_wdt_info = { | |||
| 395 | WDIOF_MAGICCLOSE, | 373 | WDIOF_MAGICCLOSE, |
| 396 | }; | 374 | }; |
| 397 | 375 | ||
| 398 | static struct notifier_block bfin_wdt_notifier = { | ||
| 399 | .notifier_call = bfin_wdt_notify_sys, | ||
| 400 | }; | ||
| 401 | |||
| 402 | /** | 376 | /** |
| 403 | * bfin_wdt_probe - Initialize module | 377 | * bfin_wdt_probe - Initialize module |
| 404 | * | 378 | * |
| 405 | * Registers the misc device and notifier handler. Actual device | 379 | * Registers the misc device. Actual device |
| 406 | * initialization is handled by bfin_wdt_open(). | 380 | * initialization is handled by bfin_wdt_open(). |
| 407 | */ | 381 | */ |
| 408 | static int __devinit bfin_wdt_probe(struct platform_device *pdev) | 382 | static int __devinit bfin_wdt_probe(struct platform_device *pdev) |
| 409 | { | 383 | { |
| 410 | int ret; | 384 | int ret; |
| 411 | 385 | ||
| 412 | ret = register_reboot_notifier(&bfin_wdt_notifier); | ||
| 413 | if (ret) { | ||
| 414 | pr_devinit(KERN_ERR PFX | ||
| 415 | "cannot register reboot notifier (err=%d)\n", ret); | ||
| 416 | return ret; | ||
| 417 | } | ||
| 418 | |||
| 419 | ret = misc_register(&bfin_wdt_miscdev); | 386 | ret = misc_register(&bfin_wdt_miscdev); |
| 420 | if (ret) { | 387 | if (ret) { |
| 421 | pr_devinit(KERN_ERR PFX | 388 | pr_devinit(KERN_ERR PFX |
| 422 | "cannot register miscdev on minor=%d (err=%d)\n", | 389 | "cannot register miscdev on minor=%d (err=%d)\n", |
| 423 | WATCHDOG_MINOR, ret); | 390 | WATCHDOG_MINOR, ret); |
| 424 | unregister_reboot_notifier(&bfin_wdt_notifier); | ||
| 425 | return ret; | 391 | return ret; |
| 426 | } | 392 | } |
| 427 | 393 | ||
| @@ -434,21 +400,33 @@ static int __devinit bfin_wdt_probe(struct platform_device *pdev) | |||
| 434 | /** | 400 | /** |
| 435 | * bfin_wdt_remove - Initialize module | 401 | * bfin_wdt_remove - Initialize module |
| 436 | * | 402 | * |
| 437 | * Unregisters the misc device and notifier handler. Actual device | 403 | * Unregisters the misc device. Actual device |
| 438 | * deinitialization is handled by bfin_wdt_close(). | 404 | * deinitialization is handled by bfin_wdt_close(). |
| 439 | */ | 405 | */ |
| 440 | static int __devexit bfin_wdt_remove(struct platform_device *pdev) | 406 | static int __devexit bfin_wdt_remove(struct platform_device *pdev) |
| 441 | { | 407 | { |
| 442 | misc_deregister(&bfin_wdt_miscdev); | 408 | misc_deregister(&bfin_wdt_miscdev); |
| 443 | unregister_reboot_notifier(&bfin_wdt_notifier); | ||
| 444 | return 0; | 409 | return 0; |
| 445 | } | 410 | } |
| 446 | 411 | ||
| 412 | /** | ||
| 413 | * bfin_wdt_shutdown - Soft Shutdown Handler | ||
| 414 | * | ||
| 415 | * Handles the soft shutdown event. | ||
| 416 | */ | ||
| 417 | static void bfin_wdt_shutdown(struct platform_device *pdev) | ||
| 418 | { | ||
| 419 | stampit(); | ||
| 420 | |||
| 421 | bfin_wdt_stop(); | ||
| 422 | } | ||
| 423 | |||
| 447 | static struct platform_device *bfin_wdt_device; | 424 | static struct platform_device *bfin_wdt_device; |
| 448 | 425 | ||
| 449 | static struct platform_driver bfin_wdt_driver = { | 426 | static struct platform_driver bfin_wdt_driver = { |
| 450 | .probe = bfin_wdt_probe, | 427 | .probe = bfin_wdt_probe, |
| 451 | .remove = __devexit_p(bfin_wdt_remove), | 428 | .remove = __devexit_p(bfin_wdt_remove), |
| 429 | .shutdown = bfin_wdt_shutdown, | ||
| 452 | .suspend = bfin_wdt_suspend, | 430 | .suspend = bfin_wdt_suspend, |
| 453 | .resume = bfin_wdt_resume, | 431 | .resume = bfin_wdt_resume, |
| 454 | .driver = { | 432 | .driver = { |
diff --git a/drivers/watchdog/txx9wdt.c b/drivers/watchdog/txx9wdt.c index d635566e9307..9e9ed7bfabcb 100644 --- a/drivers/watchdog/txx9wdt.c +++ b/drivers/watchdog/txx9wdt.c | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | #include <linux/miscdevice.h> | 13 | #include <linux/miscdevice.h> |
| 14 | #include <linux/watchdog.h> | 14 | #include <linux/watchdog.h> |
| 15 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
| 16 | #include <linux/reboot.h> | ||
| 17 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 18 | #include <linux/uaccess.h> | 17 | #include <linux/uaccess.h> |
| 19 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
| @@ -166,14 +165,6 @@ static long txx9wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 166 | } | 165 | } |
| 167 | } | 166 | } |
| 168 | 167 | ||
| 169 | static int txx9wdt_notify_sys(struct notifier_block *this, unsigned long code, | ||
| 170 | void *unused) | ||
| 171 | { | ||
| 172 | if (code == SYS_DOWN || code == SYS_HALT) | ||
| 173 | txx9wdt_stop(); | ||
| 174 | return NOTIFY_DONE; | ||
| 175 | } | ||
| 176 | |||
| 177 | static const struct file_operations txx9wdt_fops = { | 168 | static const struct file_operations txx9wdt_fops = { |
| 178 | .owner = THIS_MODULE, | 169 | .owner = THIS_MODULE, |
| 179 | .llseek = no_llseek, | 170 | .llseek = no_llseek, |
| @@ -189,10 +180,6 @@ static struct miscdevice txx9wdt_miscdev = { | |||
| 189 | .fops = &txx9wdt_fops, | 180 | .fops = &txx9wdt_fops, |
| 190 | }; | 181 | }; |
| 191 | 182 | ||
| 192 | static struct notifier_block txx9wdt_notifier = { | ||
| 193 | .notifier_call = txx9wdt_notify_sys, | ||
| 194 | }; | ||
| 195 | |||
| 196 | static int __init txx9wdt_probe(struct platform_device *dev) | 183 | static int __init txx9wdt_probe(struct platform_device *dev) |
| 197 | { | 184 | { |
| 198 | struct resource *res; | 185 | struct resource *res; |
| @@ -221,13 +208,8 @@ static int __init txx9wdt_probe(struct platform_device *dev) | |||
| 221 | if (!txx9wdt_reg) | 208 | if (!txx9wdt_reg) |
| 222 | goto exit_busy; | 209 | goto exit_busy; |
| 223 | 210 | ||
| 224 | ret = register_reboot_notifier(&txx9wdt_notifier); | ||
| 225 | if (ret) | ||
| 226 | goto exit; | ||
| 227 | |||
| 228 | ret = misc_register(&txx9wdt_miscdev); | 211 | ret = misc_register(&txx9wdt_miscdev); |
| 229 | if (ret) { | 212 | if (ret) { |
| 230 | unregister_reboot_notifier(&txx9wdt_notifier); | ||
| 231 | goto exit; | 213 | goto exit; |
| 232 | } | 214 | } |
| 233 | 215 | ||
| @@ -249,14 +231,19 @@ exit: | |||
| 249 | static int __exit txx9wdt_remove(struct platform_device *dev) | 231 | static int __exit txx9wdt_remove(struct platform_device *dev) |
| 250 | { | 232 | { |
| 251 | misc_deregister(&txx9wdt_miscdev); | 233 | misc_deregister(&txx9wdt_miscdev); |
| 252 | unregister_reboot_notifier(&txx9wdt_notifier); | ||
| 253 | clk_disable(txx9_imclk); | 234 | clk_disable(txx9_imclk); |
| 254 | clk_put(txx9_imclk); | 235 | clk_put(txx9_imclk); |
| 255 | return 0; | 236 | return 0; |
| 256 | } | 237 | } |
| 257 | 238 | ||
| 239 | static void txx9wdt_shutdown(struct platform_device *dev) | ||
| 240 | { | ||
| 241 | txx9wdt_stop(); | ||
| 242 | } | ||
| 243 | |||
| 258 | static struct platform_driver txx9wdt_driver = { | 244 | static struct platform_driver txx9wdt_driver = { |
| 259 | .remove = __exit_p(txx9wdt_remove), | 245 | .remove = __exit_p(txx9wdt_remove), |
| 246 | .shutdown = txx9wdt_shutdown, | ||
| 260 | .driver = { | 247 | .driver = { |
| 261 | .name = "txx9wdt", | 248 | .name = "txx9wdt", |
| 262 | .owner = THIS_MODULE, | 249 | .owner = THIS_MODULE, |
