# 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
	default "mkw22d5"

endif # SOC_MKW22D5

if SOC_MKW24D5

config SOC
	default "mkw24d5"

endif # SOC_MKW24D5

config NUM_IRQS
	default 65

if ADC

config ADC_MCUX_ADC16
	default y

endif # ADC

if CLOCK_CONTROL

config CLOCK_CONTROL_MCUX_SIM
	default y

config CLOCK_CONTROL_MCUX_MCG
	default y

endif # CLOCK_CONTROL

if PINMUX

config PINMUX_MCUX
	default y

endif # PINMUX

if GPIO

config GPIO_MCUX
	default y

endif # GPIO

if I2C

config I2C_MCUX
	default y

endif # I2C

config SPI
	default y

if PWM

config PWM_MCUX_FTM
	default y

endif # PWM

if SPI

config SPI_MCUX_DSPI
	default y

endif # SPI

if ENTROPY_GENERATOR

config ENTROPY_MCUX_RNGA
	default y

endif # ENTROPY_GENERATOR

if FLASH

config SOC_FLASH_MCUX
	default y

endif # FLASH

if SERIAL

config UART_MCUX
	default y

endif # SERIAL

if USB

config USB_KINETIS
	default y

endif # USB

if WATCHDOG

config WDT_MCUX_WDOG
	default y

endif # WATCHDOG

endif # SOC_MKW2xD512
