# 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

config LVGL_DISPLAY_DEV_NAME
	default "SSD16XX"

choice LVGL_COLOR_DEPTH
	default LVGL_COLOR_DEPTH_1
endchoice

config LVGL_BITS_PER_PIXEL
	default 1

config LVGL_HOR_RES_MAX
	default 250

config LVGL_VER_RES_MAX
	default 120

config LVGL_DPI
	default 130

config LVGL_VDB_SIZE
	default 16

endif # LVGL

endif # BOARD_REEL_BOARD || BOARD_REEL_BOARD_V2
