watchdog: sch56xx: Remove unnecessary checks for register changes
authorHans de Goede <hdegoede@redhat.com>
Tue, 22 May 2012 09:40:25 +0000 (11:40 +0200)
committerWim Van Sebroeck <wim@iguana.be>
Wed, 30 May 2012 05:55:41 +0000 (07:55 +0200)
Since the watchdog core keeps track of the watchdog's active state, start/stop
will never get called when no changes are necessary. So we can remove the
check for the output_enable register changing before writing it (which is
an expensive operation).

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
drivers/hwmon/sch56xx-common.c

index 419a8e8..35846cb 100644 (file)
@@ -334,18 +334,14 @@ static int watchdog_start(struct watchdog_device *wddev)
        if (ret)
                goto leave;
 
-       /* 2. Enable output (if not already enabled) */
-       if (!(data->watchdog_output_enable & SCH56XX_WDOG_OUTPUT_ENABLE)) {
-               val = data->watchdog_output_enable |
-                     SCH56XX_WDOG_OUTPUT_ENABLE;
-               ret = sch56xx_write_virtual_reg(data->addr,
-                                               SCH56XX_REG_WDOG_OUTPUT_ENABLE,
-                                               val);
-               if (ret)
-                       goto leave;
+       /* 2. Enable output */
+       val = data->watchdog_output_enable | SCH56XX_WDOG_OUTPUT_ENABLE;
+       ret = sch56xx_write_virtual_reg(data->addr,
+                                       SCH56XX_REG_WDOG_OUTPUT_ENABLE, val);
+       if (ret)
+               goto leave;
 
-               data->watchdog_output_enable = val;
-       }
+       data->watchdog_output_enable = val;
 
        /* 3. Clear the watchdog event bit if set */
        val = inb(data->addr + 9);
@@ -377,21 +373,16 @@ static int watchdog_stop(struct watchdog_device *wddev)
        int ret = 0;
        u8 val;
 
-       if (data->watchdog_output_enable & SCH56XX_WDOG_OUTPUT_ENABLE) {
-               val = data->watchdog_output_enable &
-                     ~SCH56XX_WDOG_OUTPUT_ENABLE;
-               mutex_lock(data->io_lock);
-               ret = sch56xx_write_virtual_reg(data->addr,
-                                               SCH56XX_REG_WDOG_OUTPUT_ENABLE,
-                                               val);
-               mutex_unlock(data->io_lock);
-               if (ret)
-                       return ret;
-
-               data->watchdog_output_enable = val;
-       }
+       val = data->watchdog_output_enable & ~SCH56XX_WDOG_OUTPUT_ENABLE;
+       mutex_lock(data->io_lock);
+       ret = sch56xx_write_virtual_reg(data->addr,
+                                       SCH56XX_REG_WDOG_OUTPUT_ENABLE, val);
+       mutex_unlock(data->io_lock);
+       if (ret)
+               return ret;
 
-       return ret;
+       data->watchdog_output_enable = val;
+       return 0;
 }
 
 static const struct watchdog_ops watchdog_ops = {