[U-Boot] [PATCH v2] drivers: watchdog: add MAX6373 WDT support

Michael Trimarchi michael at amarulasolutions.com
Tue Aug 18 15:33:31 CEST 2015


Hi

On Tue, Aug 18, 2015 at 3:22 PM,  <rnd4 at dave-tech.it> wrote:
> From: Andrea Scian <andrea.scian at dave.eu>
>
> MAX6373 is a simple WDT which is programmed its configuration pins
> and reset via another pin, which is usually connected to a GPIO
>
> Signed-off-by: Andrea Scian <andrea.scian at dave.eu>
> ---
>
> Changes for v2:
>         - add Kconfig support
>
>  drivers/watchdog/Kconfig       |   17 +++++++++++++++++
>  drivers/watchdog/Makefile      |    1 +
>  drivers/watchdog/max6373_wdt.c |   34 ++++++++++++++++++++++++++++++++++
>  3 files changed, 52 insertions(+)
>  create mode 100644 drivers/watchdog/max6373_wdt.c
>
> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
> index e69de29..c7c2011 100644
> --- a/drivers/watchdog/Kconfig
> +++ b/drivers/watchdog/Kconfig
> @@ -0,0 +1,17 @@
> +menu "Watchdog Timer Support"
> +
> +config MAX6373_WATCHDOG
> +       bool "Maxim MAX6373 Watchdog"
> +       depends on DM_GPIO
> +       default n
> +       help
> +         Enable MAX6373 Watchdog timer driver. This is a simple WDT which is reset
> +         via GPIO
> +
> +config MAX6373_WDT_GPIO
> +       int "Maxim MAX6373 WDT Reset GPIO"
> +       depends on MAX6373_WATCHDOG
> +       help
> +         GPIO number used by the MAX6373 driver to reset the WDT at runtime
> +
> +endmenu # menu "Watchdog Timer Support"
> diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
> index 482a4bd..5bb5f5b 100644
> --- a/drivers/watchdog/Makefile
> +++ b/drivers/watchdog/Makefile
> @@ -15,3 +15,4 @@ obj-$(CONFIG_XILINX_TB_WATCHDOG) += xilinx_tb_wdt.o
>  obj-$(CONFIG_BFIN_WATCHDOG)  += bfin_wdt.o
>  obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o
>  obj-$(CONFIG_DESIGNWARE_WATCHDOG) += designware_wdt.o
> +obj-$(CONFIG_MAX6373_WATCHDOG) += max6373_wdt.o
> diff --git a/drivers/watchdog/max6373_wdt.c b/drivers/watchdog/max6373_wdt.c
> new file mode 100644
> index 0000000..cda46af
> --- /dev/null
> +++ b/drivers/watchdog/max6373_wdt.c
> @@ -0,0 +1,34 @@
> +/*
> + * Copyright (c) 2015 DAVE Embedded Systems <devel at dave.eu>
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + *
> + * MAX6373 is a WDT which uses a simple GPIO to reset its timeout
> + *
> + * Use CONFIG_MAX6373_WDT_GPIO to define the GPIO number to use
> + */
> +
> +#include <common.h>
> +#include <asm/io.h>
> +#include <asm/gpio.h>
> +#include <watchdog.h>
> +
> +#ifndef CONFIG_MAX6373_WDT_GPIO
> +#error "Please use CONFIG_MAX6373_WDT_GPIO to define which GPIO to use"
> +#endif
> +
> +void hw_watchdog_reset(void)
> +{
> +       gpio_set_value(CONFIG_MAX6373_WDT_GPIO,
> +               !gpio_get_value(CONFIG_MAX6373_WDT_GPIO));
> +}
> +

According to the datasheet timeout can be select from 3 additional pin. Plus
if a timeout is defined you can avoid to change the value always. For example
if the gpio pin is on an expander you avoid to send an i2c message always.
Half of timeout is always enough. Even because this invest a family of device
I don't think that we require a name. Can be watchdog-gpio?

Michael

> +void hw_watchdog_init(void)
> +{
> +       if (gpio_request(CONFIG_MAX6373_WDT_GPIO, "MAX6373 WDT")) {
> +               printf("Cannot request GPIO %d for MAX6373 WDT\n",
> +                       CONFIG_MAX6373_WDT_GPIO);
> +               return;
> +       }
> +       gpio_direction_output(CONFIG_MAX6373_WDT_GPIO, 1);
> +}
> --
> 1.7.9.5
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot


More information about the U-Boot mailing list