On Wed, Jul 31, 2019 at 10:42:51AM -0700, Andrey Smirnov wrote: > Reprogramming bootloader on watchdog MCU will result in reported > default timeout value of "0". That in turn will be unnecesarily > rejected by the driver as invalid device (-ENODEV). Simplify probe to > just read stored timeout value, clamp it to an acceptable range and > program the value unconditionally to fix the above. > > Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> > Cc: Chris Healy <cphealy@xxxxxxxxx> > Cc: Guenter Roeck <linux@xxxxxxxxxxxx> > Cc: Rick Ramstetter <rick@xxxxxxxxxxxxxxx> > Cc: linux-watchdog@xxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx I have not heard back on the question I had about selecting the minimum timeout and not a more reasonable default. Since the code itself is technically correct, marking the patch as Reviewed-by: Guenter Roeck <linux@xxxxxxxxxxxx> Guenter > --- > drivers/watchdog/ziirave_wdt.c | 22 +++++++++------------- > 1 file changed, 9 insertions(+), 13 deletions(-) > > diff --git a/drivers/watchdog/ziirave_wdt.c b/drivers/watchdog/ziirave_wdt.c > index 89ce6982ba53..33c8d2eadada 100644 > --- a/drivers/watchdog/ziirave_wdt.c > +++ b/drivers/watchdog/ziirave_wdt.c > @@ -667,22 +667,18 @@ static int ziirave_wdt_probe(struct i2c_client *client, > return val; > } > > - if (val < ZIIRAVE_TIMEOUT_MIN) > - return -ENODEV; > - > - w_priv->wdd.timeout = val; > - } else { > - ret = ziirave_wdt_set_timeout(&w_priv->wdd, > - w_priv->wdd.timeout); > - if (ret) { > - dev_err(&client->dev, "Failed to set timeout\n"); > - return ret; > - } > + w_priv->wdd.timeout = clamp(val, ZIIRAVE_TIMEOUT_MIN, > + ZIIRAVE_TIMEOUT_MAX); > + } > > - dev_info(&client->dev, "Timeout set to %ds\n", > - w_priv->wdd.timeout); > + ret = ziirave_wdt_set_timeout(&w_priv->wdd, w_priv->wdd.timeout); > + if (ret) { > + dev_err(&client->dev, "Failed to set timeout\n"); > + return ret; > } > > + dev_info(&client->dev, "Timeout set to %ds\n", w_priv->wdd.timeout); > + > watchdog_set_nowayout(&w_priv->wdd, nowayout); > > i2c_set_clientdata(client, w_priv); > -- > 2.21.0 >