# NXP MIMXRT6XX platform configuration options

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

if SOC_MIMXRT685S_CM33

config SOC
	default "mimxrt685s_cm33"

config PINMUX_MCUX_LPC
	default y
	depends on PINMUX

config GPIO_MCUX_LPC
	default y
	depends on GPIO

config UART_MCUX_FLEXCOMM
	default y if HAS_MCUX_FLEXCOMM
	depends on SERIAL

config I2C_MCUX_FLEXCOMM
	default y if HAS_MCUX_FLEXCOMM
	depends on I2C

config SPI_MCUX_FLEXCOMM
	default y if HAS_MCUX_FLEXCOMM
	depends on SPI

config I2S_MCUX_FLEXCOMM
	default y if HAS_MCUX_FLEXCOMM
	depends on I2S
	select INIT_AUDIO_PLL

config DMA_MCUX_LPC
	default y
	depends on DMA

config CLOCK_CONTROL_MCUX_SYSCON
	default y if HAS_MCUX_SYSCON
	depends on CLOCK_CONTROL

config IMX_USDHC
	default y if (HAS_MCUX_USDHC1 || HAS_MCUX_USDHC2)
	depends on SDHC

if MCUX_OS_TIMER

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default 1000000

endif # MCUX_OS_TIMER

if CORTEX_M_SYSTICK

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default 250105263

endif # CORTEX_M_SYSTICK

config COUNTER_MCUX_LPC_RTC
	default y
	depends on COUNTER

config PWM_MCUX_SCTIMER
	default y
	depends on PWM

config WDT_MCUX_WWDT
	default y
	depends on WATCHDOG

config USB_MCUX
	default y
	depends on USB_DEVICE_DRIVER

choice USB_MCUX_CONTROLLER_TYPE
	default USB_DC_NXP_LPCIP3511
endchoice

config COUNTER_MCUX_CTIMER
	default y
	depends on COUNTER

endif # SOC_MIMXRT685S_CM33
