mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 13:14:02 +02:00
watchdog: da9062: fix suspend/resume handling of HW_RUNNING watchdog
da9062_wdt_suspend() and da9062_wdt_resume() only check watchdog_active(),
when the watchdog is left running by the driver sets
WDOG_HW_RUNNING in da9062_wdt_probe() but userspace never opens the
device, so WDOG_ACTIVE remains cleared, the wdt_disable() will not be
executed in da9062_wdt_suspend. In this case, the suspend callback is
a no-op and the watchdog keeps counting during system suspend,
leading to an unexpected system reset.
Check WDOG_HW_RUNNING and wdt->wdd,can fix this issue.
Fixes: f6c98b0838 ("watchdog: da9062: add power management ops")
Cs: stable@vger.kernel.org
Signed-off-by: Li Jun <lijun01@kylinos.cn>
Link: https://patch.msgid.link/20260914062353.582205-1-lijun01@kylinos.cn
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
22737cfced
commit
5071122bf5
|
|
@ -256,7 +256,7 @@ static int __maybe_unused da9062_wdt_suspend(struct device *dev)
|
|||
if (!wdt->use_sw_pm)
|
||||
return 0;
|
||||
|
||||
if (watchdog_active(wdd))
|
||||
if (watchdog_active(wdd) || watchdog_hw_running(wdd))
|
||||
return da9062_wdt_stop(wdd);
|
||||
|
||||
return 0;
|
||||
|
|
@ -270,7 +270,7 @@ static int __maybe_unused da9062_wdt_resume(struct device *dev)
|
|||
if (!wdt->use_sw_pm)
|
||||
return 0;
|
||||
|
||||
if (watchdog_active(wdd))
|
||||
if (watchdog_active(wdd) || watchdog_hw_running(wdd))
|
||||
return da9062_wdt_start(wdd);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user