# Kinetis K8x series configuration options

# Copyright (c) 2019 SEAL AG
# SPDX-License-Identifier: Apache-2.0

if SOC_SERIES_KINETIS_K8X

config SOC_SERIES
	default "k8x"

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

if KINETIS_FLASH_CONFIG

config KINETIS_FLASH_CONFIG_FOPT
	default 0x3f

endif # KINETIS_FLASH_CONFIG

if ADC

config ADC_MCUX_ADC16
	default y

endif # ADC

if CLOCK_CONTROL

config CLOCK_CONTROL_MCUX_MCG
	default y

config CLOCK_CONTROL_MCUX_SIM
	default y

endif # CLOCK_CONTROL

if ENTROPY_GENERATOR

config ENTROPY_MCUX_TRNG
	default y

endif # ENTROPY_GENERATOR

if FLASH

config SOC_FLASH_MCUX
	default y

endif # FLASH

config GPIO
	default y

if GPIO

config GPIO_MCUX
	default y

endif # GPIO

if I2C

config I2C_MCUX
	default y

endif # I2C

if PINMUX

config PINMUX_MCUX
	default y

endif # PINMUX

if PWM

config PWM_MCUX_FTM
	default y

endif # PWM

if SERIAL

config UART_MCUX_LPUART
	default y

endif # SERIAL

if SPI

config SPI_MCUX_DSPI
	default y

endif # SPI

if USB

config USB_KINETIS
	default y

endif # USB

if WATCHDOG

config WDT_MCUX_WDOG
	default y

endif # WATCHDOG

source "soc/arm/nxp_kinetis/k8x/Kconfig.defconfig.mk*"

endif # SOC_SERIES_KINETIS_K8X
