watchdog: sch56xx: Remove unnecessary checks for register changes
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>
This commit is contained in:
parent
fb551405c0
commit
85a2e40cb5
1 changed files with 16 additions and 25 deletions
|
@ -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;
|
||||
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;
|
||||
}
|
||||
|
||||
return ret;
|
||||
data->watchdog_output_enable = val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct watchdog_ops watchdog_ops = {
|
||||
|
|
Loading…
Reference in a new issue