tree-wide: fix assorted typos all over the place
[linux-2.6.git] / drivers / watchdog / coh901327_wdt.c
index fecb307..923cc68 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/bitops.h>
 #include <linux/uaccess.h>
 #include <linux/clk.h>
+#include <linux/delay.h>
 
 #define DRV_NAME "WDOG COH 901 327"
 
@@ -92,6 +93,8 @@ static struct clk *clk;
 static void coh901327_enable(u16 timeout)
 {
        u16 val;
+       unsigned long freq;
+       unsigned long delay_ns;
 
        clk_enable(clk);
        /* Restart timer if it is disabled */
@@ -102,6 +105,14 @@ static void coh901327_enable(u16 timeout)
        /* Acknowledge any pending interrupt so it doesn't just fire off */
        writew(U300_WDOG_IER_WILL_BARK_IRQ_ACK_ENABLE,
               virtbase + U300_WDOG_IER);
+       /*
+        * The interrupt is cleared in the 32 kHz clock domain.
+        * Wait 3 32 kHz cycles for it to take effect
+        */
+       freq = clk_get_rate(clk);
+       delay_ns = DIV_ROUND_UP(1000000000, freq); /* Freq to ns and round up */
+       delay_ns = 3 * delay_ns; /* Wait 3 cycles */
+       ndelay(delay_ns);
        /* Enable the watchdog interrupt */
        writew(U300_WDOG_IMR_WILL_BARK_IRQ_ENABLE, virtbase + U300_WDOG_IMR);
        /* Activate the watchdog timer */
@@ -497,7 +508,7 @@ void coh901327_watchdog_reset(void)
         * deactivating the watchdog before it is shut down by it.
         *
         * NOTE: on future versions of the watchdog, this restriction is
-        * gone: the watchdog will be reloaded with a defaul value (1 min)
+        * gone: the watchdog will be reloaded with a default value (1 min)
         * instead of last value, and you can conveniently set the watchdog
         * timeout to 10ms (value = 1) without any problems.
         */