# Kconfig - Watchdog configuration options
#
#
# Copyright (c) 2015 Intel Corporation
#
# 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.
#

#
# Watchdog options
#
menuconfig WATCHDOG
	bool
	prompt "Watchdog Support"
	default n
	help
	Include support for watchdogs.

if WATCHDOG
config WDT_DW
	bool "Enable DesignWare Watchdog"
	default n
	help
	Enable watchdog timer.

config WDT_DW_CLOCK_GATE
	bool "Enable clock gating"
	depends on WDT_DW
	select CLOCK_CONTROL
	default n
	help
	Enable clock gating on WDT DesignWare controller

config WDT_DW_CLOCK_GATE_DRV_NAME
	string "Clock gating driver name"
	depends on WDT_DW_CLOCK_GATE
	default ""

config WDT_DW_CLOCK_GATE_SUBSYS
	int "Clock controller's subsystem"
	depends on WDT_DW_CLOCK_GATE
	default 0

config WDT_DW_DRV_NAME
	string "Driver instance name"
	default "WATCHDOG"
	depends on WDT_DW
	help
	Designware WDT driver instance name

config WDT_DW_BASE_ADDR
	hex "Base address"
	depends on WDT_DW
	help
	Base address to access WDT DesignWare controller registers

config WDT_DW_IRQ
	int "Interrupt number"
	depends on WDT_DW
	help
	DesignWare WDT interrupt number

config WDT_DW_IRQ_PRI
	int "Interrupt priority"
	depends on WDT_DW
	help
	DesignWare WDT interrupt priority

config WDT_QMSI
	bool "QMSI Watchdog driver"
	default n
	depends on QMSI_DRIVERS
	help
	This option enables the QMSI watchdog driver.

	This driver is simply a shim driver based on the watchdog
	driver provided by the QMSI BSP. For more information about
	QMSI BSP see CONFIG_QMSI_DRIVERS.

config WDT_QMSI_DRV_NAME
	string "Driver instance name"
	default "WATCHDOG"
	depends on WDT_QMSI
	help
	QMSI driver instance name

config WDT_QMSI_IRQ
	int "Interrupt number"
	depends on WDT_QMSI
	help
	Watchdog interrupt number

config WDT_QMSI_IRQ_PRI
	int "Interrupt priority"
	depends on WDT_QMSI
	help
	Watchdog interrupt priority

endif
