# 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

config BT_CTLR
	default y
	depends on BT

if DISPLAY

config SSD16XX
	default y

config SPI
	default y

endif # DISPLAY

if LVGL

choice LV_COLOR_DEPTH
	default LV_COLOR_DEPTH_1
endchoice

config LV_Z_BITS_PER_PIXEL
	default 1

config LV_Z_DPI
	default 130

config LV_Z_VDB_SIZE
	default 16

endif # LVGL

endif # BOARD_REEL_BOARD || BOARD_REEL_BOARD_V2
