Explorar el Código

[WATCHDOG] ib700wdt.c - convert to platform_device part 2

Convert the reboot_notifier into the platform_device's shutdown
method

Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Wim Van Sebroeck hace 18 años
padre
commit
35fcf53870
Se han modificado 1 ficheros con 7 adiciones y 35 borrados
  1. 7 35
      drivers/char/watchdog/ib700wdt.c

+ 7 - 35
drivers/char/watchdog/ib700wdt.c

@@ -36,9 +36,7 @@
 #include <linux/miscdevice.h>
 #include <linux/watchdog.h>
 #include <linux/ioport.h>
-#include <linux/notifier.h>
 #include <linux/fs.h>
-#include <linux/reboot.h>
 #include <linux/init.h>
 #include <linux/spinlock.h>
 #include <linux/moduleparam.h>
@@ -283,21 +281,6 @@ ibwdt_close(struct inode *inode, struct file *file)
 	return 0;
 }
 
-/*
- *	Notifier for system down
- */
-
-static int
-ibwdt_notify_sys(struct notifier_block *this, unsigned long code,
-	void *unused)
-{
-	if (code == SYS_DOWN || code == SYS_HALT) {
-		/* Turn the WDT off */
-		ibwdt_disable();
-	}
-	return NOTIFY_DONE;
-}
-
 /*
  *	Kernel Interfaces
  */
@@ -317,15 +300,6 @@ static struct miscdevice ibwdt_miscdev = {
 	.fops = &ibwdt_fops,
 };
 
-/*
- *	The WDT needs to learn about soft shutdowns in order to
- *	turn the timebomb registers off.
- */
-
-static struct notifier_block ibwdt_notifier = {
-	.notifier_call = ibwdt_notify_sys,
-};
-
 /*
  *	Init & exit routines
  */
@@ -350,12 +324,6 @@ static int __devinit ibwdt_probe(struct platform_device *dev)
 		goto out_nostartreg;
 	}
 
-	res = register_reboot_notifier(&ibwdt_notifier);
-	if (res) {
-		printk (KERN_ERR PFX "Failed to register reboot notifier.\n");
-		goto out_noreboot;
-	}
-
 	res = misc_register(&ibwdt_miscdev);
 	if (res) {
 		printk (KERN_ERR PFX "failed to register misc device\n");
@@ -364,8 +332,6 @@ static int __devinit ibwdt_probe(struct platform_device *dev)
 	return 0;
 
 out_nomisc:
-	unregister_reboot_notifier(&ibwdt_notifier);
-out_noreboot:
 	release_region(WDT_START, 1);
 out_nostartreg:
 #if WDT_START != WDT_STOP
@@ -378,7 +344,6 @@ out_nostopreg:
 static int __devexit ibwdt_remove(struct platform_device *dev)
 {
 	misc_deregister(&ibwdt_miscdev);
-	unregister_reboot_notifier(&ibwdt_notifier);
 	release_region(WDT_START,1);
 #if WDT_START != WDT_STOP
 	release_region(WDT_STOP,1);
@@ -386,9 +351,16 @@ static int __devexit ibwdt_remove(struct platform_device *dev)
 	return 0;
 }
 
+static void ibwdt_shutdown(struct platform_device *dev)
+{
+	/* Turn the WDT off if we have a soft shutdown */
+	ibwdt_disable();
+}
+
 static struct platform_driver ibwdt_driver = {
 	.probe		= ibwdt_probe,
 	.remove		= __devexit_p(ibwdt_remove),
+	.shutdown	= ibwdt_shutdown,
 	.driver		= {
 		.owner	= THIS_MODULE,
 		.name	= DRV_NAME,