# Kconfig - Kinetis KW2xD SoC configuration options
#
# Copyright (c) 2017, Phytec Messtechnik GmbH
#
# SPDX-License-Identifier: Apache-2.0
#

if SOC_MKW22D5 || SOC_MKW24D5

if SOC_MKW22D5

config SOC
	string
	default mkw22d5

endif # SOC_MKW22D5

if SOC_MKW24D5

config SOC
	string
	default mkw24d5

endif # SOC_MKW24D5

config NUM_IRQS
	int
	default 65

if ADC

config ADC_MCUX_ADC16
	def_bool y

endif # ADC

if CLOCK_CONTROL

config CLOCK_CONTROL_MCUX_SIM
	def_bool y

endif # CLOCK_CONTROL

if PINMUX

config PINMUX_MCUX
	def_bool y

endif # PINMUX

if GPIO

config GPIO_MCUX
	def_bool y

endif # GPIO

if I2C

config I2C_MCUX
	def_bool y

endif # I2C

config SPI
	def_bool y

if PWM

config PWM_MCUX_FTM
	def_bool y

endif # PWM

if SPI

config SPI_MCUX_DSPI
	def_bool y

endif # SPI

if ENTROPY_GENERATOR

config ENTROPY_MCUX_RNGA
	def_bool y

endif # ENTROPY_GENERATOR

if FLASH

config SOC_FLASH_MCUX
	def_bool y

endif # FLASH

if SERIAL

config UART_MCUX
	def_bool y

endif # SERIAL

endif # SOC_MKW2xD512
