[PATCH 10/12] ARM: at91: make watchdog drivers soc independent
Nicolas Ferre
nicolas.ferre at atmel.com
Mon Nov 14 10:20:54 EST 2011
On 11/13/2011 07:12 PM, Jean-Christophe PLAGNIOL-VILLARD :
> switch the watchdog drivers to resource and pass it via platform_device
>
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
> Cc: Nicolas Ferre <nicolas.ferre at atmel.com>
> Cc: linux-watchdog at vger.kernel.org
> ---
> HI Wim,
>
> this is part of a at91 cleanup
> if you don't mind I'll apply via at91 tree
>
> Best Regards,
> J.
> arch/arm/mach-at91/at91_devices.c | 122 +++++++++++++++++++++++++
> arch/arm/mach-at91/at91cap9_devices.c | 11 ++-
> arch/arm/mach-at91/at91sam9260_devices.c | 11 ++-
> arch/arm/mach-at91/at91sam9261_devices.c | 11 ++-
> arch/arm/mach-at91/at91sam9263_devices.c | 11 ++-
> arch/arm/mach-at91/at91sam9g45_devices.c | 11 ++-
> arch/arm/mach-at91/at91sam9rl_devices.c | 11 ++-
> arch/arm/mach-at91/include/mach/at91cap9.h | 2 +-
> arch/arm/mach-at91/include/mach/at91sam9260.h | 2 +-
> arch/arm/mach-at91/include/mach/at91sam9261.h | 2 +-
> arch/arm/mach-at91/include/mach/at91sam9263.h | 2 +-
> arch/arm/mach-at91/include/mach/at91sam9g45.h | 2 +-
> arch/arm/mach-at91/include/mach/at91sam9rl.h | 2 +-
> drivers/watchdog/at91sam9_wdt.c | 22 ++++-
> drivers/watchdog/at91sam9_wdt.h | 6 +-
> 15 files changed, 210 insertions(+), 18 deletions(-)
> create mode 100644 arch/arm/mach-at91/at91_devices.c
>
> diff --git a/arch/arm/mach-at91/at91_devices.c b/arch/arm/mach-at91/at91_devices.c
> new file mode 100644
> index 0000000..d0d55b4
> --- /dev/null
> +++ b/arch/arm/mach-at91/at91_devices.c
I do not understand what it the purpose of this file...
> @@ -0,0 +1,122 @@
> +/*
> + * arch/arm/mach-at91/at91cap9_devices.c
> + *
> + * Copyright (C) 2007 Stelian Pop <stelian.pop at leadtechdesign.com>
> + * Copyright (C) 2007 Lead Tech Design <www.leadtechdesign.com>
> + * Copyright (C) 2007 Atmel Corporation.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + */
> +
> +#include <mach/gpio.h>
> +
> +#include "generic.h"
> +
> +void at91cap9_configure_dbgu_pins(void)
> +{
> + at91_set_A_periph(AT91_PIN_PC30, 0); /* DRXD */
> + at91_set_A_periph(AT91_PIN_PC31, 1); /* DTXD */
> +}
> +
> +void at91cap9_configure_usart0_pins(unsigned pins)
> +{
> + at91_set_A_periph(AT91_PIN_PA22, 1); /* TXD0 */
> + at91_set_A_periph(AT91_PIN_PA23, 0); /* RXD0 */
> +
> + if (pins & ATMEL_UART_RTS)
> + at91_set_A_periph(AT91_PIN_PA24, 0); /* RTS0 */
> + if (pins & ATMEL_UART_CTS)
> + at91_set_A_periph(AT91_PIN_PA25, 0); /* CTS0 */
> +}
> +
> +void at91cap9_configure_usart1_pins(unsigned pins)
> +{
> + at91_set_A_periph(AT91_PIN_PD0, 1); /* TXD1 */
> + at91_set_A_periph(AT91_PIN_PD1, 0); /* RXD1 */
> +
> + if (pins & ATMEL_UART_RTS)
> + at91_set_B_periph(AT91_PIN_PD7, 0); /* RTS1 */
> + if (pins & ATMEL_UART_CTS)
> + at91_set_B_periph(AT91_PIN_PD8, 0); /* CTS1 */
> +}
> +
> +void at91cap9_configure_usart2_pins(unsigned pins)
> +{
> + at91_set_A_periph(AT91_PIN_PD2, 1); /* TXD2 */
> + at91_set_A_periph(AT91_PIN_PD3, 0); /* RXD2 */
> +
> + if (pins & ATMEL_UART_RTS)
> + at91_set_B_periph(AT91_PIN_PD5, 0); /* RTS2 */
> + if (pins & ATMEL_UART_CTS)
> + at91_set_B_periph(AT91_PIN_PD6, 0); /* CTS2 */
> +}
> +
> +void at91rm9200_configure_dbgu_pins(void)
> +{
> + at91_set_A_periph(AT91_PIN_PA30, 0); /* DRXD */
> + at91_set_A_periph(AT91_PIN_PA31, 1); /* DTXD */
> +}
> +
> +void at91rm9200_configure_usart0_pins(unsigned pins)
> +{
> + at91_set_A_periph(AT91_PIN_PA17, 1); /* TXD0 */
> + at91_set_A_periph(AT91_PIN_PA18, 0); /* RXD0 */
> +
> + if (pins & ATMEL_UART_CTS)
> + at91_set_A_periph(AT91_PIN_PA20, 0); /* CTS0 */
> +
> + if (pins & ATMEL_UART_RTS) {
> + /*
> + * AT91RM9200 Errata #39 - RTS0 is not internally connected to PA21.
> + * We need to drive the pin manually. Default is off (RTS is active low).
> + */
> + at91_set_gpio_output(AT91_PIN_PA21, 1);
> + }
> +}
> +
> +void at91rm9200_configure_usart1_pins(unsigned pins)
> +{
> + at91_set_A_periph(AT91_PIN_PB20, 1); /* TXD1 */
> + at91_set_A_periph(AT91_PIN_PB21, 0); /* RXD1 */
> +
> + if (pins & ATMEL_UART_RI)
> + at91_set_A_periph(AT91_PIN_PB18, 0); /* RI1 */
> + if (pins & ATMEL_UART_DTR)
> + at91_set_A_periph(AT91_PIN_PB19, 0); /* DTR1 */
> + if (pins & ATMEL_UART_DCD)
> + at91_set_A_periph(AT91_PIN_PB23, 0); /* DCD1 */
> + if (pins & ATMEL_UART_CTS)
> + at91_set_A_periph(AT91_PIN_PB24, 0); /* CTS1 */
> + if (pins & ATMEL_UART_DSR)
> + at91_set_A_periph(AT91_PIN_PB25, 0); /* DSR1 */
> + if (pins & ATMEL_UART_RTS)
> + at91_set_A_periph(AT91_PIN_PB26, 0); /* RTS1 */
> +}
> +
> +void at91rm9200_configure_usart2_pins(unsigned pins)
> +{
> + at91_set_A_periph(AT91_PIN_PA22, 0); /* RXD2 */
> + at91_set_A_periph(AT91_PIN_PA23, 1); /* TXD2 */
> +
> + if (pins & ATMEL_UART_CTS)
> + at91_set_B_periph(AT91_PIN_PA30, 0); /* CTS2 */
> + if (pins & ATMEL_UART_RTS)
> + at91_set_B_periph(AT91_PIN_PA31, 0); /* RTS2 */
> +}
> +
> +void at91rm9200_configure_usart3_pins(unsigned pins)
> +{
> + at91_set_B_periph(AT91_PIN_PA5, 1); /* TXD3 */
> + at91_set_B_periph(AT91_PIN_PA6, 0); /* RXD3 */
> +
> + if (pins & ATMEL_UART_CTS)
> + at91_set_B_periph(AT91_PIN_PB1, 0); /* CTS3 */
> + if (pins & ATMEL_UART_RTS)
> + at91_set_B_periph(AT91_PIN_PB0, 0); /* RTS3 */
> +}
> +
> +
> diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c
> index 3262a7e..019dac0 100644
> --- a/arch/arm/mach-at91/at91cap9_devices.c
> +++ b/arch/arm/mach-at91/at91cap9_devices.c
> @@ -694,10 +694,19 @@ static void __init at91_add_device_rtt(void)
> * -------------------------------------------------------------------- */
>
> #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
> +static struct resource wdt_resources[] = {
> + {
> + .start = AT91CAP9_BASE_WDT,
> + .end = AT91CAP9_BASE_WDT + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }
> +};
> +
> static struct platform_device at91cap9_wdt_device = {
> .name = "at91_wdt",
> .id = -1,
> - .num_resources = 0,
> + .resource = wdt_resources,
> + .num_resources = ARRAY_SIZE(wdt_resources),
> };
>
> static void __init at91_add_device_watchdog(void)
> diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c
> index 63cbfb8..9cdaffa 100644
> --- a/arch/arm/mach-at91/at91sam9260_devices.c
> +++ b/arch/arm/mach-at91/at91sam9260_devices.c
> @@ -738,10 +738,19 @@ static void __init at91_add_device_rtt(void)
> * -------------------------------------------------------------------- */
>
> #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
> +static struct resource wdt_resources[] = {
> + {
> + .start = AT91SAM9260_BASE_WDT,
> + .end = AT91SAM9260_BASE_WDT + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }
> +};
> +
> static struct platform_device at91sam9260_wdt_device = {
> .name = "at91_wdt",
> .id = -1,
> - .num_resources = 0,
> + .resource = wdt_resources,
> + .num_resources = ARRAY_SIZE(wdt_resources),
> };
>
> static void __init at91_add_device_watchdog(void)
> diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c
> index d5bd1e7..c59e1e9 100644
> --- a/arch/arm/mach-at91/at91sam9261_devices.c
> +++ b/arch/arm/mach-at91/at91sam9261_devices.c
> @@ -624,10 +624,19 @@ static void __init at91_add_device_rtt(void)
> * -------------------------------------------------------------------- */
>
> #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
> +static struct resource wdt_resources[] = {
> + {
> + .start = AT91SAM9261_BASE_WDT,
> + .end = AT91SAM9261_BASE_WDT + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }
> +};
> +
> static struct platform_device at91sam9261_wdt_device = {
> .name = "at91_wdt",
> .id = -1,
> - .num_resources = 0,
> + .resource = wdt_resources,
> + .num_resources = ARRAY_SIZE(wdt_resources),
> };
>
> static void __init at91_add_device_watchdog(void)
> diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c
> index 5d2b061..b5f4e25 100644
> --- a/arch/arm/mach-at91/at91sam9263_devices.c
> +++ b/arch/arm/mach-at91/at91sam9263_devices.c
> @@ -996,10 +996,19 @@ static void __init at91_add_device_rtt(void)
> * -------------------------------------------------------------------- */
>
> #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
> +static struct resource wdt_resources[] = {
> + {
> + .start = AT91SAM9263_BASE_WDT,
> + .end = AT91SAM9263_BASE_WDT + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }
> +};
> +
> static struct platform_device at91sam9263_wdt_device = {
> .name = "at91_wdt",
> .id = -1,
> - .num_resources = 0,
> + .resource = wdt_resources,
> + .num_resources = ARRAY_SIZE(wdt_resources),
> };
>
> static void __init at91_add_device_watchdog(void)
> diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
> index bb2ba0c..3b91706 100644
> --- a/arch/arm/mach-at91/at91sam9g45_devices.c
> +++ b/arch/arm/mach-at91/at91sam9g45_devices.c
> @@ -1133,10 +1133,19 @@ static void __init at91_add_device_trng(void) {}
> * -------------------------------------------------------------------- */
>
> #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
> +static struct resource wdt_resources[] = {
> + {
> + .start = AT91SAM9G45_BASE_WDT,
> + .end = AT91SAM9G45_BASE_WDT + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }
> +};
> +
> static struct platform_device at91sam9g45_wdt_device = {
> .name = "at91_wdt",
> .id = -1,
> - .num_resources = 0,
> + .resource = wdt_resources,
> + .num_resources = ARRAY_SIZE(wdt_resources),
> };
>
> static void __init at91_add_device_watchdog(void)
> diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c
> index f9b423b..c7961b4 100644
> --- a/arch/arm/mach-at91/at91sam9rl_devices.c
> +++ b/arch/arm/mach-at91/at91sam9rl_devices.c
> @@ -709,10 +709,19 @@ static void __init at91_add_device_rtt(void)
> * -------------------------------------------------------------------- */
>
> #if defined(CONFIG_AT91SAM9X_WATCHDOG) || defined(CONFIG_AT91SAM9X_WATCHDOG_MODULE)
> +static struct resource wdt_resources[] = {
> + {
> + .start = AT91SAM9RL_BASE_WDT,
> + .end = AT91SAM9RL_BASE_WDT + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }
> +};
> +
> static struct platform_device at91sam9rl_wdt_device = {
> .name = "at91_wdt",
> .id = -1,
> - .num_resources = 0,
> + .resource = wdt_resources,
> + .num_resources = ARRAY_SIZE(wdt_resources),
> };
>
> static void __init at91_add_device_watchdog(void)
> diff --git a/arch/arm/mach-at91/include/mach/at91cap9.h b/arch/arm/mach-at91/include/mach/at91cap9.h
> index f2e7c34..844cba1 100644
> --- a/arch/arm/mach-at91/include/mach/at91cap9.h
> +++ b/arch/arm/mach-at91/include/mach/at91cap9.h
> @@ -86,7 +86,6 @@
> #define AT91_AIC (0xfffff000 - AT91_BASE_SYS)
> #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
> #define AT91_RSTC (0xfffffd00 - AT91_BASE_SYS)
> -#define AT91_WDT (0xfffffd40 - AT91_BASE_SYS)
> #define AT91_GPBR (cpu_is_at91cap9_revB() ? \
> (0xfffffd50 - AT91_BASE_SYS) : \
> (0xfffffd60 - AT91_BASE_SYS))
> @@ -102,6 +101,7 @@
> #define AT91CAP9_BASE_SHDWC 0xfffffd10
> #define AT91CAP9_BASE_RTT 0xfffffd20
> #define AT91CAP9_BASE_PIT 0xfffffd30
> +#define AT91CAP9_BASE_WDT 0xfffffd40
>
> #define AT91_USART0 AT91CAP9_BASE_US0
> #define AT91_USART1 AT91CAP9_BASE_US1
> diff --git a/arch/arm/mach-at91/include/mach/at91sam9260.h b/arch/arm/mach-at91/include/mach/at91sam9260.h
> index 6a13e9d..8a26045 100644
> --- a/arch/arm/mach-at91/include/mach/at91sam9260.h
> +++ b/arch/arm/mach-at91/include/mach/at91sam9260.h
> @@ -86,7 +86,6 @@
> #define AT91_DBGU (0xfffff200 - AT91_BASE_SYS)
> #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
> #define AT91_RSTC (0xfffffd00 - AT91_BASE_SYS)
> -#define AT91_WDT (0xfffffd40 - AT91_BASE_SYS)
> #define AT91_GPBR (0xfffffd50 - AT91_BASE_SYS)
>
> #define AT91SAM9260_BASE_ECC 0xffffe800
> @@ -98,6 +97,7 @@
> #define AT91SAM9260_BASE_SHDWC 0xfffffd10
> #define AT91SAM9260_BASE_RTT 0xfffffd20
> #define AT91SAM9260_BASE_PIT 0xfffffd30
> +#define AT91SAM9260_BASE_WDT 0xfffffd40
>
> #define AT91_USART0 AT91SAM9260_BASE_US0
> #define AT91_USART1 AT91SAM9260_BASE_US1
> diff --git a/arch/arm/mach-at91/include/mach/at91sam9261.h b/arch/arm/mach-at91/include/mach/at91sam9261.h
> index f9b5163..df2ddfd 100644
> --- a/arch/arm/mach-at91/include/mach/at91sam9261.h
> +++ b/arch/arm/mach-at91/include/mach/at91sam9261.h
> @@ -71,7 +71,6 @@
> #define AT91_DBGU (0xfffff200 - AT91_BASE_SYS)
> #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
> #define AT91_RSTC (0xfffffd00 - AT91_BASE_SYS)
> -#define AT91_WDT (0xfffffd40 - AT91_BASE_SYS)
> #define AT91_GPBR (0xfffffd50 - AT91_BASE_SYS)
>
> #define AT91SAM9261_BASE_SMC 0xffffec00
> @@ -81,6 +80,7 @@
> #define AT91SAM9261_BASE_SHDWC 0xfffffd10
> #define AT91SAM9261_BASE_RTT 0xfffffd20
> #define AT91SAM9261_BASE_PIT 0xfffffd30
> +#define AT91SAM9261_BASE_WDT 0xfffffd40
>
> #define AT91_USART0 AT91SAM9261_BASE_US0
> #define AT91_USART1 AT91SAM9261_BASE_US1
> diff --git a/arch/arm/mach-at91/include/mach/at91sam9263.h b/arch/arm/mach-at91/include/mach/at91sam9263.h
> index e8fb5bd..f958ac9 100644
> --- a/arch/arm/mach-at91/include/mach/at91sam9263.h
> +++ b/arch/arm/mach-at91/include/mach/at91sam9263.h
> @@ -81,7 +81,6 @@
> #define AT91_AIC (0xfffff000 - AT91_BASE_SYS)
> #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
> #define AT91_RSTC (0xfffffd00 - AT91_BASE_SYS)
> -#define AT91_WDT (0xfffffd40 - AT91_BASE_SYS)
> #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS)
>
> #define AT91SAM9263_BASE_ECC0 0xffffe000
> @@ -97,6 +96,7 @@
> #define AT91SAM9263_BASE_SHDWC 0xfffffd10
> #define AT91SAM9263_BASE_RTT0 0xfffffd20
> #define AT91SAM9263_BASE_PIT 0xfffffd30
> +#define AT91SAM9263_BASE_WDT 0xfffffd40
> #define AT91SAM9263_BASE_RTT1 0xfffffd50
>
> #define AT91_USART0 AT91SAM9263_BASE_US0
> diff --git a/arch/arm/mach-at91/include/mach/at91sam9g45.h b/arch/arm/mach-at91/include/mach/at91sam9g45.h
> index 5f3453e..65098c3 100644
> --- a/arch/arm/mach-at91/include/mach/at91sam9g45.h
> +++ b/arch/arm/mach-at91/include/mach/at91sam9g45.h
> @@ -93,7 +93,6 @@
> #define AT91_AIC (0xfffff000 - AT91_BASE_SYS)
> #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
> #define AT91_RSTC (0xfffffd00 - AT91_BASE_SYS)
> -#define AT91_WDT (0xfffffd40 - AT91_BASE_SYS)
> #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS)
> #define AT91_RTC (0xfffffdb0 - AT91_BASE_SYS)
>
> @@ -108,6 +107,7 @@
> #define AT91SAM9G45_BASE_SHDWC 0xfffffd10
> #define AT91SAM9G45_BASE_RTT 0xfffffd20
> #define AT91SAM9G45_BASE_PIT 0xfffffd30
> +#define AT91SAM9G45_BASE_WDT 0xfffffd40
>
> #define AT91_USART0 AT91SAM9G45_BASE_US0
> #define AT91_USART1 AT91SAM9G45_BASE_US1
> diff --git a/arch/arm/mach-at91/include/mach/at91sam9rl.h b/arch/arm/mach-at91/include/mach/at91sam9rl.h
> index e012e69..6aee975 100644
> --- a/arch/arm/mach-at91/include/mach/at91sam9rl.h
> +++ b/arch/arm/mach-at91/include/mach/at91sam9rl.h
> @@ -75,7 +75,6 @@
> #define AT91_DBGU (0xfffff200 - AT91_BASE_SYS)
> #define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
> #define AT91_RSTC (0xfffffd00 - AT91_BASE_SYS)
> -#define AT91_WDT (0xfffffd40 - AT91_BASE_SYS)
> #define AT91_SCKCR (0xfffffd50 - AT91_BASE_SYS)
> #define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS)
> #define AT91_RTC (0xfffffe00 - AT91_BASE_SYS)
> @@ -91,6 +90,7 @@
> #define AT91SAM9RL_BASE_SHDWC 0xfffffd10
> #define AT91SAM9RL_BASE_RTT 0xfffffd20
> #define AT91SAM9RL_BASE_PIT 0xfffffd30
> +#define AT91SAM9RL_BASE_WDT 0xfffffd40
>
> #define AT91_USART0 AT91SAM9RL_BASE_US0
> #define AT91_USART1 AT91SAM9RL_BASE_US1
> diff --git a/drivers/watchdog/at91sam9_wdt.c b/drivers/watchdog/at91sam9_wdt.c
> index 87445b2..0056256 100644
> --- a/drivers/watchdog/at91sam9_wdt.c
> +++ b/drivers/watchdog/at91sam9_wdt.c
> @@ -35,6 +35,11 @@
>
> #define DRV_NAME "AT91SAM9 Watchdog"
>
> +#define wdt_read(field) \
> + __raw_readl(at91wdt_private.base + field)
> +#define wdt_write(field, val) \
> + __raw_writel((val), at91wdt_private.base + field)
> +
> /* AT91SAM9 watchdog runs a 12bit counter @ 256Hz,
> * use this to convert a watchdog
> * value from/to milliseconds.
> @@ -63,6 +68,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started "
> static void at91_ping(unsigned long data);
>
> static struct {
> + void __iomem *base;
> unsigned long next_heartbeat; /* the next_heartbeat for the timer */
> unsigned long open;
> char expect_close;
> @@ -77,7 +83,7 @@ static struct {
> */
> static inline void at91_wdt_reset(void)
> {
> - at91_sys_write(AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT);
> + wdt_write(AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT);
> }
>
> /*
> @@ -132,7 +138,7 @@ static int at91_wdt_settimeout(unsigned int timeout)
> unsigned int mr;
>
> /* Check if disabled */
> - mr = at91_sys_read(AT91_WDT_MR);
> + mr = wdt_read(AT91_WDT_MR);
> if (mr & AT91_WDT_WDDIS) {
> printk(KERN_ERR DRV_NAME": sorry, watchdog is disabled\n");
> return -EIO;
> @@ -149,7 +155,7 @@ static int at91_wdt_settimeout(unsigned int timeout)
> | 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);
> + wdt_write(AT91_WDT_MR, reg);
>
> return 0;
> }
> @@ -248,12 +254,22 @@ static struct miscdevice at91wdt_miscdev = {
>
> static int __init at91wdt_probe(struct platform_device *pdev)
> {
> + struct resource *r;
> int res;
>
> if (at91wdt_miscdev.parent)
> return -EBUSY;
> at91wdt_miscdev.parent = &pdev->dev;
>
> + r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + if (!r)
> + return -ENODEV;
Blank line here
> + at91wdt_private.base = ioremap(r->start, resource_size(r));
> + if (!at91wdt_private.base) {
> + dev_err(&pdev->dev, "failed to map registers, aborting.\n");
> + return -ENOMEM;
> + }
> +
> /* Set watchdog */
> res = at91_wdt_settimeout(ms_to_ticks(WDT_HW_TIMEOUT * 1000));
> if (res)
> diff --git a/drivers/watchdog/at91sam9_wdt.h b/drivers/watchdog/at91sam9_wdt.h
> index 757f9ca..c6fbb2e6 100644
> --- a/drivers/watchdog/at91sam9_wdt.h
> +++ b/drivers/watchdog/at91sam9_wdt.h
> @@ -16,11 +16,11 @@
> #ifndef AT91_WDT_H
> #define AT91_WDT_H
>
> -#define AT91_WDT_CR (AT91_WDT + 0x00) /* Watchdog Control Register */
> +#define AT91_WDT_CR 0x00 /* Watchdog Control Register */
> #define AT91_WDT_WDRSTT (1 << 0) /* Restart */
> #define AT91_WDT_KEY (0xa5 << 24) /* KEY Password */
>
> -#define AT91_WDT_MR (AT91_WDT + 0x04) /* Watchdog Mode Register */
> +#define AT91_WDT_MR 0x04 /* Watchdog Mode Register */
> #define AT91_WDT_WDV (0xfff << 0) /* Counter Value */
> #define AT91_WDT_WDFIEN (1 << 12) /* Fault Interrupt Enable */
> #define AT91_WDT_WDRSTEN (1 << 13) /* Reset Processor */
> @@ -30,7 +30,7 @@
> #define AT91_WDT_WDDBGHLT (1 << 28) /* Debug Halt */
> #define AT91_WDT_WDIDLEHLT (1 << 29) /* Idle Halt */
>
> -#define AT91_WDT_SR (AT91_WDT + 0x08) /* Watchdog Status Register */
> +#define AT91_WDT_SR 0x08 /* Watchdog Status Register */
> #define AT91_WDT_WDUNF (1 << 0) /* Watchdog Underflow */
> #define AT91_WDT_WDERR (1 << 1) /* Watchdog Error */
>
--
Nicolas Ferre
More information about the linux-arm-kernel
mailing list