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
@ -334,18 +334,14 @@ static int watchdog_start(struct watchdog_device *wddev)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto leave;
|
goto leave;
|
||||||
|
|
||||||
/* 2. Enable output (if not already enabled) */
|
/* 2. Enable output */
|
||||||
if (!(data->watchdog_output_enable & SCH56XX_WDOG_OUTPUT_ENABLE)) {
|
val = data->watchdog_output_enable | SCH56XX_WDOG_OUTPUT_ENABLE;
|
||||||
val = data->watchdog_output_enable |
|
ret = sch56xx_write_virtual_reg(data->addr,
|
||||||
SCH56XX_WDOG_OUTPUT_ENABLE;
|
SCH56XX_REG_WDOG_OUTPUT_ENABLE, val);
|
||||||
ret = sch56xx_write_virtual_reg(data->addr,
|
if (ret)
|
||||||
SCH56XX_REG_WDOG_OUTPUT_ENABLE,
|
goto leave;
|
||||||
val);
|
|
||||||
if (ret)
|
|
||||||
goto leave;
|
|
||||||
|
|
||||||
data->watchdog_output_enable = val;
|
data->watchdog_output_enable = val;
|
||||||
}
|
|
||||||
|
|
||||||
/* 3. Clear the watchdog event bit if set */
|
/* 3. Clear the watchdog event bit if set */
|
||||||
val = inb(data->addr + 9);
|
val = inb(data->addr + 9);
|
||||||
@ -377,21 +373,16 @@ static int watchdog_stop(struct watchdog_device *wddev)
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
u8 val;
|
u8 val;
|
||||||
|
|
||||||
if (data->watchdog_output_enable & SCH56XX_WDOG_OUTPUT_ENABLE) {
|
val = data->watchdog_output_enable & ~SCH56XX_WDOG_OUTPUT_ENABLE;
|
||||||
val = data->watchdog_output_enable &
|
mutex_lock(data->io_lock);
|
||||||
~SCH56XX_WDOG_OUTPUT_ENABLE;
|
ret = sch56xx_write_virtual_reg(data->addr,
|
||||||
mutex_lock(data->io_lock);
|
SCH56XX_REG_WDOG_OUTPUT_ENABLE, val);
|
||||||
ret = sch56xx_write_virtual_reg(data->addr,
|
mutex_unlock(data->io_lock);
|
||||||
SCH56XX_REG_WDOG_OUTPUT_ENABLE,
|
if (ret)
|
||||||
val);
|
return ret;
|
||||||
mutex_unlock(data->io_lock);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
data->watchdog_output_enable = val;
|
data->watchdog_output_enable = val;
|
||||||
}
|
return 0;
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct watchdog_ops watchdog_ops = {
|
static const struct watchdog_ops watchdog_ops = {
|
||||||
|
Loading…
Reference in New Issue
Block a user