zephyr/drivers/watchdog/wdt_sam.c

97 lines
2.0 KiB
C

/*
* Copyright (C) 2017 Intel Deutschland GmbH
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @brief Watchdog (WDT) Driver for Atmel SAM MCUs
*
* Note:
* - Once the watchdog disable bit is set, it cannot be cleared till next
* power reset, i.e, the watchdog cannot be started once stopped.
* - Since the MCU boots with WDT enabled, only basic feature (disable) is
* currently implemented for systems that don't need watchdog functionality.
*
*/
#include <watchdog.h>
#include <soc.h>
#define SYS_LOG_DOMAIN "dev/wdt_sam"
#include <logging/sys_log.h>
/* Device constant configuration parameters */
struct wdt_sam_dev_cfg {
Wdt *regs;
};
#define DEV_CFG(dev) \
((const struct wdt_sam_dev_cfg *const)(dev)->config->config_info)
static void wdt_sam_enable(struct device *dev)
{
ARG_UNUSED(dev);
SYS_LOG_ERR("Function not implemented!");
}
static int wdt_sam_disable(struct device *dev)
{
Wdt *const wdt = DEV_CFG(dev)->regs;
wdt->WDT_MR |= WDT_MR_WDDIS;
return 0;
}
static int wdt_sam_set_config(struct device *dev, struct wdt_config *config)
{
ARG_UNUSED(dev);
ARG_UNUSED(config);
SYS_LOG_ERR("Function not implemented!");
return -ENOTSUP;
}
static void wdt_sam_get_config(struct device *dev, struct wdt_config *config)
{
ARG_UNUSED(dev);
ARG_UNUSED(config);
SYS_LOG_ERR("Function not implemented!");
}
static void wdt_sam_reload(struct device *dev)
{
ARG_UNUSED(dev);
SYS_LOG_ERR("Function not implemented!");
}
static const struct wdt_driver_api wdt_sam_api = {
.enable = wdt_sam_enable,
.disable = wdt_sam_disable,
.get_config = wdt_sam_get_config,
.set_config = wdt_sam_set_config,
.reload = wdt_sam_reload
};
static int wdt_sam_init(struct device *dev)
{
#ifdef CONFIG_WDT_SAM_DISABLE_AT_BOOT
wdt_sam_disable(dev);
#endif
return 0;
}
static const struct wdt_sam_dev_cfg wdt_sam_config = {
.regs = WDT
};
DEVICE_AND_API_INIT(wdt_sam, CONFIG_WDT_SAM_DEVICE_NAME, wdt_sam_init,
NULL, &wdt_sam_config,
PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE,
&wdt_sam_api);