# Kconfig.cc2520 - TI CC2520 configuration options
#
#
# Copyright (c) 2017 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig IEEE802154_CC2520
	bool "TI CC2520 Driver support"
	depends on NETWORKING
	default n

if IEEE802154_CC2520

config IEEE802154_CC2520_DRV_NAME
	string "TI CC2520 Driver's name"
	default "cc2520"
	help
	  This option sets the driver name

config IEEE802154_CC2520_SPI_DRV_NAME
	string "SPI driver's name to use to access CC2520"
	default ""
	help
	  This option is mandatory to set which SPI controller to use in order
	  to actually control the CC2520 chip.

config IEEE802154_CC2520_SPI_FREQ
	int "SPI system frequency"
	default 0
	help
	  This option sets the SPI controller's frequency. Beware this value
	  depends on the SPI controller being used and also on the system
	  clock.

config IEEE802154_CC2520_SPI_SLAVE
	int "SPI slave linked to CC2520"
	default 0
	help
	  This option sets the SPI slave number SPI controller has to switch
	  to when dealing with CC2520 chip.

config IEEE802154_CC2520_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_CC2520_INIT_PRIO
	int "CC2520 initialization priority"
	default 80
	help
	  Set the initialization priority number. Do not mess with it unless
	  you know what you are doing. Beware cc2520 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_CC2520_RANDOM_MAC
	bool "Random MAC address"
	default y
	help
	  Generate a random MAC address dynamically.

if ! IEEE802154_CC2520_RANDOM_MAC

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

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

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

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

endif # IEEE802154_CC2520_RANDOM_MAC

config IEEE802154_CC2520_CRYPTO
	bool "Enable hardware crypto helper on cc2520"
	default n
	depends on NET_L2_IEEE802154_SECURITY
	help
	  This option will expose the hardware AES encryption from CC2520.
	  Such feature should not be used for anything but 802.15.4 security.
	  The crypto device exposed will only support synchronous CCM operation.

config IEEE802154_CC2520_CRYPTO_DRV_NAME
	string "TI CC2520 Crypto Driver's name"
	default "cc2520_crypto"
	depends on IEEE802154_CC2520_CRYPTO
	help
	  This option sets the driver name for the crypto part found on CC2520.

config IEEE802154_CC2520_CRYPTO_INIT_PRIO
	int "TI CC2520 crypto device initialization priority"
	default 81
	depends on IEEE802154_CC2520_CRYPTO
	help
	  Set the initialization priority number. Do not mess with it unless
	  you know what you are doing. It should be initialized after CC2520
	  as it shares the same runtime context.

endif # IEEE802154_CC2520
