config ATH9K_HW
	tristate
config ATH9K_COMMON
	tristate
	select ATH_COMMON
config ATH9K_COMMON_DEBUG
	bool
config ATH9K_DFS_DEBUGFS
	def_bool y
	depends on ATH9K_DEBUGFS && ATH9K_DFS_CERTIFIED

config ATH9K_BTCOEX_SUPPORT
	bool "Atheros bluetooth coexistence support"
	depends on (ATH9K || ATH9K_HTC)
	default y
	---help---
	  Say Y, if you want to use the ath9k/ath9k_htc radios together with
	  Bluetooth modules in the same system.

config ATH9K
	tristate "Atheros 802.11n wireless cards support"
	depends on MAC80211 && HAS_DMA
	select ATH9K_HW
	select MAC80211_LEDS
	select LEDS_CLASS
	select NEW_LEDS
	select ATH9K_COMMON
	---help---
	  This module adds support for wireless adapters based on
	  Atheros IEEE 802.11n AR5008, AR9001 and AR9002 family
	  of chipsets. For a specific list of supported external
	  cards, laptops that already ship with these cards and
	  APs that come with these cards refer to ath9k wiki
	  products page:

	  http://wireless.kernel.org/en/users/Drivers/ath9k/products

	  If you choose to build a module, it'll be called ath9k.

config ATH9K_PCI
	bool "Atheros ath9k PCI/PCIe bus support"
	default y
	depends on ATH9K && PCI
	---help---
	  This option enables the PCI bus support in ath9k.

	  Say Y, if you have a compatible PCI/PCIe wireless card.

config ATH9K_AHB
	bool "Atheros ath9k AHB bus support"
	depends on ATH9K
	default n
	---help---
	  This option enables the AHB bus support in ath9k.

	  Say Y, if you have a SoC with a compatible built-in
	  wireless MAC. Say N if unsure.

config ATH9K_DEBUGFS
	bool "Atheros ath9k debugging"
	depends on ATH9K && DEBUG_FS
	select MAC80211_DEBUGFS
	select ATH9K_COMMON_DEBUG
	select RELAY
	---help---
	  Say Y, if you need access to ath9k's statistics for
	  interrupts, rate control, etc.

	  Also required for changing debug message flags at run time.
	  As well as access to the FFT/spectral data and TX99.

config ATH9K_STATION_STATISTICS
	bool "Detailed station statistics"
	depends on ATH9K && ATH9K_DEBUGFS && DEBUG_FS
	select MAC80211_DEBUGFS
	default n
	---help---
	  This option enables detailed statistics for association stations.

config ATH9K_TX99
	bool "Atheros ath9k TX99 testing support"
	depends on ATH9K_DEBUGFS && CFG80211_CERTIFICATION_ONUS
	default n
	---help---
	  Say N. This should only be enabled on systems undergoing
	  certification testing and evaluation in a controlled environment.
	  Enabling this will only enable TX99 support, all other modes of
	  operation will be disabled.

	  TX99 support enables Specific Absorption Rate (SAR) testing.
	  SAR is the unit of measurement for the amount of radio frequency(RF)
	  absorbed by the body when using a wireless device. The RF exposure
	  limits used are expressed in the terms of SAR, which is a measure
	  of the electric and magnetic field strength and power density for
	  transmitters operating at frequencies from 300 kHz to 100 GHz.
	  Regulatory bodies around the world require that wireless device
	  be evaluated to meet the RF exposure limits set forth in the
	  governmental SAR regulations.

config ATH9K_DFS_CERTIFIED
	bool "Atheros DFS support for certified platforms"
	depends on ATH9K && CFG80211_CERTIFICATION_ONUS
	default n
	---help---
	  This option enables DFS support for initiating radiation on
	  ath9k. There is no way to dynamically detect if a card was DFS
	  certified and as such this is left as a build time option. This
	  option should only be enabled by system integrators that can
	  guarantee that all the platforms that their kernel will run on
	  have obtained appropriate regulatory body certification for a
	  respective Atheros card by using ath9k on the target shipping
	  platforms.

	  This is currently only a placeholder for future DFS support,
	  as DFS support requires more components that still need to be
	  developed. At this point enabling this option won't do anything
	  except increase code size.

config ATH9K_DYNACK
	bool "Atheros ath9k ACK timeout estimation algorithm (EXPERIMENTAL)"
	depends on ATH9K
	default n
	---help---
	  This option enables ath9k dynamic ACK timeout estimation algorithm
	  based on ACK frame RX timestamp, TX frame timestamp and frame
	  duration

config ATH9K_WOW
	bool "Wake on Wireless LAN support (EXPERIMENTAL)"
	depends on ATH9K && PM
	default n
	---help---
	  This option enables Wake on Wireless LAN support for certain cards.
	  Currently, AR9462 is supported.

config ATH9K_RFKILL
	bool "Atheros ath9k rfkill support" if EXPERT
	depends on ATH9K
	depends on RFKILL=y || RFKILL=ATH9K
	default y
	help
	  Say Y to have ath9k poll the RF-Kill GPIO every couple of
	  seconds. Turn off to save power, but enable it if you have
	  a platform that can toggle the RF-Kill GPIO.

config ATH9K_CHANNEL_CONTEXT
       bool "Channel Context support"
       depends on ATH9K
       default n
       ---help---
         This option enables channel context support in ath9k, which is needed
	 for multi-channel concurrency. Enable this if P2P PowerSave support
	 is required.

config ATH9K_PCOEM
	bool "Atheros ath9k support for PC OEM cards" if EXPERT
	depends on ATH9K
	default y

config ATH9K_HTC
       tristate "Atheros HTC based wireless cards support"
       depends on USB && MAC80211
       select ATH9K_HW
       select MAC80211_LEDS
       select LEDS_CLASS
       select NEW_LEDS
       select ATH9K_COMMON
       ---help---
	 Support for Atheros HTC based cards.
	 Chipsets supported: AR9271

	 For more information: http://wireless.kernel.org/en/users/Drivers/ath9k_htc

	 The built module will be ath9k_htc.

config ATH9K_HTC_DEBUGFS
	bool "Atheros ath9k_htc debugging"
	depends on ATH9K_HTC && DEBUG_FS
	select ATH9K_COMMON_DEBUG
	select RELAY
	---help---
	  Say Y, if you need access to ath9k_htc's statistics.
	  As well as access to the FFT/spectral data.

config ATH9K_HWRNG
	bool "Random number generator support"
	depends on ATH9K && (HW_RANDOM = y || HW_RANDOM = ATH9K)
	default n
	---help---
	  This option incorporates the ADC register output as a source of
	  randomness into Linux entropy pool (/dev/urandom and /dev/random)

	  Say Y, feeds the entropy directly from the WiFi driver to the input
	  pool.
