watchdog: f71808e_wdt: fix inaccurate report in WDIOC_GETTIMEOUT

[ Upstream commit 164483c735 ]

The fintek watchdog timer can configure timeouts of second granularity
only up to 255 seconds. Beyond that, the timeout needs to be configured
with minute granularity. WDIOC_GETTIMEOUT should report the actual
timeout configured, not just echo back the timeout configured by the
user. Do so.

Fixes: 96cb4eb019 ("watchdog: f71808e_wdt: new watchdog driver for Fintek F71808E and F71882FG")
Suggested-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Link: https://lore.kernel.org/r/5e17960fe8cc0e3cb2ba53de4730b75d9a0f33d5.1628525954.git-series.a.fatoum@pengutronix.de
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Ahmad Fatoum 2021-08-09 18:20:31 +02:00 коммит произвёл Greg Kroah-Hartman
Родитель fb2b4c7b54
Коммит e5f9487c06
1 изменённых файлов: 3 добавлений и 1 удалений

Просмотреть файл

@ -228,15 +228,17 @@ static int watchdog_set_timeout(int timeout)
mutex_lock(&watchdog.lock); mutex_lock(&watchdog.lock);
watchdog.timeout = timeout;
if (timeout > 0xff) { if (timeout > 0xff) {
watchdog.timer_val = DIV_ROUND_UP(timeout, 60); watchdog.timer_val = DIV_ROUND_UP(timeout, 60);
watchdog.minutes_mode = true; watchdog.minutes_mode = true;
timeout = watchdog.timer_val * 60;
} else { } else {
watchdog.timer_val = timeout; watchdog.timer_val = timeout;
watchdog.minutes_mode = false; watchdog.minutes_mode = false;
} }
watchdog.timeout = timeout;
mutex_unlock(&watchdog.lock); mutex_unlock(&watchdog.lock);
return 0; return 0;