menuconfig RT2X00
	tristate "Ralink driver support"
	depends on MAC80211
	---help---
	  This will enable the support for the Ralink drivers,
	  developed in the rt2x00 project <http://rt2x00.serialmonkey.com>.

	  These drivers make use of the mac80211 stack.

	  When building one of the individual drivers, the rt2x00 library
	  will also be created. That library (when the driver is built as
	  a module) will be called rt2x00lib.

	  Additionally PCI and USB libraries will also be build depending
	  on the types of drivers being selected, these libraries will be
	  called rt2x00pci and rt2x00usb.

if RT2X00

config RT2400PCI
	tristate "Ralink rt2400 (PCI/PCMCIA) support"
	depends on PCI
	select RT2X00_LIB_PCI
	select EEPROM_93CX6
	---help---
	  This adds support for rt2400 wireless chipset family.
	  Supported chips: RT2460.

	  When compiled as a module, this driver will be called rt2400pci.

config RT2500PCI
	tristate "Ralink rt2500 (PCI/PCMCIA) support"
	depends on PCI
	select RT2X00_LIB_PCI
	select EEPROM_93CX6
	---help---
	  This adds support for rt2500 wireless chipset family.
	  Supported chips: RT2560.

	  When compiled as a module, this driver will be called rt2500pci.

config RT61PCI
	tristate "Ralink rt2501/rt61 (PCI/PCMCIA) support"
	depends on PCI
	select RT2X00_LIB_PCI
	select RT2X00_LIB_FIRMWARE
	select RT2X00_LIB_CRYPTO
	select CRC_ITU_T
	select EEPROM_93CX6
	---help---
	  This adds support for rt2501 wireless chipset family.
	  Supported chips: RT2561, RT2561S & RT2661.

	  When compiled as a module, this driver will be called rt61pci.

config RT2800PCI_PCI
	boolean
	depends on PCI
	default y

config RT2800PCI_SOC
	boolean
	depends on RALINK_RT288X || RALINK_RT305X
	default y

config RT2800PCI
	tristate "Ralink rt28xx/rt30xx/rt35xx (PCI/PCIe/PCMCIA) support (EXPERIMENTAL)"
	depends on (RT2800PCI_PCI || RT2800PCI_SOC) && EXPERIMENTAL
	select RT2800_LIB
	select RT2X00_LIB_PCI if RT2800PCI_PCI
	select RT2X00_LIB_SOC if RT2800PCI_SOC
	select RT2X00_LIB_HT
	select RT2X00_LIB_FIRMWARE
	select RT2X00_LIB_CRYPTO
	select CRC_CCITT
	select EEPROM_93CX6
	---help---
	  This adds support for rt2800/rt3000/rt3500 wireless chipset family.
	  Supported chips: RT2760, RT2790, RT2860, RT2880, RT2890 & RT3052

	  This driver is non-functional at the moment and is intended for
	  developers.

	  When compiled as a module, this driver will be called "rt2800pci.ko".

if RT2800PCI

config RT2800PCI_RT30XX
	bool "rt2800pci - Include support for rt30xx (PCI/PCIe/PCMCIA) devices"
	default y
	---help---
	  This adds support for rt30xx wireless chipset family to the
	  rt2800pci driver.
	  Supported chips: RT3090, RT3091 & RT3092

	  Support for these devices is non-functional at the moment and is
	  intended for testers and developers.

config RT2800PCI_RT35XX
	bool "rt2800pci - Include support for rt35xx (PCI/PCIe/PCMCIA) devices"
	default n
	---help---
	  This adds support for rt35xx wireless chipset family to the
	  rt2800pci driver.
	  Supported chips: RT3060, RT3062, RT3562, RT3592

	  Support for these devices is non-functional at the moment and is
	  intended for testers and developers.

endif

config RT2500USB
	tristate "Ralink rt2500 (USB) support"
	depends on USB
	select RT2X00_LIB_USB
	select RT2X00_LIB_CRYPTO
	---help---
	  This adds support for rt2500 wireless chipset family.
	  Supported chips: RT2571 & RT2572.

	  When compiled as a module, this driver will be called rt2500usb.

config RT73USB
	tristate "Ralink rt2501/rt73 (USB) support"
	depends on USB
	select RT2X00_LIB_USB
	select RT2X00_LIB_FIRMWARE
	select RT2X00_LIB_CRYPTO
	select CRC_ITU_T
	---help---
	  This adds support for rt2501 wireless chipset family.
	  Supported chips: RT2571W, RT2573 & RT2671.

	  When compiled as a module, this driver will be called rt73usb.

config RT2800USB
	tristate "Ralink rt2800 (USB) support (EXPERIMENTAL)"
	depends on USB && EXPERIMENTAL
	select RT2800_LIB
	select RT2X00_LIB_USB
	select RT2X00_LIB_HT
	select RT2X00_LIB_FIRMWARE
	select RT2X00_LIB_CRYPTO
	select CRC_CCITT
	---help---
	  This adds experimental support for rt2800 wireless chipset family.
	  Supported chips: RT2770, RT2870 & RT3070.

	  Known issues:
	  - support for RT2870 chips doesn't work with 802.11n APs yet
	  - support for RT3070 chips is non-functional at the moment

	  When compiled as a module, this driver will be called "rt2800usb.ko".

if RT2800USB

config RT2800USB_RT30XX
	bool "rt2800usb - Include support for rt30xx (USB) devices"
	default y
	---help---
	  This adds support for rt30xx wireless chipset family to the
	  rt2800usb driver.
	  Supported chips: RT3070, RT3071 & RT3072

	  Support for these devices is non-functional at the moment and is
	  intended for testers and developers.

config RT2800USB_RT35XX
	bool "rt2800usb - Include support for rt35xx (USB) devices"
	default n
	---help---
	  This adds support for rt35xx wireless chipset family to the
	  rt2800usb driver.
	  Supported chips: RT3572

	  Support for these devices is non-functional at the moment and is
	  intended for testers and developers.

config RT2800USB_UNKNOWN
	bool "rt2800usb - Include support for unknown (USB) devices"
	default n
	---help---
	  This adds support for rt2800 family devices that are known to
	  have a rt2800 family chipset, but for which the exact chipset
	  is unknown.

	  Support status for these devices is unknown, and enabling these
	  devices may or may not work.

endif

config RT2800_LIB
	tristate

config RT2X00_LIB_PCI
	tristate
	select RT2X00_LIB

config RT2X00_LIB_SOC
	tristate
	select RT2X00_LIB

config RT2X00_LIB_USB
	tristate
	select RT2X00_LIB

config RT2X00_LIB
	tristate

config RT2X00_LIB_HT
	boolean

config RT2X00_LIB_FIRMWARE
	boolean
	select FW_LOADER

config RT2X00_LIB_CRYPTO
	boolean

config RT2X00_LIB_LEDS
	boolean
	default y if (RT2X00_LIB=y && LEDS_CLASS=y) || (RT2X00_LIB=m && LEDS_CLASS!=n)

config RT2X00_LIB_DEBUGFS
	bool "Ralink debugfs support"
	depends on RT2X00_LIB && MAC80211_DEBUGFS
	---help---
	  Enable creation of debugfs files for the rt2x00 drivers.
	  These debugfs files support both reading and writing of the
	  most important register types of the rt2x00 hardware.

config RT2X00_DEBUG
	bool "Ralink debug output"
	depends on RT2X00_LIB
	---help---
	  Enable debugging output for all rt2x00 modules

endif
