# Kconfig - FSL FRDM K64F platform configuration options

#
# Copyright (c) 2014-2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

if SOC_MK64F12

config SOC
	string
	default mk64f12

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

config GPIO
	def_bool y

if GPIO

config GPIO_MCUX
	def_bool y

endif # GPIO

if I2C

config I2C_MCUX
	def_bool y

endif # I2C

if PWM

config PWM_MCUX_FTM
	def_bool y

endif # PWM

config SPI
	def_bool n

if SPI

config SPI_MCUX_DSPI
	def_bool y

endif # SPI

if NET_L2_ETHERNET

config ETH_MCUX
	def_bool y

endif # NET_L2_ETHERNET

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_MK64F12
