# TI CC1200 configuration options

# SPDX-License-Identifier: Apache-2.0

menuconfig IEEE802154_CC1200
	bool "TI CC1200 Driver support"
	depends on NETWORKING
	select NET_L2_IEEE802154_SUB_GHZ

if IEEE802154_CC1200

config IEEE802154_CC1200_DRV_NAME
	string "TI CC1200 Driver's name"
	default "cc1200"
	help
	  This option sets the driver name

config IEEE802154_CC1200_GPIO_SPI_CS
	bool "Manage SPI CS through a GPIO pin"
	help
	  This option is useful if one needs to manage SPI CS through a GPIO
	  pin to by-pass the SPI controller's CS logic.

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
