# Copyright (c) 2017 - 2018, Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
#
config COUNTER_NRF_TIMER
	bool
	select NRFX_TIMER

config COUNTER_NRF_RTC
	bool
	select NRFX_RTC

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
	select NRFX_TIMER0

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

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

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

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

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
	select NRFX_RTC0

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

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

# Internal flag which detects if PPI wrap feature is enabled for any instance
if $(dt_int_val,DT_INST_0_NORDIC_NRF_RTC_PPI_WRAP) > 0 || \
   $(dt_int_val,DT_INST_1_NORDIC_NRF_RTC_PPI_WRAP) > 0 || \
   $(dt_int_val,DT_INST_2_NORDIC_NRF_RTC_PPI_WRAP) > 0

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
