Convert at91 watchdog driver to new SoC access
authorAchim Ehrlich <aehrlich@taskit.de>
Wed, 17 Mar 2010 13:50:29 +0000 (14:50 +0100)
committertrix <trix@windriver.com>
Sat, 3 Apr 2010 20:24:27 +0000 (15:24 -0500)
This converts the at91 watchdog driver to new c structure
type to access registers of the SoC

Signed-off-by: Achim Ehrlich <aehrlich@taskit.de>
drivers/watchdog/at91sam9_wdt.c

index 5bb8b77afc868713a24d730d7ff6fab98d33465a..25afae748d611cdb47123899ed2d693b1de279ad 100644 (file)
 static int at91_wdt_settimeout(unsigned int timeout)
 {
        unsigned int reg;
-       unsigned int mr;
+       at91_wdt_t *wd  = (at91_wdt_t *) AT91_WDT_BASE;
 
        /* Check if disabled */
-       mr = at91_sys_read(AT91_WDT_MR);
-       if (mr & AT91_WDT_WDDIS) {
+       if (readl(&wd->mr) & AT91_WDT_MR_WDDIS) {
                printf("sorry, watchdog is disabled\n");
                return -1;
        }
@@ -57,19 +56,21 @@ static int at91_wdt_settimeout(unsigned int timeout)
         * Since WDV is a 12-bit counter, the maximum period is
         * 4096 / 256 = 16 seconds.
         */
-       reg = AT91_WDT_WDRSTEN  /* causes watchdog reset */
-               /* | AT91_WDT_WDRPROC   causes processor reset only */
-               | AT91_WDT_WDDBGHLT             /* disabled in debug mode */
-               | AT91_WDT_WDD                  /* restart at any time */
-               | (timeout & AT91_WDT_WDV);     /* timer value */
-       at91_sys_write(AT91_WDT_MR, reg);
+
+       reg = AT91_WDT_MR_WDRSTEN               /* causes watchdog reset */
+               | AT91_WDT_MR_WDDBGHLT          /* disabled in debug mode */
+               | AT91_WDT_MR_WDD(0xfff)        /* restart at any time */
+               | AT91_WDT_MR_WDV(timeout);     /* timer value */
+
+       writel(reg, &wd->mr);
 
        return 0;
 }
 
 void hw_watchdog_reset(void)
 {
-       at91_sys_write(AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT);
+       at91_wdt_t *wd  = (at91_wdt_t *) AT91_WDT_BASE;
+       writel(AT91_WDT_CR_WDRSTT | AT91_WDT_CR_KEY, &wd->cr);
 }
 
 void hw_watchdog_init(void)