The DA9063 watchdog occasionally enters error condition and resets the
system if the timeout is changed quickly after the timer was enabled.

The method of disabling and waiting for > 150 µs before setting the
new timeout is taken from the DA9052 driver.

Signed-off-by: Philipp Zabel <[email protected]>
---
 drivers/watchdog/da9063_wdt.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/watchdog/da9063_wdt.c b/drivers/watchdog/da9063_wdt.c
index b2e9201..87e14d8 100644
--- a/drivers/watchdog/da9063_wdt.c
+++ b/drivers/watchdog/da9063_wdt.c
@@ -67,6 +67,11 @@ static int _da9063_wdt_set_timeout(struct da9063_watchdog 
*wdt,
        mutex_lock(&wdt->mutex);
 
        ret = regmap_update_bits(da9063->regmap, DA9063_REG_CONTROL_D,
+                                DA9063_TWDSCALE_MASK, DA9063_TWDSCALE_DISABLE);
+
+       usleep_range(150, 300);
+
+       ret = regmap_update_bits(da9063->regmap, DA9063_REG_CONTROL_D,
                                 DA9063_TWDSCALE_MASK, regval);
 
        wdt->defer_ping = false;
-- 
2.4.6

--
To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to