summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/Kconfig2
-rw-r--r--drivers/Makefile1
-rw-r--r--drivers/watchdog/Kconfig9
-rw-r--r--drivers/watchdog/Makefile1
-rw-r--r--drivers/watchdog/wd_core.c57
5 files changed, 69 insertions, 1 deletions
diff --git a/drivers/Kconfig b/drivers/Kconfig
index c52c56a56a..089dc3f99b 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -15,7 +15,7 @@ source "drivers/mfd/Kconfig"
source "drivers/led/Kconfig"
source "drivers/eeprom/Kconfig"
source "drivers/input/Kconfig"
-
+source "drivers/watchdog/Kconfig"
source "drivers/pwm/Kconfig"
endmenu
diff --git a/drivers/Makefile b/drivers/Makefile
index 3aefc1221d..72c4058fea 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -15,3 +15,4 @@ obj-$(CONFIG_LED) += led/
obj-y += eeprom/
obj-$(CONFIG_PWM) += pwm/
obj-y += input/
+obj-y += watchdog/
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
new file mode 100644
index 0000000000..c734dfe282
--- /dev/null
+++ b/drivers/watchdog/Kconfig
@@ -0,0 +1,9 @@
+menuconfig WATCHDOG
+ bool "Watchdog support "
+ help
+ Many platforms support a watchdog to keep track of a working machine.
+ This framework provides routines to handle these watchdogs.
+
+if WATCHDOG
+
+endif
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
new file mode 100644
index 0000000000..630f1b6ca2
--- /dev/null
+++ b/drivers/watchdog/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_WATCHDOG) += wd_core.o
diff --git a/drivers/watchdog/wd_core.c b/drivers/watchdog/wd_core.c
new file mode 100644
index 0000000000..3d0cfc635d
--- /dev/null
+++ b/drivers/watchdog/wd_core.c
@@ -0,0 +1,57 @@
+/*
+ * (c) 2012 Juergen Beisert <kernel@pengutronix.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <common.h>
+#include <command.h>
+#include <errno.h>
+#include <linux/ctype.h>
+#include <watchdog.h>
+
+/*
+ * Note: this simple framework supports one watchdog only.
+ */
+static struct watchdog *watchdog;
+
+int watchdog_register(struct watchdog *wd)
+{
+ if (watchdog != NULL)
+ return -EBUSY;
+
+ watchdog = wd;
+ return 0;
+}
+EXPORT_SYMBOL(watchdog_register);
+
+int watchdog_deregister(struct watchdog *wd)
+{
+ if (watchdog == NULL || wd != watchdog)
+ return -ENODEV;
+
+ watchdog = NULL;
+ return 0;
+}
+EXPORT_SYMBOL(watchdog_deregister);
+
+/*
+ * start, stop or retrigger the watchdog
+ * timeout in [seconds]. timeout of '0' will disable the watchdog (if possible)
+ */
+int watchdog_set_timeout(unsigned timeout)
+{
+ if (watchdog == NULL)
+ return -ENODEV;
+
+ return watchdog->set_timeout(watchdog, timeout);
+}
+EXPORT_SYMBOL(watchdog_set_timeout);