From: Fabio Porcedda <fabio.porcedda@gmail.com>
To: Wim Van Sebroeck <wim@iguana.be>,
	linux-watchdog@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Nicolas Ferre <nicolas.ferre@atmel.com>,
	Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>,
	Andrew Victor <linux@maxim.org.za>,
	Jason Cooper <jason@lakedaemon.net>, Andrew Lunn <andrew@lunn.ch>,
	Ben Dooks <ben-linux@fluff.org>,
	Kukjin Kim <kgene.kim@samsung.com>
Cc: devicetree-discuss@lists.ozlabs.org, Wenyou Yang <wenyou.yang@atmel.com>
Subject: [PATCH v8 2/7] watchdog: core: dt: add support for the timeout-sec dt property
Date: Wed, 13 Feb 2013 13:22:25 +0100	[thread overview]
Message-ID: <1360758150-23004-3-git-send-email-fabio.porcedda@gmail.com> (raw)
In-Reply-To: <1360758150-23004-1-git-send-email-fabio.porcedda@gmail.com>
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
---
 Documentation/watchdog/watchdog-kernel-api.txt | 10 ++++++++
 drivers/watchdog/watchdog_core.c               | 34 ++++++++++++++++++++++++++
 include/linux/watchdog.h                       |  2 ++
 3 files changed, 46 insertions(+)
diff --git a/Documentation/watchdog/watchdog-kernel-api.txt b/Documentation/watchdog/watchdog-kernel-api.txt
index 086638f..44098c2 100644
--- a/Documentation/watchdog/watchdog-kernel-api.txt
+++ b/Documentation/watchdog/watchdog-kernel-api.txt
@@ -212,3 +212,13 @@ driver specific data to and a pointer to the data itself.
 The watchdog_get_drvdata function allows you to retrieve driver specific data.
 The argument of this function is the watchdog device where you want to retrieve
 data from. The function returns the pointer to the driver specific data.
+
+To initialize the timeout field use the following function:
+
+extern void watchdog_init_timeout(struct watchdog_device *wdd,
+                                  unsigned int parm_timeout,
+                                  struct device_node *node);
+
+The watchdog_init_timeout function allows you to initialize the timeout field
+using the module timeout parameter or retrieving the timeout-sec property from
+the device tree.
diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
index f10fa31..b9e9148 100644
--- a/drivers/watchdog/watchdog_core.c
+++ b/drivers/watchdog/watchdog_core.c
@@ -36,6 +36,7 @@
 #include <linux/init.h>		/* For __init/__exit/... */
 #include <linux/idr.h>		/* For ida_* macros */
 #include <linux/err.h>		/* For IS_ERR macros */
+#include <linux/of.h>		/* For of_get_timeout_sec */
 
 #include "watchdog_core.h"	/* For watchdog_dev_register/... */
 
@@ -57,6 +58,39 @@ bool watchdog_is_valid_timeout(struct watchdog_device *wdd, uint timeout)
 EXPORT_SYMBOL_GPL(watchdog_is_valid_timeout);
 
 /**
+ * watchdog_init_timeout() - initialize the timeout field
+ * @parm: timeout module parameter, it takes precedence over the
+ *        timeout-sec property.
+ * @node: Retrieve the timeout-sec property only if the parm_timeout
+ *        is out of bounds.
+ */
+int watchdog_init_timeout(struct watchdog_device *wdd, uint parm,
+			  struct device *dev)
+{
+	uint timeout = 0;
+	int ret = 0;
+
+	if (watchdog_is_valid_timeout(wdd, parm)) {
+		wdd->timeout = parm;
+		return ret;
+	}
+	if (parm)
+		ret = -EINVAL;
+
+	/* try to get the timeout_sec property */
+	if (!dev->of_node)
+		return ret;
+	of_property_read_u32(dev->of_node, "timeout-sec", &timeout);
+	if (watchdog_is_valid_timeout(wdd, timeout))
+		wdd->timeout = timeout;
+	else
+		ret = -EINVAL;
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(watchdog_init_timeout);
+
+/**
  * watchdog_register_device() - register a watchdog device
  * @wdd: watchdog device
  *
diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h
index 9ae945e..b1023dd 100644
--- a/include/linux/watchdog.h
+++ b/include/linux/watchdog.h
@@ -132,6 +132,8 @@ static inline void *watchdog_get_drvdata(struct watchdog_device *wdd)
 /* drivers/watchdog/watchdog_core.c */
 extern bool watchdog_is_valid_timeout(struct watchdog_device *wdd,
 				      uint timeout);
+extern int watchdog_init_timeout(struct watchdog_device *wdd,
+				  uint parm_timeout, struct device *dev);
 extern int watchdog_register_device(struct watchdog_device *);
 extern void watchdog_unregister_device(struct watchdog_device *);
 
-- 
1.8.1.1
next prev parent reply	other threads:[~2013-02-13 12:22 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-13 12:22 [PATCH v8 0/7] watchdog: dt: add support for the timeout-sec dt property Fabio Porcedda
2013-02-13 12:22 ` [PATCH v8 1/7] watchdog: core: add and use watchdog_is_valid_timeout function Fabio Porcedda
2013-02-13 12:22 ` Fabio Porcedda [this message]
2013-02-13 12:22 ` [PATCH v8 3/7] watchdog: orion_wdt: add timeout-sec property binding Fabio Porcedda
2013-02-13 12:22 ` [PATCH v8 4/7] watchdog: pnx4008: " Fabio Porcedda
2013-02-13 12:22 ` [PATCH v8 5/7] watchdog: s3c2410_wdt: " Fabio Porcedda
2013-02-13 12:22 ` [PATCH v8 6/7] watchdog: at91sam9_wdt: " Fabio Porcedda
2013-02-13 12:22 ` [PATCH v8 7/7] watchdog: orion_wdt: move the min_timeout initialization Fabio Porcedda
2013-02-14  7:21 ` [PATCH v8 0/7] watchdog: dt: add support for the timeout-sec dt property Fabio Porcedda
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox
  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):
  git send-email \
    --in-reply-to=1360758150-23004-3-git-send-email-fabio.porcedda@gmail.com \
    --to=fabio.porcedda@gmail.com \
    --cc=andrew@lunn.ch \
    --cc=ben-linux@fluff.org \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=jason@lakedaemon.net \
    --cc=kgene.kim@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=linux@maxim.org.za \
    --cc=nicolas.ferre@atmel.com \
    --cc=plagnioj@jcrosoft.com \
    --cc=wenyou.yang@atmel.com \
    --cc=wim@iguana.be \
    /path/to/YOUR_REPLY
  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
  Be sure your reply has a Subject: header at the top and a blank line
  before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).