#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/miscdevice.h>
#include <linux/watchdog.h>
#include <linux/ioport.h>
#include <linux/uaccess.h>
#define ESB_MODULE_NAME "i6300ESB timer"
#define ESB_CONFIG_REG 0x60
#define ESB_LOCK_REG 0x68
#define ESB_TIMER1_REG(w) ((w)->base + 0x00)
#define ESB_TIMER2_REG(w) ((w)->base + 0x04)
#define ESB_GINTSR_REG(w) ((w)->base + 0x08)
#define ESB_RELOAD_REG(w) ((w)->base + 0x0c)
#define ESB_WDT_FUNC (0x01 << 2)
#define ESB_WDT_ENABLE (0x01 << 1)
#define ESB_WDT_LOCK (0x01 << 0)
#define ESB_WDT_REBOOT (0x01 << 5)
#define ESB_WDT_FREQ (0x01 << 2)
#define ESB_WDT_INTTYPE (0x03 << 0)
#define ESB_WDT_TIMEOUT (0x01 << 9)
#define ESB_WDT_RELOAD (0x01 << 8)
#define ESB_HEARTBEAT_MIN 1
#define ESB_HEARTBEAT_MAX 2046
#define ESB_HEARTBEAT_DEFAULT 30
#define ESB_HEARTBEAT_RANGE __MODULE_STRING(ESB_HEARTBEAT_MIN) \
"<heartbeat<" __MODULE_STRING(ESB_HEARTBEAT_MAX)
module_param(heartbeat, int, 0);
MODULE_PARM_DESC(heartbeat,
"Watchdog heartbeat in seconds. (" ESB_HEARTBEAT_RANGE
", default=" __MODULE_STRING(ESB_HEARTBEAT_DEFAULT) ")");
static bool nowayout = WATCHDOG_NOWAYOUT;
module_param(nowayout, bool, 0);
MODULE_PARM_DESC(nowayout,
"Watchdog cannot be stopped once started (default="