--- a/drivers/watchdog/ar7_wdt.c 2009-01-25 01:17:01.000000000 +1300 +++ b/drivers/watchdog/ar7_wdt.c 2009-01-25 01:19:15.000000000 +1300 @@ -293,12 +293,26 @@ .fops = &ar7_wdt_fops, }; +#define AR7_WDT_HARDWARE_ENABLE 0x10 + static int __init ar7_wdt_init(void) { int rc; + u32 *bootcr; + u32 bootcr_value; ar7_wdt_get_regs(); + /* arch/mips/ar7/clocks.c is the only other thing that reads this */ + bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4); + bootcr_value = *bootcr; + iounmap(bootcr); + + if (!(bootcr_value & AR7_WDT_HARDWARE_ENABLE)) { + printk(KERN_INFO DRVNAME ": watchdog disabled in hardware (bootcr=%#x)\n", bootcr_value); + return -ENODEV; + } + if (!request_mem_region(ar7_regs_wdt, sizeof(struct ar7_wdt), LONGNAME)) { printk(KERN_WARNING DRVNAME ": watchdog I/O region busy\n");