# Kinetis KWx SoC configuration options

# Copyright (c) 2017, NXP
# SPDX-License-Identifier: Apache-2.0

if SOC_MKW41Z4

config SOC
	default "mkw41z4"

config NUM_IRQS
	default 32

if ADC

config ADC_MCUX_ADC16
	default y

endif # ADC

if CLOCK_CONTROL

config CLOCK_CONTROL_MCUX_SIM
	default y

endif # CLOCK_CONTROL

if COUNTER

config COUNTER_MCUX_RTC
	default y

endif # COUNTER

if PINMUX

config PINMUX_MCUX
	default y

endif # PINMUX

if GPIO

config GPIO_MCUX
	default y

endif # GPIO

if SERIAL

config UART_MCUX_LPUART
	default y

endif # SERIAL

if I2C

config I2C_MCUX
	default y

endif # I2C

if SPI

config SPI_MCUX_DSPI
	default y

endif # SPI

if ENTROPY_GENERATOR

config ENTROPY_MCUX_TRNG
	default y

endif # ENTROPY_GENERATOR

if FLASH

config SOC_FLASH_MCUX
	default y

endif # FLASH

if NETWORKING

if !NET_L2_OPENTHREAD
config NET_L2_IEEE802154
	default y
endif # NET_L2_OPENTHREAD

config IEEE802154_KW41Z
	default y

config NET_CONFIG_IEEE802154_DEV_NAME
	default IEEE802154_KW41Z_DRV_NAME

endif # NETWORKING

choice CSPRNG_GENERATOR_CHOICE
	default CTR_DRBG_CSPRNG_GENERATOR
endchoice

if ENTROPY_GENERATOR
#
# MBEDTLS is larger but much faster than TinyCrypt so choose wisely
#
#config MBEDTLS
config TINYCRYPT
	default y
endif

#
# KW41Z TRNG entropy source cannot be used as a Hardware RNG source so
# use XOROSHIRO for PRNG
#
choice RNG_GENERATOR_CHOICE
	default XOROSHIRO_RANDOM_GENERATOR
endchoice

endif # SOC_MKW41Z4
