# SPDX-License-Identifier: GPL-2.0-only
menuconfig IEEE802154_DRIVERS
	tristate "IEEE 802.15.4 drivers"
	depends on NETDEVICES && IEEE802154
	default y
	help
	  Say Y here to get to see options for IEEE 802.15.4 Low-Rate
	  Wireless Personal Area Network device drivers. This option alone
	  does not add any kernel code.

	  If you say N, all options in this submenu will be skipped and
	  disabled.

config IEEE802154_FAKELB
	depends on IEEE802154_DRIVERS && MAC802154
	tristate "IEEE 802.15.4 loopback driver"
	help
	  Say Y here to enable the fake driver that can emulate a net
	  of several interconnected radio devices.

	  This driver can also be built as a module. To do so say M here.
	  The module will be called 'fakelb'.

config IEEE802154_AT86RF230
	depends on IEEE802154_DRIVERS && MAC802154
	tristate "AT86RF230/231/233/212 transceiver driver"
	depends on SPI
	select REGMAP_SPI
	help
	  Say Y here to enable the at86rf230/231/233/212 SPI 802.15.4 wireless
	  controller.

	  This driver can also be built as a module. To do so, say M here.
	  the module will be called 'at86rf230'.

config IEEE802154_AT86RF230_DEBUGFS
	depends on IEEE802154_AT86RF230
	bool "AT86RF230 debugfs interface"
	depends on DEBUG_FS
	help
	  This option compiles debugfs code for the at86rf230 driver.

config IEEE802154_MRF24J40
	tristate "Microchip MRF24J40 transceiver driver"
	depends on IEEE802154_DRIVERS && MAC802154
	depends on SPI
	select REGMAP_SPI
	help
	  Say Y here to enable the MRF24J20 SPI 802.15.4 wireless
	  controller.

	  This driver can also be built as a module. To do so, say M here.
	  the module will be called 'mrf24j40'.

config IEEE802154_CC2520
	depends on IEEE802154_DRIVERS && MAC802154
	tristate "CC2520 transceiver driver"
	depends on SPI
	help
	  Say Y here to enable the CC2520 SPI 802.15.4 wireless
	  controller.

	  This driver can also be built as a module. To do so, say M here.
	  the module will be called 'cc2520'.

config IEEE802154_ATUSB
	tristate "ATUSB transceiver driver"
	depends on IEEE802154_DRIVERS && MAC802154 && USB
	help
	  Say Y here to enable the ATUSB IEEE 802.15.4 wireless
	  controller.

	  This driver can also be built as a module. To do so say M here.
	  The module will be called 'atusb'.

config IEEE802154_ADF7242
	tristate "ADF7242 transceiver driver"
	depends on IEEE802154_DRIVERS && MAC802154
	depends on SPI
	help
	  Say Y here to enable the ADF7242 SPI 802.15.4 wireless
	  controller.

	  This driver can also be built as a module. To do so, say M here.
	  the module will be called 'adf7242'.

config IEEE802154_CA8210
	tristate "Cascoda CA8210 transceiver driver"
	depends on IEEE802154_DRIVERS && MAC802154
	depends on COMMON_CLK
	depends on SPI
	help
	  Say Y here to enable the CA8210 SPI 802.15.4 wireless
	  controller.

	  This driver can also be built as a module. To do so, say M here.
	  the module will be called 'ca8210'.

config IEEE802154_CA8210_DEBUGFS
	bool "CA8210 debugfs interface"
	depends on IEEE802154_CA8210
	depends on DEBUG_FS
	help
	  This option compiles debugfs code for the ca8210 driver. This
	  exposes a debugfs node for each CA8210 instance which allows
	  direct use of the Cascoda API, exposing the 802.15.4 MAC
	  management entities.

config IEEE802154_MCR20A
	tristate "MCR20A transceiver driver"
	depends on IEEE802154_DRIVERS && MAC802154
	depends on SPI
	help
	  Say Y here to enable the MCR20A SPI 802.15.4 wireless
	  controller.

	  This driver can also be built as a module. To do so, say M here.
	  the module will be called 'mcr20a'.

config IEEE802154_HWSIM
	depends on IEEE802154_DRIVERS && MAC802154
	tristate "Simulated radio testing tool for mac802154"
	help
	  This driver is a developer testing tool that can be used to test
	  IEEE 802.15.4 networking stack (mac802154) functionality. This is not
	  needed for normal wpan usage and is only for testing.

	  This driver can also be built as a module. To do so say M here.
	  The module will be called 'mac802154_hwsim'.
