# MIMXRT1020-EVK board

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

if BOARD_MIMXRT1020_EVK

config BOARD
	default "mimxrt1020_evk" if BOARD_MIMXRT1020_EVK

choice CODE_LOCATION
	default CODE_FLEXSPI
endchoice

choice DATA_LOCATION
	default DATA_SEMC
endchoice

if GPIO_MCUX_IGPIO

config GPIO_MCUX_IGPIO_1
	default y

config GPIO_MCUX_IGPIO_5
	default y

endif # GPIO_MCUX_IGPIO

if I2C_MCUX_LPI2C

config I2C_1
	default y

config I2C_4
	default y

endif # I2C_MCUX_LPI2C

if UART_MCUX_LPUART

config UART_MCUX_LPUART_1
	default y

config UART_MCUX_LPUART_2
	default y if BT_UART

endif # UART_MCUX_LPUART

if NETWORKING

config NET_L2_ETHERNET
	default y

config ETH_MCUX_0
	default y if NET_L2_ETHERNET

endif # NETWORKING

endif # BOARD_MIMXRT1020_EVK
