aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabio Porcedda <fabio.porcedda@gmail.com>2013-02-14 03:14:25 -0500
committerWim Van Sebroeck <wim@iguana.be>2013-03-01 06:53:45 -0500
commitc1fd5f6402050b2463d0610b94f050fedf1b5019 (patch)
tree7ff33e78c2a4f40b3465d163c03382db0d4d500f
parent490ac7af8b71069ba0c733052c5f448ac070c947 (diff)
watchdog: add timeout-sec property binding
this patchset add the timeout-sec property to the following drivers: orion_wdt, pnx4008_wdt, s3c2410_wdt and at91sam9_wdt. The at91sam9_wdt is tested on evk-pr3, the other drivers are compile tested only. Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com> Cc: Andrew Lunn <andrew@lunn.ch> Cc: Jason Cooper <jason@lakedaemon.net> Cc: Wolfram Sang <w.sang@pengutronix.de> Cc: Masanari Iida <standby24x7@gmail.com> Cc: Ben Dooks <ben-linux@fluff.org> Cc: Kukjin Kim <kgene.kim@samsung.com> Cc: Andrew Victor <linux@maxim.org.za> Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Cc: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
-rw-r--r--Documentation/devicetree/bindings/watchdog/atmel-wdt.txt4
-rw-r--r--Documentation/devicetree/bindings/watchdog/marvel.txt5
-rw-r--r--Documentation/devicetree/bindings/watchdog/pnx4008-wdt.txt4
-rw-r--r--Documentation/devicetree/bindings/watchdog/samsung-wdt.txt3
-rw-r--r--drivers/watchdog/at91sam9_wdt.c7
-rw-r--r--drivers/watchdog/orion_wdt.c10
-rw-r--r--drivers/watchdog/pnx4008_wdt.c7
-rw-r--r--drivers/watchdog/s3c2410_wdt.c6
8 files changed, 31 insertions, 15 deletions
diff --git a/Documentation/devicetree/bindings/watchdog/atmel-wdt.txt b/Documentation/devicetree/bindings/watchdog/atmel-wdt.txt
index 2957ebb5aa71..fcdd48f7dcff 100644
--- a/Documentation/devicetree/bindings/watchdog/atmel-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/atmel-wdt.txt
@@ -7,9 +7,13 @@ Required properties:
7- reg: physical base address of the controller and length of memory mapped 7- reg: physical base address of the controller and length of memory mapped
8 region. 8 region.
9 9
10Optional properties:
11- timeout-sec: contains the watchdog timeout in seconds.
12
10Example: 13Example:
11 14
12 watchdog@fffffd40 { 15 watchdog@fffffd40 {
13 compatible = "atmel,at91sam9260-wdt"; 16 compatible = "atmel,at91sam9260-wdt";
14 reg = <0xfffffd40 0x10>; 17 reg = <0xfffffd40 0x10>;
18 timeout-sec = <10>;
15 }; 19 };
diff --git a/Documentation/devicetree/bindings/watchdog/marvel.txt b/Documentation/devicetree/bindings/watchdog/marvel.txt
index 0b2503ab0a05..5dc8d30061ce 100644
--- a/Documentation/devicetree/bindings/watchdog/marvel.txt
+++ b/Documentation/devicetree/bindings/watchdog/marvel.txt
@@ -5,10 +5,15 @@ Required Properties:
5- Compatibility : "marvell,orion-wdt" 5- Compatibility : "marvell,orion-wdt"
6- reg : Address of the timer registers 6- reg : Address of the timer registers
7 7
8Optional properties:
9
10- timeout-sec : Contains the watchdog timeout in seconds
11
8Example: 12Example:
9 13
10 wdt@20300 { 14 wdt@20300 {
11 compatible = "marvell,orion-wdt"; 15 compatible = "marvell,orion-wdt";
12 reg = <0x20300 0x28>; 16 reg = <0x20300 0x28>;
17 timeout-sec = <10>;
13 status = "okay"; 18 status = "okay";
14 }; 19 };
diff --git a/Documentation/devicetree/bindings/watchdog/pnx4008-wdt.txt b/Documentation/devicetree/bindings/watchdog/pnx4008-wdt.txt
index 7c7f6887c796..556d06c17c92 100644
--- a/Documentation/devicetree/bindings/watchdog/pnx4008-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/pnx4008-wdt.txt
@@ -5,9 +5,13 @@ Required properties:
5- reg: physical base address of the controller and length of memory mapped 5- reg: physical base address of the controller and length of memory mapped
6 region. 6 region.
7 7
8Optional properties:
9- timeout-sec: contains the watchdog timeout in seconds.
10
8Example: 11Example:
9 12
10 watchdog@4003C000 { 13 watchdog@4003C000 {
11 compatible = "nxp,pnx4008-wdt"; 14 compatible = "nxp,pnx4008-wdt";
12 reg = <0x4003C000 0x1000>; 15 reg = <0x4003C000 0x1000>;
16 timeout-sec = <10>;
13 }; 17 };
diff --git a/Documentation/devicetree/bindings/watchdog/samsung-wdt.txt b/Documentation/devicetree/bindings/watchdog/samsung-wdt.txt
index ce0d8e78ed8f..2aa486cc1ff6 100644
--- a/Documentation/devicetree/bindings/watchdog/samsung-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/samsung-wdt.txt
@@ -9,3 +9,6 @@ Required properties:
9- reg : base physical address of the controller and length of memory mapped 9- reg : base physical address of the controller and length of memory mapped
10 region. 10 region.
11- interrupts : interrupt number to the cpu. 11- interrupts : interrupt number to the cpu.
12
13Optional properties:
14- timeout-sec : contains the watchdog timeout in seconds.
diff --git a/drivers/watchdog/at91sam9_wdt.c b/drivers/watchdog/at91sam9_wdt.c
index 8038b20284ce..be37dde4f864 100644
--- a/drivers/watchdog/at91sam9_wdt.c
+++ b/drivers/watchdog/at91sam9_wdt.c
@@ -56,7 +56,7 @@
56 56
57/* User land timeout */ 57/* User land timeout */
58#define WDT_HEARTBEAT 15 58#define WDT_HEARTBEAT 15
59static int heartbeat = WDT_HEARTBEAT; 59static int heartbeat;
60module_param(heartbeat, int, 0); 60module_param(heartbeat, int, 0);
61MODULE_PARM_DESC(heartbeat, "Watchdog heartbeats in seconds. " 61MODULE_PARM_DESC(heartbeat, "Watchdog heartbeats in seconds. "
62 "(default = " __MODULE_STRING(WDT_HEARTBEAT) ")"); 62 "(default = " __MODULE_STRING(WDT_HEARTBEAT) ")");
@@ -176,6 +176,7 @@ static const struct watchdog_ops at91_wdt_ops = {
176static struct watchdog_device at91_wdt_dev = { 176static struct watchdog_device at91_wdt_dev = {
177 .info = &at91_wdt_info, 177 .info = &at91_wdt_info,
178 .ops = &at91_wdt_ops, 178 .ops = &at91_wdt_ops,
179 .timeout = WDT_HEARTBEAT,
179 .min_timeout = 1, 180 .min_timeout = 1,
180 .max_timeout = 0xFFFF, 181 .max_timeout = 0xFFFF,
181}; 182};
@@ -194,8 +195,8 @@ static int __init at91wdt_probe(struct platform_device *pdev)
194 return -ENOMEM; 195 return -ENOMEM;
195 } 196 }
196 197
197 at91_wdt_dev.timeout = heartbeat;
198 at91_wdt_dev.parent = &pdev->dev; 198 at91_wdt_dev.parent = &pdev->dev;
199 watchdog_init_timeout(&at91_wdt_dev, heartbeat, &pdev->dev);
199 watchdog_set_nowayout(&at91_wdt_dev, nowayout); 200 watchdog_set_nowayout(&at91_wdt_dev, nowayout);
200 201
201 /* Set watchdog */ 202 /* Set watchdog */
@@ -212,7 +213,7 @@ static int __init at91wdt_probe(struct platform_device *pdev)
212 mod_timer(&at91wdt_private.timer, jiffies + WDT_TIMEOUT); 213 mod_timer(&at91wdt_private.timer, jiffies + WDT_TIMEOUT);
213 214
214 pr_info("enabled (heartbeat=%d sec, nowayout=%d)\n", 215 pr_info("enabled (heartbeat=%d sec, nowayout=%d)\n",
215 heartbeat, nowayout); 216 at91_wdt_dev.timeout, nowayout);
216 217
217 return 0; 218 return 0;
218} 219}
diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
index 87ed2b9886a3..da577980d390 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -140,6 +140,7 @@ static const struct watchdog_ops orion_wdt_ops = {
140static struct watchdog_device orion_wdt = { 140static struct watchdog_device orion_wdt = {
141 .info = &orion_wdt_info, 141 .info = &orion_wdt_info,
142 .ops = &orion_wdt_ops, 142 .ops = &orion_wdt_ops,
143 .min_timeout = 1,
143}; 144};
144 145
145static int orion_wdt_probe(struct platform_device *pdev) 146static int orion_wdt_probe(struct platform_device *pdev)
@@ -164,12 +165,9 @@ static int orion_wdt_probe(struct platform_device *pdev)
164 165
165 wdt_max_duration = WDT_MAX_CYCLE_COUNT / wdt_tclk; 166 wdt_max_duration = WDT_MAX_CYCLE_COUNT / wdt_tclk;
166 167
167 if ((heartbeat < 1) || (heartbeat > wdt_max_duration)) 168 orion_wdt.timeout = wdt_max_duration;
168 heartbeat = wdt_max_duration;
169
170 orion_wdt.timeout = heartbeat;
171 orion_wdt.min_timeout = 1;
172 orion_wdt.max_timeout = wdt_max_duration; 169 orion_wdt.max_timeout = wdt_max_duration;
170 watchdog_init_timeout(&orion_wdt, heartbeat, &pdev->dev);
173 171
174 watchdog_set_nowayout(&orion_wdt, nowayout); 172 watchdog_set_nowayout(&orion_wdt, nowayout);
175 ret = watchdog_register_device(&orion_wdt); 173 ret = watchdog_register_device(&orion_wdt);
@@ -179,7 +177,7 @@ static int orion_wdt_probe(struct platform_device *pdev)
179 } 177 }
180 178
181 pr_info("Initial timeout %d sec%s\n", 179 pr_info("Initial timeout %d sec%s\n",
182 heartbeat, nowayout ? ", nowayout" : ""); 180 orion_wdt.timeout, nowayout ? ", nowayout" : "");
183 return 0; 181 return 0;
184} 182}
185 183
diff --git a/drivers/watchdog/pnx4008_wdt.c b/drivers/watchdog/pnx4008_wdt.c
index de1f3fa1d787..a3684a30eb69 100644
--- a/drivers/watchdog/pnx4008_wdt.c
+++ b/drivers/watchdog/pnx4008_wdt.c
@@ -142,6 +142,7 @@ static const struct watchdog_ops pnx4008_wdt_ops = {
142static struct watchdog_device pnx4008_wdd = { 142static struct watchdog_device pnx4008_wdd = {
143 .info = &pnx4008_wdt_ident, 143 .info = &pnx4008_wdt_ident,
144 .ops = &pnx4008_wdt_ops, 144 .ops = &pnx4008_wdt_ops,
145 .timeout = DEFAULT_HEARTBEAT,
145 .min_timeout = 1, 146 .min_timeout = 1,
146 .max_timeout = MAX_HEARTBEAT, 147 .max_timeout = MAX_HEARTBEAT,
147}; 148};
@@ -151,8 +152,7 @@ static int pnx4008_wdt_probe(struct platform_device *pdev)
151 struct resource *r; 152 struct resource *r;
152 int ret = 0; 153 int ret = 0;
153 154
154 if (heartbeat < 1 || heartbeat > MAX_HEARTBEAT) 155 watchdog_init_timeout(&pnx4008_wdd, heartbeat, &pdev->dev);
155 heartbeat = DEFAULT_HEARTBEAT;
156 156
157 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 157 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
158 wdt_base = devm_ioremap_resource(&pdev->dev, r); 158 wdt_base = devm_ioremap_resource(&pdev->dev, r);
@@ -167,7 +167,6 @@ static int pnx4008_wdt_probe(struct platform_device *pdev)
167 if (ret) 167 if (ret)
168 goto out; 168 goto out;
169 169
170 pnx4008_wdd.timeout = heartbeat;
171 pnx4008_wdd.bootstatus = (readl(WDTIM_RES(wdt_base)) & WDOG_RESET) ? 170 pnx4008_wdd.bootstatus = (readl(WDTIM_RES(wdt_base)) & WDOG_RESET) ?
172 WDIOF_CARDRESET : 0; 171 WDIOF_CARDRESET : 0;
173 watchdog_set_nowayout(&pnx4008_wdd, nowayout); 172 watchdog_set_nowayout(&pnx4008_wdd, nowayout);
@@ -181,7 +180,7 @@ static int pnx4008_wdt_probe(struct platform_device *pdev)
181 } 180 }
182 181
183 dev_info(&pdev->dev, "PNX4008 Watchdog Timer: heartbeat %d sec\n", 182 dev_info(&pdev->dev, "PNX4008 Watchdog Timer: heartbeat %d sec\n",
184 heartbeat); 183 pnx4008_wdd.timeout);
185 184
186 return 0; 185 return 0;
187 186
diff --git a/drivers/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c
index 6419c61594fd..c1a221cbeae4 100644
--- a/drivers/watchdog/s3c2410_wdt.c
+++ b/drivers/watchdog/s3c2410_wdt.c
@@ -53,7 +53,7 @@
53#define CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME (15) 53#define CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME (15)
54 54
55static bool nowayout = WATCHDOG_NOWAYOUT; 55static bool nowayout = WATCHDOG_NOWAYOUT;
56static int tmr_margin = CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME; 56static int tmr_margin;
57static int tmr_atboot = CONFIG_S3C2410_WATCHDOG_ATBOOT; 57static int tmr_atboot = CONFIG_S3C2410_WATCHDOG_ATBOOT;
58static int soft_noboot; 58static int soft_noboot;
59static int debug; 59static int debug;
@@ -226,6 +226,7 @@ static struct watchdog_ops s3c2410wdt_ops = {
226static struct watchdog_device s3c2410_wdd = { 226static struct watchdog_device s3c2410_wdd = {
227 .info = &s3c2410_wdt_ident, 227 .info = &s3c2410_wdt_ident,
228 .ops = &s3c2410wdt_ops, 228 .ops = &s3c2410wdt_ops,
229 .timeout = CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME,
229}; 230};
230 231
231/* interrupt handler code */ 232/* interrupt handler code */
@@ -356,7 +357,8 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
356 /* see if we can actually set the requested timer margin, and if 357 /* see if we can actually set the requested timer margin, and if
357 * not, try the default value */ 358 * not, try the default value */
358 359
359 if (s3c2410wdt_set_heartbeat(&s3c2410_wdd, tmr_margin)) { 360 watchdog_init_timeout(&s3c2410_wdd, tmr_margin, &pdev->dev);
361 if (s3c2410wdt_set_heartbeat(&s3c2410_wdd, s3c2410_wdd.timeout)) {
360 started = s3c2410wdt_set_heartbeat(&s3c2410_wdd, 362 started = s3c2410wdt_set_heartbeat(&s3c2410_wdd,
361 CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME); 363 CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME);
362 364