config ATH9K_HW
	tristate
config ATH9K_COMMON
	tristate
	select ATH_COMMON
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_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_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_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_LEGACY_RATE_CONTROL
	bool "Atheros ath9k rate control"
	depends on ATH9K
	default n
	---help---
	  Say Y, if you want to use the ath9k specific rate control
	  module instead of minstrel_ht. Be warned that there are various
	  issues with the ath9k RC and minstrel is a more robust algorithm.
	  Note that even if this option is selected, "ath9k_rate_control"
	  has to be passed to mac80211 using the module parameter,
	  ieee80211_default_rc_algo.

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_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.
