# Kinetis KE1xF series configuration options

# Copyright (c) 2019-2021 Vestas Wind Systems A/S
# SPDX-License-Identifier: Apache-2.0

if SOC_SERIES_KINETIS_KE1XF

config SOC_SERIES
	default "ke1xf"

config MCUX_LPTMR_TIMER
	default y if PM

config CORTEX_M_SYSTICK
	default n if MCUX_LPTMR_TIMER

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default $(dt_node_int_prop_int,/cpus/cpu@0,clock-frequency) if CORTEX_M_SYSTICK
	default $(dt_node_int_prop_int,/soc/lptmr@40040000,clock-frequency) if MCUX_LPTMR_TIMER

config NUM_IRQS
	# must be >= the highest interrupt number used
	default 91

config CPU_HAS_CUSTOM_FIXED_SOC_MPU_REGIONS
	default y

config KINETIS_FLASH_CONFIG_FOPT
	default 0x7d
	depends on KINETIS_FLASH_CONFIG

if CLOCK_CONTROL

config CLOCK_CONTROL_MCUX_SCG
	default y

config CLOCK_CONTROL_MCUX_SIM
	default y

config CLOCK_CONTROL_MCUX_PCC
	default y

endif # CLOCK_CONTROL

config WDT_MCUX_WDOG32
	default y
	depends on WATCHDOG

if COUNTER

config COUNTER_MCUX_RTC
	default y

config COUNTER_MCUX_LPTMR
	default y

endif # COUNTER

config PWM_MCUX_FTM
	default y
	depends on PWM

config PWM_MCUX_PWT
	default y
	depends on PWM_CAPTURE

config PINMUX_MCUX
	default y
	depends on PINMUX

config GPIO
	default y

config GPIO_MCUX
	default y
	depends on GPIO

config SOC_FLASH_MCUX
	default y
	depends on FLASH

config UART_MCUX_LPUART
	default y
	depends on SERIAL

config I2C_MCUX_LPI2C
	default y
	depends on I2C

config SPI_MCUX_LPSPI
	default y
	depends on SPI

config ADC_MCUX_ADC12
	default y
	depends on ADC

config DAC_MCUX_DAC32
	default y
	depends on DAC

config DMA_MCUX_EDMA
	default y
	depends on DMA

source "soc/arm/nxp_kinetis/ke1xf/Kconfig.defconfig.mke*"

endif # SOC_SERIES_KINETIS_KE1XF
