config ATH9K_HW
	tristate
config ATH9K_COMMON
	tristate
	select ATH_COMMON
	select DEBUG_FS
	select RELAY
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 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.

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
	---help---
	  Say Y, if you need access to ath9k_htc's statistics.

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.
