# Kconfig - STM32 IWDG configuration
#
# Copyright (c) 2016 Open-RnD Sp. z o.o.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

if SOC_FAMILY_STM32

config IWDG_STM32
	bool "Independent Watchdog (IWDG) Driver for STM32 family of MCUs"
	help
	 Enable IWDG driver for STM32 line of MCUs

config IWDG_STM32_PRESCALER
	int "Prescaler divider for clock feeding the IWDG"
	depends on IWDG_STM32
	default 4
	range 4 256
	help
	 Set the prescaler divider for the clock feeding the Independent
	 Watchdog. Higher values indicate that the watchdog will need to
	 be reloaded more frequently. Allowed values: 4, 8, 16, 32, 64,
	 128, 256. This setting combined with reload counter defines the
	 watchdog countdown time.

config IWDG_STM32_RELOAD_COUNTER
	int "Value for IWDG counter"
	depends on IWDG_STM32
	default 2048
	range 0 4095
	help
	 Configure the value to be loaded into the watchdog's counter each
	 time a reload operation is performed. This value combined with
	 prescaler setting defines the watchdog countdown time.

config IWDG_STM32_START_AT_BOOT
	bool "Start IWDG during boot"
	depends on IWDG_STM32
	default n
	help
	 Enable this setting to allow IWDG to be automatically started
	 during device initialization. Note that once IWDG is started
	 it must be reloaded before the counter reaches 0, otherwise
	 the MCU will be reset.

config IWDG_STM32_DEVICE_NAME
	string "Device name for Independent Watchdog (IWDG)"
	depends on IWDG_STM32
	default "IWDG"
	help
	 Set the name used by IWDG device during registration.

endif # SOC_FAMILY_STM32
