# Kconfig - Hexiwear K64 board
#
# Copyright (c) 2016, Freescale Semiconductor, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

if BOARD_HEXIWEAR_K64

config BOARD
	default hexiwear_k64

config OSC_XTAL0_FREQ
	default 12000000

config MCG_PRDIV0
	default 0x02

config MCG_VDIV0
	default 0x06

config MCG_FCRDIV
	default 1

if UART_MCUX

config UART_MCUX_0
	def_bool y if UART_CONSOLE

config UART_MCUX_4
	def_bool y if BT_UART

endif # UART_MCUX

if PINMUX_MCUX

config PINMUX_MCUX_PORTA
	def_bool y if MAX30101

config PINMUX_MCUX_PORTB
	def_bool y if UART_MCUX_0

config PINMUX_MCUX_PORTC
	def_bool y

config PINMUX_MCUX_PORTD
	def_bool y

config PINMUX_MCUX_PORTE
	def_bool y if UART_MCUX_4

endif # PINMUX_MCUX

if GPIO_MCUX

config GPIO_MCUX_PORTA
	def_bool y if MAX30101

config GPIO_MCUX_PORTB
	def_bool y

config GPIO_MCUX_PORTC
	def_bool y

config GPIO_MCUX_PORTD
	def_bool y

config GPIO_MCUX_PORTE
	def_bool y

endif # GPIO_MCUX

if I2C

config I2C_0
	def_bool y

config I2C_1
	def_bool y

endif # I2C

if ADC

config ADC_0
	def_bool y

config BATTERY_SENSE
	def_bool y

endif # ADC

if FXOS8700

config FXOS8700_GPIO_NAME
	default GPIO_MCUX_PORTD_NAME

config FXOS8700_GPIO_PIN
	default 13

endif # FXOS8700

if FXAS21002

config FXAS21002_GPIO_NAME
	default GPIO_MCUX_PORTC_NAME

config FXAS21002_GPIO_PIN
	default 18

endif # FXAS21002

if PWM_MCUX_FTM

config PWM_3
	def_bool y

endif # PWM_MCUX_FTM

if SPI

config SPI_0
	def_bool y

config SPI_0_IRQ_PRI
	default 3

config SPI_1
	def_bool n

config SPI_1_IRQ_PRI
	default 3

config SPI_2
	def_bool n

config SPI_2_IRQ_PRI
	default 3

endif # SPI

if NET_L2_ETHERNET

config ETH_MCUX_0
	def_bool y

endif # NET_L2_ETHERNET

endif # BOARD_HEXIWEAR_K64
