diff options
author | Rebecca Schultz Zavin <rebecca@android.com> | 2011-01-11 15:35:47 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:36:53 -0800 |
commit | f7ddc6b94d99d639a9b5786c77aeec2d7d8f529e (patch) | |
tree | e67d3376c8f0d05643c74868e8c6f522372410d9 /drivers/watchdog | |
parent | 79ce9284291ff5f57a09debf9eea92adb53a7543 (diff) |
watchdog: tegra_wdt: Several changes to watchdog driver
Add a config option to enable the watchdog driver from probe
Reduce the default timeout to 30 seconds
Read the reset reason and print a messge if the last reboot was
due to watchdog reset
Change-Id: I7500ef236089b06ffcff3d8e7d86a5b9060b59cb
Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
Diffstat (limited to 'drivers/watchdog')
-rw-r--r-- | drivers/watchdog/Kconfig | 6 | ||||
-rw-r--r-- | drivers/watchdog/tegra_wdt.c | 10 |
2 files changed, 15 insertions, 1 deletions
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index aef91be8e2da..cb460109b95f 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -222,6 +222,12 @@ config TEGRA_WATCHDOG To compile this driver as a module, choose M here: the module will be called tegra_wdt. +config TEGRA_WATCHDOG_ENABLE_ON_PROBE + tristate "Tegra watchdog" + depends on ARCH_TEGRA && TEGRA_WATCHDOG + help + Say Y here to enable the tegra watchdog at driver + probe time, rather than when the device is opened. config EP93XX_WATCHDOG tristate "EP93xx Watchdog" diff --git a/drivers/watchdog/tegra_wdt.c b/drivers/watchdog/tegra_wdt.c index d7a9d7609a1f..d7ad6238d4f3 100644 --- a/drivers/watchdog/tegra_wdt.c +++ b/drivers/watchdog/tegra_wdt.c @@ -50,7 +50,7 @@ #define WDT_SEL_TMR1 (0 << 4) #define WDT_SYS_RST (1 << 2) -static int heartbeat = 60; +static int heartbeat = 30; struct tegra_wdt { struct miscdevice miscdev; @@ -208,6 +208,7 @@ static int tegra_wdt_probe(struct platform_device *pdev) { struct resource *res_src, *res_wdt, *res_irq; struct tegra_wdt *wdt; + u32 src; int ret = 0; if (pdev->id != -1) { @@ -262,6 +263,10 @@ static int tegra_wdt_probe(struct platform_device *pdev) goto fail; } + src = readl(wdt->wdt_source); + if (src & BIT(12)) + dev_info(&pdev->dev, "last reset due to watchdog timeout\n"); + tegra_wdt_disable(wdt); ret = request_irq(res_irq->start, tegra_wdt_interrupt, IRQF_DISABLED, @@ -292,6 +297,9 @@ static int tegra_wdt_probe(struct platform_device *pdev) platform_set_drvdata(pdev, wdt); tegra_wdt_dev = wdt; +#ifdef CONFIG_TEGRA_WATCHDOG_ENABLE_ON_PROBE + tegra_wdt_enable(wdt); +#endif return 0; fail: if (wdt->irq != -1) |