#define S3C2410_WTDAT          0x04
 #define S3C2410_WTCNT          0x08
 
+#define S3C2410_WTCNT_MAXCNT   0xffff
+
 #define S3C2410_WTCON_RSTEN    (1 << 0)
 #define S3C2410_WTCON_INTEN    (1 << 2)
 #define S3C2410_WTCON_ENABLE   (1 << 5)
 #define S3C2410_WTCON_DIV64    (2 << 3)
 #define S3C2410_WTCON_DIV128   (3 << 3)
 
+#define S3C2410_WTCON_MAXDIV   0x80
+
 #define S3C2410_WTCON_PRESCALE(x)      ((x) << 8)
 #define S3C2410_WTCON_PRESCALE_MASK    (0xff << 8)
+#define S3C2410_WTCON_PRESCALE_MAX     0xff
 
 #define CONFIG_S3C2410_WATCHDOG_ATBOOT         (0)
 #define CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME   (15)
 
 /* functions */
 
+static inline unsigned int s3c2410wdt_max_timeout(struct clk *clock)
+{
+       unsigned long freq = clk_get_rate(clock);
+
+       return S3C2410_WTCNT_MAXCNT / (freq / (S3C2410_WTCON_PRESCALE_MAX + 1)
+                                      / S3C2410_WTCON_MAXDIV);
+}
+
 static inline struct s3c2410_wdt *freq_to_wdt(struct notifier_block *nb)
 {
        return container_of(nb, struct s3c2410_wdt, freq_transition);
                return ret;
        }
 
+       wdt->wdt_device.min_timeout = 1;
+       wdt->wdt_device.max_timeout = s3c2410wdt_max_timeout(wdt->clock);
+
        ret = s3c2410wdt_cpufreq_register(wdt);
        if (ret < 0) {
                dev_err(dev, "failed to register cpufreq\n");