# reel board configuration

# Copyright (c) 2018-2019 PHYTEC Messtechnik GmbH
# SPDX-License-Identifier: Apache-2.0

if BOARD_REEL_BOARD || BOARD_REEL_BOARD_V2

config BOARD
	default "reel_board" if BOARD_REEL_BOARD
	default "reel_board_v2" if BOARD_REEL_BOARD_V2

config I2C
	default y

if I2C

config I2C_0
	default y

config I2C_1
	default n

if I2C_0

choice I2C_0_NRF_TYPE
	default I2C_0_NRF_TWIM

endchoice

endif # I2C_0

if I2C_1

choice I2C_1_NRF_TYPE
	default I2C_1_NRF_TWIM

endchoice

endif # I2C_1

endif # I2C

if PWM

config PWM_0
	default y

endif # PWM

if SPI

config SPI_1
	default y

config SPI_3
	default y

config SPI_NRFX_RAM_BUFFER_SIZE
	default 8

endif # SPI

if USB

config USB_NRF52840
	default y

config USB_DEVICE_STACK
	default y

endif # USB

if IEEE802154

config IEEE802154_NRF5
	default y

endif # IEEE802154

if BT

config BT_CTLR
	default y

endif # BT

endif # BOARD_REEL_BOARD || BOARD_REEL_BOARD_V2
