# M5Stack Core2 board configuration
# Copyright (c) 2022 AVSystem Sławomir Wolf Sp.j. (AVSystem)
# Copyright (c) 2023 Martin Kiepfer <m.kiepfer@teleschirm.org>
# SPDX-License-Identifier: Apache-2.0

if BOARD_M5STACK_CORE2_ESP32_PROCPU

config HEAP_MEM_POOL_ADD_SIZE_BOARD
	int
	default 65535 if WIFI && BT
	default 51200 if WIFI
	default 65536 if BT
	default 4096

config KERNEL_MEM_POOL
	default y

choice BT_HCI_BUS_TYPE
	default BT_ESP32 if BT
endchoice

config GPIO_HOGS_INIT_PRIORITY
	default 70

config MFD_INIT_PRIORITY
	default 70

config REGULATOR_AXP192_INIT_PRIORITY
	default 71

config GPIO_AXP192_INIT_PRIORITY
	default 72

config REGULATOR_FIXED_INIT_PRIORITY
	default 75

config INPUT_FT5336_INTERRUPT
	default y if INPUT

config INPUT
	default y

config LV_COLOR_16_SWAP
	default y if LVGL

# Increase initialization priority of MIPI DBI device, so that it initializes
# after the GPIO controller
if MIPI_DBI

config MIPI_DBI_INIT_PRIORITY
	default 82

endif # MIPI_DBI

endif # BOARD_M5STACK_CORE2_ESP32_PROCPU

if BOARD_M5STACK_CORE2_ESP32_APPCPU

config HEAP_MEM_POOL_ADD_SIZE_BOARD
	default 256

endif # BOARD_M5STACK_CORE2_ESP32_APPCPU
