/*
 * Copyright (c) 2016 Open-RnD Sp. z o.o.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef _STM32_IWDG_H_
#define _STM32_IWDG_H_

#include <zephyr/types.h>

/**
 * @brief Driver for Independent Watchdog (IWDG) for STM32 MCUs
 *
 * Based on reference manual:
 *   STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx
 *   advanced ARM(r)-based 32-bit MCUs
 *
 * Chapter 19: Independent watchdog (IWDG)
 *
 */


/* counter reload trigger */
#define STM32_IWDG_KR_RELOAD 0xaaaa
/* magic value for unlocking write access to PR and RLR */
#define STM32_IWDG_KR_UNLOCK 0x5555
/* watchdog start */
#define STM32_IWDG_KR_START  0xcccc

/* 19.4.1 IWDG_KR */
union __iwdg_kr {
	u32_t val;
	struct {
		u16_t key;
		u16_t rsvd;
	} bit;
};

/* 19.4.2 IWDG_PR */
union __iwdg_pr {
	u32_t val;
	struct {
		u32_t pr :3 __packed;
		u32_t rsvd__3_31 :29 __packed;
	} bit;
};

/* 19.4.3 IWDG_RLR */
union __iwdg_rlr {
	u32_t val;
	struct {
		u32_t rl :12 __packed;
		u32_t rsvd__12_31 :20 __packed;
	} bit;
};

/* 19.4.4 IWDG_SR */
union __iwdg_sr {
	u32_t val;
	struct {
		u32_t pvu :1 __packed;
		u32_t rvu :1 __packed;
		u32_t rsvd__2_31 :30 __packed;
	} bit;
};

/* 19.4.5 IWDG register map */
struct iwdg_stm32 {
	union __iwdg_kr kr;
	union __iwdg_pr pr;
	union __iwdg_rlr rlr;
	union __iwdg_sr sr;
};

#endif	/* _STM32_IWDG_H_ */
