Lines Matching full:wdog
40 #define IMX2_WDT_WCR_WRE BIT(3) /* -> WDOG Reset Enable */
66 struct watchdog_device wdog; member
93 static int imx2_wdt_restart(struct watchdog_device *wdog, unsigned long action, in imx2_wdt_restart() argument
96 struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); in imx2_wdt_restart()
108 * Due to imx6q errata ERR004346 (WDOG: WDOG SRS bit requires to be in imx2_wdt_restart()
123 static inline void imx2_wdt_setup(struct watchdog_device *wdog) in imx2_wdt_setup() argument
125 struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); in imx2_wdt_setup()
134 /* Generate internal chip-level reset if WDOG times out */ in imx2_wdt_setup()
143 val |= WDOG_SEC_TO_COUNT(wdog->timeout); in imx2_wdt_setup()
161 static int imx2_wdt_ping(struct watchdog_device *wdog) in imx2_wdt_ping() argument
163 struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); in imx2_wdt_ping()
173 static void __imx2_wdt_set_timeout(struct watchdog_device *wdog, in __imx2_wdt_set_timeout() argument
176 struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); in __imx2_wdt_set_timeout()
182 static int imx2_wdt_set_timeout(struct watchdog_device *wdog, in imx2_wdt_set_timeout() argument
188 __imx2_wdt_set_timeout(wdog, actual); in imx2_wdt_set_timeout()
189 wdog->timeout = new_timeout; in imx2_wdt_set_timeout()
193 static int imx2_wdt_set_pretimeout(struct watchdog_device *wdog, in imx2_wdt_set_pretimeout() argument
196 struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); in imx2_wdt_set_pretimeout()
201 wdog->pretimeout = new_pretimeout; in imx2_wdt_set_pretimeout()
211 struct watchdog_device *wdog = wdog_arg; in imx2_wdt_isr() local
212 struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); in imx2_wdt_isr()
217 watchdog_notify_pretimeout(wdog); in imx2_wdt_isr()
222 static int imx2_wdt_start(struct watchdog_device *wdog) in imx2_wdt_start() argument
224 struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); in imx2_wdt_start()
227 imx2_wdt_set_timeout(wdog, wdog->timeout); in imx2_wdt_start()
229 imx2_wdt_setup(wdog); in imx2_wdt_start()
231 set_bit(WDOG_HW_RUNNING, &wdog->status); in imx2_wdt_start()
233 return imx2_wdt_ping(wdog); in imx2_wdt_start()
261 struct watchdog_device *wdog; in imx2_wdt_probe() local
287 wdog = &wdev->wdog; in imx2_wdt_probe()
288 wdog->info = &imx2_wdt_info; in imx2_wdt_probe()
289 wdog->ops = &imx2_wdt_ops; in imx2_wdt_probe()
290 wdog->min_timeout = 1; in imx2_wdt_probe()
291 wdog->timeout = IMX2_WDT_DEFAULT_TIME; in imx2_wdt_probe()
292 wdog->max_hw_heartbeat_ms = IMX2_WDT_MAX_TIME * 1000; in imx2_wdt_probe()
293 wdog->parent = dev; in imx2_wdt_probe()
298 dev_name(dev), wdog)) in imx2_wdt_probe()
299 wdog->info = &imx2_wdt_pretimeout_info; in imx2_wdt_probe()
312 wdog->bootstatus = val & IMX2_WDT_WRSR_TOUT ? WDIOF_CARDRESET : 0; in imx2_wdt_probe()
321 platform_set_drvdata(pdev, wdog); in imx2_wdt_probe()
322 watchdog_set_drvdata(wdog, wdev); in imx2_wdt_probe()
323 watchdog_set_nowayout(wdog, nowayout); in imx2_wdt_probe()
324 watchdog_set_restart_priority(wdog, 128); in imx2_wdt_probe()
325 watchdog_init_timeout(wdog, timeout, dev); in imx2_wdt_probe()
327 watchdog_stop_ping_on_suspend(wdog); in imx2_wdt_probe()
330 imx2_wdt_set_timeout(wdog, wdog->timeout); in imx2_wdt_probe()
331 set_bit(WDOG_HW_RUNNING, &wdog->status); in imx2_wdt_probe()
336 * down counter will pull down the #WDOG interrupt line for one clock in imx2_wdt_probe()
341 return devm_watchdog_register_device(dev, wdog); in imx2_wdt_probe()
346 struct watchdog_device *wdog = platform_get_drvdata(pdev); in imx2_wdt_shutdown() local
347 struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); in imx2_wdt_shutdown()
354 imx2_wdt_set_timeout(wdog, IMX2_WDT_MAX_TIME); in imx2_wdt_shutdown()
355 imx2_wdt_ping(wdog); in imx2_wdt_shutdown()
363 struct watchdog_device *wdog = dev_get_drvdata(dev); in imx2_wdt_suspend() local
364 struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); in imx2_wdt_suspend()
369 * Don't update wdog->timeout, we'll restore the current value in imx2_wdt_suspend()
372 __imx2_wdt_set_timeout(wdog, IMX2_WDT_MAX_TIME); in imx2_wdt_suspend()
373 imx2_wdt_ping(wdog); in imx2_wdt_suspend()
388 struct watchdog_device *wdog = dev_get_drvdata(dev); in imx2_wdt_resume() local
389 struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); in imx2_wdt_resume()
401 if (watchdog_active(wdog) && !imx2_wdt_is_running(wdev)) { in imx2_wdt_resume()
407 imx2_wdt_setup(wdog); in imx2_wdt_resume()
410 imx2_wdt_set_timeout(wdog, wdog->timeout); in imx2_wdt_resume()
411 imx2_wdt_ping(wdog); in imx2_wdt_resume()