# Copyright (c) 2021 Telink Semiconductor
# SPDX-License-Identifier: Apache-2.0

if BOARD_TLSR9518ADK80D

config BOARD
	default "tlsr9518adk80d"

config GPIO_TELINK_B91
	default y if GPIO

config UART_TELINK_B91
	default y if SERIAL

config PWM_TELINK_B91
	default y if PWM

config ENTROPY_TELINK_B91_TRNG
	default y if ENTROPY_GENERATOR

config SOC_FLASH_TELINK_B91
	default y if FLASH

config SPI_TELINK_B91
	default y if SPI

config IEEE802154_TELINK_B91
	default y if IEEE802154

config NET_CONFIG_IEEE802154_DEV_NAME
	default "IEEE802154_b91"

config I2C_TELINK_B91
	default y if I2C

if BT

# BLE Controller SDK from hal_telink requires
# Telink's toolchain with FPU support
config FPU
	default y if "$(ZEPHYR_TOOLCHAIN_VARIANT)" != "zephyr"

config BT_HCI_ACL_FLOW_CONTROL
	default n

choice BT_HCI_BUS_TYPE
	default BT_B91
endchoice

endif # BT

# Workaround for not being able to have commas in macro arguments
DT_CHOSEN_Z_CODE_PARTITION := zephyr,code-partition

config FLASH_LOAD_OFFSET
	default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) if USE_DT_CODE_PARTITION

endif
