#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

menu "Timer Driver Support"

config ARCH_HAVE_PWM_PULSECOUNT
	bool
	default n

config ARCH_HAVE_PWM_OVERWRITE
	bool
	default n

config ARCH_HAVE_PWM_DEADTIME
	bool
	default n

config ARCH_HAVE_PWM_MULTICHAN
	bool
	default n

config PWM
	bool "PWM Driver Support"
	default n
	---help---
		This selection enables building of the "upper-half" PWM driver.
		See include/nuttx/timers/pwm.h for further PWM driver information.

if PWM

config PWM_PULSECOUNT
	bool "PWM Pulse Count Support"
	default n
	depends on ARCH_HAVE_PWM_PULSECOUNT
	---help---
		Some hardware will support generation of a fixed number of pulses.
		This might be used, for example to support a stepper motor.  If the
		hardware will support a fixed pulse count, then this configuration
		should be set to enable the capability.

config PWM_OVERWRITE
	bool "PWM Overwrite Support"
	default n
	depends on ARCH_HAVE_PWM_OVERWRITE
	---help---
		Some hardware will support generation of a pin overwrite with 0 or
		1 without the need to wait for an end of cycle. The overwrite is
		controlled from an application level the same way duty cycle or
		frequency is modified.

config PWM_DEADTIME
	bool "PWM Deadtime Support"
	default n
	depends on ARCH_HAVE_PWM_DEADTIME
	---help---
		Some hardware will support deadtime generators that automatically
		insert output activation delay for complementary PWM outputs. This
		is usefull for H-bridge motor control for example. The deadtime
		values are set from application level via the same IOCTL that sets
		up duty cycle and frequency.

		For detailed description about deadtime functionality please refer
		to architecture manuals and datasheets.

config PWM_MULTICHAN
	bool "PWM Multiple Output Channel Support"
	default n
	depends on ARCH_HAVE_PWM_MULTICHAN
	depends on !PWM_PULSECOUNT
	---help---
		Enables support for multiple output channels per timer.

if PWM_MULTICHAN

config PWM_NCHANNELS
	int "Number of Output Channels Per Timer"
	default 1
	range 1 16
	---help---
		Specifies the number of output channels per timer.  Each timer
		may support fewer output channels than this value.

endif # PWM_MULTICHAN
endif # PWM

config CAPTURE
	bool "Capture Driver Support"
	default n
	---help---
		This selection enables building of the "upper-half" Capture driver.
		See include/nuttx/timers/capture.h for further Capture driver information.

config TIMER
	bool "Timer Support"
	default n
	---help---
		This selection enables building of the "upper-half" timer
		driver. See include/nuttx/timers/timer.h for further timer driver
		information.

if TIMER

config TIMER_ARCH
	bool "Timer Arch Implementation"
	select ARCH_HAVE_TICKLESS
	select ARCH_HAVE_TIMEKEEPING
	select SCHED_TICKLESS_LIMIT_MAX_SLEEP if SCHED_TICKLESS
	select SCHED_TICKLESS_TICK_ARGUMENT if SCHED_TICKLESS
	---help---
		Implement timer arch API on top of timer driver interface.

endif # TIMER

config ONESHOT
	bool "Oneshot timer driver"
	default n
	---help---
		This selection enables building of the "upper-half" oneshot timer
		driver. See include/nuttx/timers/oneshot.h for further oneshot timer
		driver information.

if ONESHOT

config ALARM_ARCH
	bool "Alarm Arch Implementation"
	select ARCH_HAVE_TICKLESS
	select ARCH_HAVE_TIMEKEEPING
	select SCHED_TICKLESS_ALARM if SCHED_TICKLESS
	select SCHED_TICKLESS_LIMIT_MAX_SLEEP if SCHED_TICKLESS
	select SCHED_TICKLESS_TICK_ARGUMENT if SCHED_TICKLESS
	---help---
		Implement alarm arch API on top of oneshot driver interface.

endif # ONESHOT

menuconfig RTC
	bool "RTC Driver Support"
	default n
	---help---
		This selection enables configuration of a real time clock (RTCdriver.
		See include/nuttx/timers/rtc.h for further RTC driver information.
		Most RTC drivers are MCU specific and may require other specific
		settings.

if RTC

config RTC_DATETIME
	bool "Date/Time RTC Support"
	default n
	---help---
		There are two general types of RTC:  (1) A simple battery backed
		counter that keeps the time when power is down, and (2) a full
		date / time RTC the provides the date and time information, often in
		BCD format.  If RTC_DATETIME is selected, it specifies this second kind
		of RTC. In this case, the RTC is used to "seed" the normal NuttX timer
		and the NuttX system timer provides for higher resolution time.

if !RTC_DATETIME

config RTC_HIRES
	bool "Hi-Res RTC Support"
	default n
	---help---
		If RTC_DATETIME not selected, then the simple, battery backed counter
		is used.  There are two different implementations of such simple
		counters based on the time resolution of the counter: The typical RTC
		keeps time to resolution of 1 second, usually supporting a 32-bit
		time_t value.  In this case, the RTC is used to "seed" the normal NuttX
		timer and the NuttX timer provides for higherresoution time.

		If RTC_HIRES is enabled in the NuttX configuration, then the RTC
		provides higher resolution time and completely replaces the system
		timer for purpose of date and time.

config RTC_FREQUENCY
	int "Hi-Res RTC frequency"
	default 1
	depends on RTC_HIRES
	---help---
		If RTC_HIRES is defined, then the frequency of the high resolution RTC
		must be provided.  If RTC_HIRES is not defined, RTC_FREQUENCY is
		assumed to be one Hz.

config RTC_ADJTIME
	bool "RTC Adjustment Support"
	default N
	depends on RTC_HIRES
	---help---
		Enable support for adjtime() to adjust RTC run rate. The following
		interface must be provided by RTC driver:

			int up_rtc_adjtime(long ppb);

endif # !RTC_DATETIME

config RTC_ALARM
	bool "RTC Alarm Support"
	default n
	---help---
		Enable if the RTC hardware supports setting of an alarm.  A callback
		function will be executed when the alarm goes off.

config RTC_NALARMS
	int "Number of alarms"
	default 1
	depends on RTC_ALARM
	---help---
		Number of alarms supported by the hardware.

config RTC_DRIVER
	bool "RTC Driver Support"
	default n
	---help---
		This selection enables building of the "upper-half" RTC
		driver. See include/nuttx/timers/rtc.h for further RTC driver
		information.

if RTC_DRIVER

config RTC_ARCH
	bool "RTC Arch Implementation"
	default n
	---help---
		Implement RTC arch API on top of RTC driver interface.

config RTC_PERIODIC
	bool "RTC Periodic Interrupts"
	default n
	---help---
		Add interrupt controls for RTCs that support periodic interrupts.

config RTC_IOCTL
	bool "RTC IOCTLs"
	default n
	---help---
		Support the RTC interface ioctl() method.  This allows you to add
		architecture-specific RTC operations to the RTC interface

endif # RTC_DRIVER

config RTC_EXTERNAL
	bool "External RTC Support"
	default n
	---help---
		In modern MCUs, the RTC is usually implement as an internal
		peripheral to the MCU.  An option is to use an external RTC
		connected to the MCU typically via SPI or I2C.

		If an external RTC is connect to the MCU through some bus, then the
		RTC will not be available to the system until after the system
		fully boots up and is able to access the bus.  In that case, this
		setting must be included to suppress attempts to initialize the RTC
		early in the boot sequence.

config RTC_DSXXXX
	bool "DS130x/DS323x RTC Driver"
	default n
	select I2C
	select RTC_DATETIME
	depends on RTC_EXTERNAL
	---help---
		Enables support for the Maxim Integrated DS3231 I2C RTC timer.

if RTC_DSXXXX

choice
	prompt "Maxim Integrated RTC"
	default RTC_DS3231

config RTC_DS1302
	bool "DS1302"
	---help---
		Enables support for the Maxim Integrated DS1302 serial RTC timer.

config RTC_DS1307
	bool "DS1307"
	---help---
		Enables support for the Maxim Integrated DS1307 I2C RTC timer.

config RTC_DS3231
	bool "DS3231"
	---help---
		Enables support for the Maxim Integrated DS3231 I2C RTC timer.

config RTC_DS3232
	bool "DS3232"
	---help---
		Enables support for the Maxim Integrated DS3232 I2C RTC timer.

config RTC_DS3234
	bool "DS3234"
	depends on EXPERIMENTAL
	---help---
		Enables support for the Maxim Integrated DS3234 SPI RTC timer.

		Not yet implemented.

endchoice # Maxim Integrated RTC

config DS3231_I2C_FREQUENCY
	int "DS1307/DS323x I2C frequency"
	default 400000
	range 1 400000

endif # RTC_DSXXXX

config RTC_PCF85263
	bool "PCF85263 RTC Driver"
	default n
	select I2C
	select RTC_DATETIME
	depends on RTC_EXTERNAL
	---help---
		Enables support for the NXP PCF85263 I2C RTC timer.

if RTC_PCF85263

config PCF85263_I2C_FREQUENCY
	int "PCF85263 I2C frequency"
	default 400000
	range 1 400000

endif # RTC_PCF85263

config RTC_PL031
	bool "PL031 RTC Support"
	default n

config RTC_MCP794XX
	bool "MCP794XX RTC Driver"
	default n
	select I2C
	select RTC_DATETIME
	depends on RTC_EXTERNAL
	---help---
		Enables support for the Microchip MCP794XX I2C RTC timer.

if RTC_MCP794XX

config MCP794XX_DATETIME_UTC
	bool "Store datetime in UTC"
	default n
	---help---
		If set, the datetime is stored in UTC timezone instead of timezone
		defined by local time.

config MCP794XX_I2C_FREQUENCY
	int "MCP794XX I2C frequency"
	default 400000
	range 1 400000

endif # RTC_MCP794XX

config RTC_RX8010SJ
	bool "RX8010SJ RTC Driver"
	default n
	select I2C
	select RTC_DATETIME
	depends on RTC_EXTERNAL
	---help---
		Enables support for the EPSON RX-8010SJ I2C RTC timer.

if RTC_RX8010SJ

config RX8010SJ_I2C_FREQUENCY
	int "RX8010SJ I2C frequency"
	default 400000
	range 1 400000

endif # RTC_RX8010SJ

config RTC_RPMSG
	bool "RPMSG RTC Driver"
	default n
	depends on RPMSG
	select ARCH_HAVE_RTC_SUBSECONDS

config RTC_RPMSG_SERVER
	bool "The RTC RPMSG Role"
	depends on RPMSG

config RTC_RPMSG_SERVER_NAME
	string "The name of RTC RPMSG Server"
	depends on RTC_RPMSG
	---help---
		The proc name of RTC server. Client requests time from
		specified name of remote proc.

config RTC_RPMSG_SYNC_BASETIME
	bool "Update g_basetime from rpmsg."
	default n
	depends on !RTC_RPMSG_SERVER && !CLOCK_TIMEKEEPING
	---help---
		Prevent g_basetime differences in multi-core situations.

endif # RTC

menuconfig WATCHDOG
	bool "Watchdog Timer Support"
	default n
	---help---
		This selection enables building of the "upper-half" watchdog timer
		driver. See include/nuttx/timers/watchdog.h for further watchdog timer driver
		information.

if WATCHDOG

config WATCHDOG_DEVPATH
	string "Watchdog Device Path"
	default "/dev/watchdog0"
	---help---
		Please, check how your specific chip or board uses this symbol.
		FYI: It's NOT used by the Auto-monitor feature.

config WATCHDOG_MAGIC_V
	bool "Watchdog Device Magic num"
	default y
	---help---
		The watchdog can be stopped by writing 'V' to the watchdog's device node

config WATCHDOG_PANIC_NOTIFIER
	bool "Enable watchdog panic notifier"
	default n
	---help---
		When system PANIC, wdog_notifier() will be callled to disable the watchdog,
		this is an useful option for debug if you want to keep crash scene.

menuconfig WATCHDOG_AUTOMONITOR
	bool "Auto-monitor"
	---help---
		The auto-monitor provides an OS-internal mechanism for automatically
		start and repeatedly reset the WDTs that were previous selected.
		Once the Auto-monitor is enabled, it will reset all
		registered watchdog timers. If you start a specific WDT, the auto-monitor
		will stop for that WDT and the application should take care of this from
		now on.

if WATCHDOG_AUTOMONITOR

choice
	prompt "Auto-monitor keepalive by"
	default WATCHDOG_AUTOMONITOR_BY_WDOG

config WATCHDOG_AUTOMONITOR_BY_CAPTURE
	bool "Capture callback"
	---help---
		Feed watchdog through watchdog_ops_s::capture callback periodically

config WATCHDOG_AUTOMONITOR_BY_ONESHOT
	bool "Oneshot callback"
	depends on ONESHOT
	---help---
		Feed watchdog through oneshot_lowerhalf_s functions periodically

config WATCHDOG_AUTOMONITOR_BY_TIMER
	bool "Timer callback"
	depends on TIMER
	---help---
		Feed watchdog through timer_lowerhalf_s functions periodically

config WATCHDOG_AUTOMONITOR_BY_WDOG
	bool "Wdog callback"
	---help---
		Feed watchdog through wdog functions periodically

config WATCHDOG_AUTOMONITOR_BY_WORKER
	bool "Worker callback"
	depends on SCHED_WORKQUEUE
	---help---
		Feed watchdog through wqueue functions periodically

config WATCHDOG_AUTOMONITOR_BY_IDLE
	bool "Idle callback"
	depends on PM
	---help---
		Feed watchdog before idle through pm_callback_s::notify callback

endchoice

config WATCHDOG_AUTOMONITOR_TIMEOUT
	int "Auto-monitor reset timeout(second)"
	default 60

if !WATCHDOG_AUTOMONITOR_BY_CAPTURE && !WATCHDOG_AUTOMONITOR_BY_IDLE

config WATCHDOG_AUTOMONITOR_PING_INTERVAL
	int "Auto-monitor keep a live interval"
	range 0 WATCHDOG_AUTOMONITOR_TIMEOUT
	default 0
	---help---
		If the interval is 0, it will change to (WATCHDOG_AUTOMONITOR_TIMEOUT / 2).
		This interval will only be used by auto-monitor in oneshot, timer, wdog or
		worker case.

endif # !WATCHDOG_AUTOMONITOR_BY_CAPTURE && !WATCHDOG_AUTOMONITOR_BY_IDLE

endif # WATCHDOG_AUTOMONITOR

endif # WATCHDOG

config TIMERS_CS2100CP
	bool "CS2100-CP Fraction-N Clock Multiplier"
	depends on I2C

if TIMERS_CS2100CP

config CS2100CP_DEBUG
	bool "Enable CS2100-CP Debug Features"
	depends on DEBUG_FEATURES

config CS2100CP_REGDEBUG
	bool "Enable CS2100-CP Register Debug"
	depends on DEBUG_FEATURES

endif # TIMERS_CS2100CP
endmenu # Timer Driver Support