-Index: linux-2.6.32.9/drivers/watchdog/Makefile
-===================================================================
---- linux-2.6.32.9.orig/drivers/watchdog/Makefile 2010-02-23 16:38:51.000000000 +0100
-+++ linux-2.6.32.9/drivers/watchdog/Makefile 2010-02-28 18:13:51.000000000 +0100
-@@ -113,6 +113,7 @@
+--- a/drivers/watchdog/Makefile
++++ b/drivers/watchdog/Makefile
+@@ -113,6 +113,7 @@ obj-$(CONFIG_WDT_RM9K_GPI) += rm9k_wdt.o
obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o
obj-$(CONFIG_AR7_WDT) += ar7_wdt.o
obj-$(CONFIG_TXX9_WDT) += txx9wdt.o
# PARISC Architecture
-Index: linux-2.6.32.9/drivers/watchdog/Kconfig
-===================================================================
---- linux-2.6.32.9.orig/drivers/watchdog/Kconfig 2010-02-23 16:38:51.000000000 +0100
-+++ linux-2.6.32.9/drivers/watchdog/Kconfig 2010-02-28 18:13:51.000000000 +0100
-@@ -850,6 +850,16 @@
+--- a/drivers/watchdog/Kconfig
++++ b/drivers/watchdog/Kconfig
+@@ -850,6 +850,16 @@ config TXX9_WDT
help
Hardware driver for the built-in watchdog timer on TXx9 MIPS SoCs.
# PARISC Architecture
# POWERPC Architecture
-Index: linux-2.6.32.9/drivers/watchdog/bcm63xx_wdt.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.32.9/drivers/watchdog/bcm63xx_wdt.c 2010-02-28 18:17:15.000000000 +0100
-@@ -0,0 +1,334 @@
+--- /dev/null
++++ b/drivers/watchdog/bcm63xx_wdt.c
+@@ -0,0 +1,354 @@
+/*
+ * Broadcom BCM63xx SoC watchdog driver
+ *
+#include <linux/watchdog.h>
+#include <linux/timer.h>
+#include <linux/jiffies.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
+#include <linux/resource.h>
+#include <linux/platform_device.h>
+
+#include <bcm63xx_cpu.h>
+#include <bcm63xx_io.h>
+#include <bcm63xx_regs.h>
++#include <bcm63xx_timer.h>
+
+#define PFX KBUILD_MODNAME
+
+} bcm63xx_wdt_device;
+
+static int expect_close;
-+static int timeout;
+
+static int wdt_time = WDT_DEFAULT_TIME;
+static int nowayout = WATCHDOG_NOWAYOUT;
+ bcm_writel(WDT_STOP_2, bcm63xx_wdt_device.regs + WDT_CTL_REG);
+}
+
++static void bcm63xx_wdt_isr(void *data)
++{
++ struct pt_regs *regs = get_irq_regs();
++
++ die(PFX " fire", regs);
++}
++
+static void bcm63xx_timer_tick(unsigned long unused)
+{
+ if (!atomic_dec_and_test(&bcm63xx_wdt_device.ticks)) {
+ return -ENXIO;
+ }
+
++ ret = bcm63xx_timer_register(TIMER_WDT_ID, bcm63xx_wdt_isr, NULL);
++ if (ret < 0) {
++ printk(KERN_ERR PFX
++ "failed to register wdt timer isr\n");
++ goto unmap;
++ }
++
+ if (bcm63xx_wdt_settimeout(wdt_time)) {
+ bcm63xx_wdt_settimeout(WDT_DEFAULT_TIME);
+ printk(KERN_INFO PFX
+ if (ret) {
+ printk(KERN_ERR PFX
+ "failed to register reboot_notifier\n");
-+ return ret;
++ goto unregister_timer;
+ }
+
+ ret = misc_register(&bcm63xx_wdt_miscdev);
+ if (ret < 0) {
+ printk(KERN_ERR PFX
+ "failed to register watchdog device\n");
-+ goto unmap;
++ goto unregister_reboot_notifier;
+ }
+
+ printk(KERN_INFO PFX " started, timer margin: %d sec\n", WDT_DEFAULT_TIME);
+
+ return 0;
+
-+unmap:
++unregister_reboot_notifier:
+ unregister_reboot_notifier(&bcm63xx_wdt_notifier);
++unregister_timer:
++ bcm63xx_timer_unregister(TIMER_WDT_ID);
++unmap:
+ iounmap(bcm63xx_wdt_device.regs);
+ return ret;
+}
+ iounmap(bcm63xx_wdt_device.regs);
+
+ unregister_reboot_notifier(&bcm63xx_wdt_notifier);
++ bcm63xx_timer_unregister(TIMER_WDT_ID);
+
+ return 0;
+}