# Kconfig - Kinetis KWx SoC configuration options
#
# Copyright (c) 2017, NXP
#
# SPDX-License-Identifier: Apache-2.0
#

if SOC_MKW40Z4

config SOC
	string
	default mkw40z4

config NUM_IRQS
	int
	default 32

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 SERIAL

config UART_MCUX_LPUART
	def_bool y

endif # SERIAL

if I2C

config I2C_MCUX
	def_bool y

endif # I2C

if ENTROPY_GENERATOR

config ENTROPY_MCUX_TRNG
	def_bool y

endif # ENTROPY_GENERATOR

if FLASH

config SOC_FLASH_MCUX
	def_bool y

endif # FLASH

endif # SOC_MKW40Z4
