| /* |
| * 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 void wdt_sam_disable(struct device *dev) |
| { |
| Wdt *const wdt = DEV_CFG(dev)->regs; |
| |
| wdt->WDT_MR |= WDT_MR_WDDIS; |
| } |
| |
| 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); |