# TI CC1200 configuration options

# SPDX-License-Identifier: Apache-2.0

menuconfig IEEE802154_CC1200
	bool "TI CC1200 Driver support"
	default y
	depends on DT_HAS_TI_CC1200_ENABLED
	select NET_L2_IEEE802154_SUB_GHZ

if IEEE802154_CC1200

config IEEE802154_CC1200_RX_STACK_SIZE
	int "Driver's internal RX thread stack size"
	default 800
	help
	  This option sets the driver's stack size for its internal RX thread.
	  The default value should be sufficient, but in case it proves to be
	  a too little one, this option makes it easy to play with the size.

config IEEE802154_CC1200_INIT_PRIO
	int "CC1200 initialization priority"
	default 80
	help
	  Set the initialization priority number. Do not mess with it unless
	  you know what you are doing. Beware cc1200 requires gpio and spi to
	  be ready first (and sometime gpio should be the very first as spi
	  might need it too). And of course it has to start before the net stack.

config IEEE802154_CC1200_RANDOM_MAC
	bool "Random MAC address"
	default y
	help
	  Generate a random MAC address dynamically.

if ! IEEE802154_CC1200_RANDOM_MAC

config IEEE802154_CC1200_MAC4
	hex "MAC Address Byte 4"
	default 0
	range 0 0xff
	help
	  This is the byte 4 of the MAC address.

config IEEE802154_CC1200_MAC5
	hex "MAC Address Byte 5"
	default 0
	range 0 0xff
	help
	  This is the byte 5 of the MAC address.

config IEEE802154_CC1200_MAC6
	hex "MAC Address Byte 6"
	default 0
	range 0 0xff
	help
	  This is the byte 6 of the MAC address.

config IEEE802154_CC1200_MAC7
	hex "MAC Address Byte 7"
	default 0
	range 0 0xff
	help
	  This is the byte 7 of the MAC address.

endif # IEEE802154_CC1200_RANDOM_MAC

config IEEE802154_CC1200_XOSC
	int "Value of the Crystal oscillator in kHz"
	default 40000
	help
	  This sets the XOSC value, it must be between 38400 and 40000.
	  This value should follow what has been set in the RF settings via
	  SmartRF tool. Do not touch this unless you know what you are doing.

config IEEE802154_CC1200_RF_PRESET
	bool "Use TI CC1200 RF pre-sets"
	default y

choice
	prompt "TI CC1200 RF preset"
	default IEEE802154_CC1200_RF_SET_0
	depends on IEEE802154_CC1200_RF_PRESET
	help
	  Set the RF preset you want to use.

config IEEE802154_CC1200_RF_SET_0
	bool "868MHz - 50Kbps - 2-GFSK - IEEE 802.15.4g compliant - ETSI"

config IEEE802154_CC1200_RF_SET_1
	bool "920MHz - 50Kbps - 2-GFSK - IEEE 802.15.4g compliant - ARIB"

config IEEE802154_CC1200_RF_SET_2
	bool "434MHz - 50Kbps - 2-GFSK - IEEE 802.15.4g compliant - ETSI"

endchoice

config IEEE802154_CC1200_CCA_THRESHOLD
	int "Value in dbm of the CCA threshold"
	default -91
	help
	  Set the CCA threshold. See datasheet's AGC_CS_THR register for
	  more information. Do not touch this unless you know what you are doing.

config IEEE802154_CC1200_RSSI_OFFSET
	int "Value in dbm of the RSSI offset"
	default -81
	help
	  Set the gain adjustment. See datasheet's AGC_GAIN_ADJUST register for
	  more information. Do not touch this unless you know what you are doing.

# Do no touch below settings unless you know what you are doing
config IEEE802154_CC1200_SETTLING_CFG
	hex
	default 0x03

config IEEE802154_CC1200_PKTCFG0
	hex
	default 0x20

config IEEE802154_CC1200_PKTCFG1
	hex
	default 0x03

config IEEE802154_CC1200_PKTCFG2
	hex
	default 0x00

config IEEE802154_CC1200_RFEND_CFG1
	hex
	default 0x3F

config IEEE802154_CC1200_RFEND_CFG0
	hex
	default 0x00

endif # IEEE802154_CC1200
