watchdog: da9062: Disable and wait before changing timeout
authorMichael Grzeschik <m.grzeschik@pengutronix.de>
Tue, 17 Oct 2017 15:30:25 +0000 (17:30 +0200)
committerWim Van Sebroeck <wim@iguana.be>
Thu, 28 Dec 2017 19:45:07 +0000 (20:45 +0100)
The DA9062 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: Michael Grzeschik <m.grzeschik@pengutronix.de>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
drivers/watchdog/da9062_wdt.c

index 4349a02..dbb970e 100644 (file)
@@ -100,6 +100,13 @@ static int da9062_wdt_update_timeout_register(struct da9062_watchdog *wdt,
        if (ret)
                return ret;
 
+       regmap_update_bits(chip->regmap,
+                                 DA9062AA_CONTROL_D,
+                                 DA9062AA_TWDSCALE_MASK,
+                                 DA9062_TWDSCALE_DISABLE);
+
+       usleep_range(150, 300);
+
        return regmap_update_bits(chip->regmap,
                                  DA9062AA_CONTROL_D,
                                  DA9062AA_TWDSCALE_MASK,