Forráskód Böngészése

[WATCHDOG] advantechwdt.c - move set_heartbeat to a seperate function

Put the set_heartbeat/timeout code into a seperate function

Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Wim Van Sebroeck 18 éve
szülő
commit
0349a363e2
1 módosított fájl, 18 hozzáadás és 8 törlés
  1. 18 8
      drivers/char/watchdog/advantechwdt.c

+ 18 - 8
drivers/char/watchdog/advantechwdt.c

@@ -95,6 +95,16 @@ advwdt_disable(void)
 	inb_p(wdt_stop);
 }
 
+static int
+advwdt_set_heartbeat(int t)
+{
+	if ((t < 1) || (t > 63))
+		return -EINVAL;
+
+	timeout = t;
+	return 0;
+}
+
 /*
  *	/dev/watchdog handling
  */
@@ -151,9 +161,8 @@ advwdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
 	case WDIOC_SETTIMEOUT:
 	  if (get_user(new_timeout, p))
 		  return -EFAULT;
-	  if ((new_timeout < 1) || (new_timeout > 63))
+	  if (advwdt_set_heartbeat(new_timeout))
 		  return -EINVAL;
-	  timeout = new_timeout;
 	  advwdt_ping();
 	  /* Fall */
 
@@ -267,12 +276,6 @@ advwdt_init(void)
 
 	printk(KERN_INFO "WDT driver for Advantech single board computer initialising.\n");
 
-	if (timeout < 1 || timeout > 63) {
-		timeout = WATCHDOG_TIMEOUT;
-		printk (KERN_INFO PFX "timeout value must be 1<=x<=63, using %d\n",
-			timeout);
-	}
-
 	if (wdt_stop != wdt_start) {
 		if (!request_region(wdt_stop, 1, WATCHDOG_NAME)) {
 			printk (KERN_ERR PFX "I/O address 0x%04x already in use\n",
@@ -289,6 +292,13 @@ advwdt_init(void)
 		goto unreg_stop;
 	}
 
+	/* Check that the heartbeat value is within it's range ; if not reset to the default */
+	if (advwdt_set_heartbeat(timeout)) {
+		advwdt_set_heartbeat(WATCHDOG_TIMEOUT);
+		printk (KERN_INFO PFX "timeout value must be 1<=x<=63, using %d\n",
+			timeout);
+	}
+
 	ret = register_reboot_notifier(&advwdt_notifier);
 	if (ret != 0) {
 		printk (KERN_ERR PFX "cannot register reboot notifier (err=%d)\n",