# Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config COUNTER_NRF_TIMER
	bool

config COUNTER_NRF_RTC
	bool

config COUNTER_TIMER0
	bool "Enable Counter on TIMER0"
	depends on HAS_HW_NRF_TIMER0
	depends on !BT_LL_SW_LEGACY && !BT_LL_SW_SPLIT
	select COUNTER_NRF_TIMER

config COUNTER_TIMER1
	bool "Enable Counter on TIMER1"
	depends on HAS_HW_NRF_TIMER1
	select COUNTER_NRF_TIMER

config COUNTER_TIMER2
	bool "Enable Counter on TIMER2"
	depends on HAS_HW_NRF_TIMER2
	select COUNTER_NRF_TIMER

config COUNTER_TIMER3
	bool "Enable Counter on TIMER3"
	depends on HAS_HW_NRF_TIMER3
	select COUNTER_NRF_TIMER

config COUNTER_TIMER4
	bool "Enable Counter on TIMER4"
	depends on HAS_HW_NRF_TIMER4
	select COUNTER_NRF_TIMER

config COUNTER_RTC0
	bool "Enable Counter on RTC0"
	depends on HAS_HW_NRF_RTC0
	depends on !BT_LL_SW_LEGACY && !BT_LL_SW_SPLIT
	select COUNTER_NRF_RTC

config COUNTER_RTC1
	bool "Enable Counter on RTC1"
	depends on HAS_HW_NRF_RTC1
	depends on !NRF_RTC_TIMER
	select COUNTER_NRF_RTC

config COUNTER_RTC2
	bool "Enable Counter on RTC2"
	depends on HAS_HW_NRF_RTC2
	select COUNTER_NRF_RTC

# Internal flag which detects if PPI wrap feature is enabled for any instance
if ($(dt_node_has_bool_prop,rtc-0,ppi-wrap) && COUNTER_RTC0) || \
   ($(dt_node_has_bool_prop,rtc-1,ppi-wrap) && COUNTER_RTC1) || \
   ($(dt_node_has_bool_prop,rtc-2,ppi-wrap) && COUNTER_RTC2)

config COUNTER_RTC_WITH_PPI_WRAP
	bool
	default y
	select NRFX_PPI if HAS_HW_NRF_PPI
	select NRFX_DPPI if HAS_HW_NRF_DPPIC

endif

# Internal flag which detects if fixed top feature is enabled for any instance
if (!$(dt_node_has_bool_prop,rtc-0,fixed-top) && COUNTER_RTC0) || \
   (!$(dt_node_has_bool_prop,rtc-1,fixed-top) && COUNTER_RTC1) || \
   (!$(dt_node_has_bool_prop,rtc-2,fixed-top) && COUNTER_RTC2)

config COUNTER_RTC_CUSTOM_TOP_SUPPORT
	bool
	default y
endif
