# Copyright (c) 2019 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

if BOARD_MEC15XXEVB_ASSY6853

config BOARD
	default "mec15xxevb_assy6853"

if UART_NS16550

config UART_NS16550_PORT_2
	default y if UART_CONSOLE

endif

if PINMUX_XEC

config PINMUX_XEC_GPIO000_036
	default y

config PINMUX_XEC_GPIO040_076
	default y

config PINMUX_XEC_GPIO100_136
	default y

config PINMUX_XEC_GPIO140_176
	default y

config PINMUX_XEC_GPIO200_236
	default y if ADC_XEC || SPI_XEC_QMSPI
	default n

config PINMUX_XEC_GPIO240_276
	default y

endif # PINMUX_XEC

if GPIO_XEC

config GPIO_XEC_GPIO000_036
	default y

config GPIO_XEC_GPIO040_076
	default y

config GPIO_XEC_GPIO100_136
	default y

config GPIO_XEC_GPIO140_176
	default y

config GPIO_XEC_GPIO200_236
	default y

config GPIO_XEC_GPIO240_276
	default y

endif # GPIO_XEC

if ESPI

config ESPI_XEC
	default y

endif # ESPI

if RTOS_TIMER

# XEC RTOS timer HW frequency is fixed at 32768
# The driver requires tickless mode and ticks per
# second to be 32768 for accurate operation.

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default 32768

config SYS_CLOCK_TICKS_PER_SEC
	default 32768

endif # RTOS_TIMER

if !RTOS_TIMER

# If RTOS timer is not enabled we use ARM Cortex-M
# SYSTICK. SYSTICK frequency is 48MHz divided by
# SOC_MEC1501_PROC_CLK_DIV.
#

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default 48000000

config SYS_CLOCK_TICKS_PER_SEC
	default 1000

endif # RTOS_TIMER

if PS2

config PS2_XEC_0
	default y

config PS2_XEC_1
	default y

endif # PS2

if SPI

config SPI_XEC_QMSPI
	default y

if SPI_XEC_QMSPI

config SPI_0
	default y

config SPI_0_OP_MODES
	default 1

endif # SPI_XEC_QMSPI

endif # SPI

# power management stuff
if SYS_POWER_MANAGEMENT

config SYS_PM_MIN_RESIDENCY_SLEEP_1
	default 1000

config SYS_PM_MIN_RESIDENCY_DEEP_SLEEP_1
	default 2000

endif # SYS_POWER_MANAGEMENT

endif # BOARD_MEC15XXEVB_ASSY6853
