mac80211: update to latest version, fix tx gain patch
authorFelix Fietkau <nbd@openwrt.org>
Tue, 10 Jul 2012 00:21:25 +0000 (00:21 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 10 Jul 2012 00:21:25 +0000 (00:21 +0000)
SVN-Revision: 32655

79 files changed:
package/mac80211/Makefile
package/mac80211/patches/000-disable_ethernet.patch
package/mac80211/patches/001-disable_b44.patch
package/mac80211/patches/002-disable_rfkill.patch
package/mac80211/patches/005-disable_ssb_build.patch
package/mac80211/patches/006-disable_bcma_build.patch
package/mac80211/patches/007-remove_misc_drivers.patch
package/mac80211/patches/010-no_pcmcia.patch
package/mac80211/patches/011-no_sdio.patch
package/mac80211/patches/013-disable_b43_nphy.patch
package/mac80211/patches/015-remove-rt2x00-options.patch
package/mac80211/patches/019-remove_ath5k_pci_option.patch
package/mac80211/patches/021-add_include_for_bcma.patch
package/mac80211/patches/023-ath9k_disable_btcoex.patch
package/mac80211/patches/060-compat_add_module_pci_driver.patch
package/mac80211/patches/071-add_codel_ifdef.patch
package/mac80211/patches/110-disable_usb_compat.patch
package/mac80211/patches/130-mesh_pathtbl_backport.patch
package/mac80211/patches/300-pending_work.patch
package/mac80211/patches/402-ath9k-fix-invalid-mac-address-handling.patch
package/mac80211/patches/405-regd_no_assoc_hints.patch
package/mac80211/patches/412-mac80211_allow_adhoc_and_ap.patch
package/mac80211/patches/440-ath5k_channel_bw_debugfs.patch
package/mac80211/patches/500-ath9k_eeprom_debugfs.patch
package/mac80211/patches/501-ath9k-eeprom_endianess.patch
package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
package/mac80211/patches/513-mac80211_reduce_txqueuelen.patch
package/mac80211/patches/520-mac80211_cur_txpower.patch
package/mac80211/patches/521-ath9k_cur_txpower.patch
package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch
package/mac80211/patches/530-ath9k_fix_initvals.patch
package/mac80211/patches/540-ath9k_extra_leds.patch
package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch
package/mac80211/patches/561-ath9k_antenna_mask_validate.patch
package/mac80211/patches/563-ath9k_enable_ar9340_ani.patch
package/mac80211/patches/564-ath9k_fix_ani_update.patch [deleted file]
package/mac80211/patches/564-ath9k_revert_initval_change.patch [new file with mode: 0644]
package/mac80211/patches/565-ath9k_fix_txgain.patch [new file with mode: 0644]
package/mac80211/patches/565-ath9k_update_ar9340_initvals.patch [deleted file]
package/mac80211/patches/566-ath9k_deduplicate_initvals.patch [deleted file]
package/mac80211/patches/567-ath9k_revert_initval_change.patch [deleted file]
package/mac80211/patches/568-ath9k_fix_ar9340_tx_gain.patch [deleted file]
package/mac80211/patches/570-ath9k-define-DEVID-for-QCA955x.patch [deleted file]
package/mac80211/patches/570-ath9k_config_qlen.patch
package/mac80211/patches/571-ath9k-define-MAC-version-for-AR9550.patch [deleted file]
package/mac80211/patches/572-ath9k-set-MAC-version-for-AR9550.patch [deleted file]
package/mac80211/patches/573-ath9k-add-platform_device_id-for-AR9550.patch [deleted file]
package/mac80211/patches/574-ath9k-add-BB-name-string-for-AR9550.patch [deleted file]
package/mac80211/patches/575-ath9k-clear-pciexpress-flag-for-AR9550.patch [deleted file]
package/mac80211/patches/576-ath9k-enable-TX-RX-data-byte-swap-for-AR9550.patch [deleted file]
package/mac80211/patches/577-ath9k-add-initvals-for-AR9550.patch [deleted file]
package/mac80211/patches/578-ath9k-add-mode-register-initialization-code-for-AR95.patch [deleted file]
package/mac80211/patches/579-ath9k-read-spur-frequency-information-from-eeprom-fo.patch [deleted file]
package/mac80211/patches/580-ath9k-fix-XPABIASLEVEL-settings-for-AR9550.patch [deleted file]
package/mac80211/patches/581-ath9k-fix-antenna-control-configuration-for-AR9550.patch [deleted file]
package/mac80211/patches/582-ath9k-fix-PAPRD-settings-for-AR9550.patch [deleted file]
package/mac80211/patches/583-ath9k-fix-RF-channel-frequency-configuration-for-AR9.patch [deleted file]
package/mac80211/patches/584-ath9k-disable-SYNC_HOST1_FATAL-interrupts-for-AR9550.patch [deleted file]
package/mac80211/patches/585-ath9k-skip-internal-regulator-configuration-for-AR95.patch [deleted file]
package/mac80211/patches/586-ath9k-fix-PLL-initialization-for-AR9550.patch [deleted file]
package/mac80211/patches/587-ath9k-enable-PLL-workaround-for-AR9550.patch [deleted file]
package/mac80211/patches/588-ath9k-set-4ADDRESS-bit-in-RX-filter-for-AR9550.patch [deleted file]
package/mac80211/patches/589-ath9k-enable-support-for-AR9550.patch [deleted file]
package/mac80211/patches/600-rt2x00-disable-pci-code-if-CONFIG_PCI-not-defined.patch
package/mac80211/patches/601-rt2x00-set_pci_mwi.patch
package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch
package/mac80211/patches/604-rt2x00-add-CONFIG_RT2X00_LIB_EEPROM-option.patch
package/mac80211/patches/605-rt2x00-pci-eeprom.patch
package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch
package/mac80211/patches/608-add_platform_data_mac_addr.patch
package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch
package/mac80211/patches/830-b43-workaround-pcie-bcm4716.patch
package/mac80211/patches/846-brcmsmac-remove-some-unnessessacry-casts-and-void-po.patch
package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch
package/mac80211/patches/848-brcmsmac-some-more-fixes-for-different-core-revs.patch
package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch
package/mac80211/patches/850-brcmsmac-add-support-for-BCM43224.patch
package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch

index 0e2b25cac8640bc2d4163bf1862d027cc3dff848..714361242a395f223207309b69a30f426016d7c2 100644 (file)
@@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=mac80211
 
-PKG_VERSION:=2012-06-14
-PKG_RELEASE:=2
+PKG_VERSION:=2012-07-06
+PKG_RELEASE:=1
 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
-PKG_MD5SUM:=009fd7aa420693e30df9090cee9ea189
+PKG_MD5SUM:=71e1ba84a7d1c3ab69ee1b68fa9e1269
 
 PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
index 2c5e3d086a0a3c14dbb64624703f2178150afc2a..08f908b10f370b3768dda3b0c775942fad31685e 100644 (file)
@@ -1,6 +1,6 @@
 --- a/Makefile
 +++ b/Makefile
-@@ -44,9 +44,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
+@@ -45,9 +45,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
  
  obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
  
index aae8ef956aab46a0ac469b2bdd3b53be192352fe..2bcead9c19f908dd34f3420fcc03a8a6995bd6c5 100644 (file)
@@ -1,6 +1,6 @@
 --- a/config.mk
 +++ b/config.mk
-@@ -371,8 +371,8 @@ export CONFIG_B43_BCMA_EXTRA=y
+@@ -376,8 +376,8 @@ export CONFIG_B43_BCMA_EXTRA=y
  
  export CONFIG_P54_PCI=m
  
index 4660909b249b9cf0037734efdf0e043c2b15dccd..f977c96059904949659ee00f83840647bbf5f8c2 100644 (file)
@@ -9,7 +9,7 @@
  
  ifeq ($(CONFIG_MAC80211),y)
  $(error "ERROR: you have MAC80211 compiled into the kernel, CONFIG_MAC80211=y, as such you cannot replace its mac80211 driver. You need this set to CONFIG_MAC80211=m. If you are using Fedora upgrade your kernel as later version should this set as modular. For further information on Fedora see https://bugzilla.redhat.com/show_bug.cgi?id=470143. If you are using your own kernel recompile it and make mac80211 modular")
-@@ -683,10 +683,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
+@@ -688,10 +688,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
  # We need the backported rfkill module on kernel < 2.6.31.
  # In more recent kernel versions use the in kernel rfkill module.
  ifdef CONFIG_COMPAT_KERNEL_2_6_31
index 23ce92440d092b7942819aad13ea31a58dbd5f80..4bf9797f6b11195fed0c601da6e03bc606313168 100644 (file)
@@ -1,6 +1,6 @@
 --- a/Makefile
 +++ b/Makefile
-@@ -44,7 +44,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
+@@ -45,7 +45,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
  
  obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
  
@@ -19,7 +19,7 @@
  else
  include $(KLIB_BUILD)/.config
  endif
-@@ -347,7 +347,8 @@ export CONFIG_IPW2200_QOS=y
+@@ -352,7 +352,8 @@ export CONFIG_IPW2200_QOS=y
  # % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
  endif #CONFIG_WIRELESS_EXT
  
@@ -29,7 +29,7 @@
  # Sonics Silicon Backplane
  export CONFIG_SSB_SPROM=y
  
-@@ -360,7 +361,7 @@ endif #CONFIG_PCMCIA
+@@ -365,7 +366,7 @@ endif #CONFIG_PCMCIA
  # export CONFIG_SSB_DEBUG=y
  export CONFIG_SSB_DRIVER_PCICORE=y
  export CONFIG_B43_SSB=y
@@ -38,7 +38,7 @@
  
  export CONFIG_BCMA=m
  export CONFIG_BCMA_BLOCKIO=y
-@@ -577,7 +578,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
+@@ -582,7 +583,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
  
  ifdef CONFIG_MMC
  
index a0265ac79741dcdbfaa1d682e23b3ad9bf0c0209..1b53070bdc1f4a839223dc0c9d10be414f7c45ea 100644 (file)
@@ -1,6 +1,6 @@
 --- a/Makefile
 +++ b/Makefile
-@@ -44,7 +44,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
+@@ -45,7 +45,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
  
  obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
  
@@ -10,7 +10,7 @@
  ifeq ($(CONFIG_STAGING_EXCLUDE_BUILD),)
 --- a/config.mk
 +++ b/config.mk
-@@ -363,12 +363,12 @@ export CONFIG_SSB_DRIVER_PCICORE=y
+@@ -368,12 +368,12 @@ export CONFIG_SSB_DRIVER_PCICORE=y
  export CONFIG_B43_SSB=y
  endif #__CONFIG_SSB
  
index b89089d98245449c9ee4efdfc35deb6fe277ed3c..d22bee416ac233a0680c700c385e71c79c1c2521 100644 (file)
@@ -9,7 +9,7 @@
  endif #CONFIG_STAGING
  
  # mac80211 test driver
-@@ -400,15 +400,15 @@ endif #CONFIG_CRC_ITU_T
+@@ -405,15 +405,15 @@ endif #CONFIG_CRC_ITU_T
  export CONFIG_MWL8K=m
  
  # Ethernet drivers go here
@@ -32,7 +32,7 @@
  endif #CONFIG_COMPAT_KERNEL_2_6_28
  
  ifdef CONFIG_WIRELESS_EXT
-@@ -469,21 +469,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
+@@ -474,21 +474,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
  # Note: this depends on CONFIG_USB_NET_RNDIS_HOST and CONFIG_USB_NET_CDCETHER
  # it also requires new RNDIS_HOST and CDC_ETHER modules which we add
  ifdef CONFIG_COMPAT_KERNEL_2_6_29
index e9b5ab7346c41890607673b87a9821f38cf6ecb2..6bde2d976e9e0000c711b82adae03355d639d41b 100644 (file)
@@ -9,7 +9,7 @@
  # export CONFIG_SSB=m
  else
  include $(KLIB_BUILD)/.config
-@@ -298,7 +298,7 @@ export CONFIG_B43=m
+@@ -303,7 +303,7 @@ export CONFIG_B43=m
  export CONFIG_B43_HWRNG=y
  export CONFIG_B43_PCI_AUTOSELECT=y
  ifdef CONFIG_PCMCIA
index 380074754ee188d17429c10cf5a6d9ef91276c77..19df10bdc15a5ff2561d34289100d65575f344f7 100644 (file)
@@ -1,6 +1,6 @@
 --- a/config.mk
 +++ b/config.mk
-@@ -579,7 +579,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
+@@ -584,7 +584,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
  ifdef CONFIG_MMC
  
  # export CONFIG_SSB_SDIOHOST=y
index ae5be9ff6517816bb79e833c82f7adcf3fc43305..b95980499d36b9e299cdcadddfed8282b6ee2e52 100644 (file)
@@ -1,6 +1,6 @@
 --- a/config.mk
 +++ b/config.mk
-@@ -304,8 +304,8 @@ ifdef CONFIG_MAC80211_LEDS
+@@ -309,8 +309,8 @@ ifdef CONFIG_MAC80211_LEDS
  export CONFIG_B43_LEDS=y
  endif #CONFIG_MAC80211_LEDS
  export CONFIG_B43_PHY_LP=y
index 5b029c41dbf2611443cc1f53868ad13c4f4ea2bc..3762f73c1064cf5c52f44b373183f0aa375ea430 100644 (file)
@@ -1,6 +1,6 @@
 --- a/config.mk
 +++ b/config.mk
-@@ -379,7 +379,7 @@ export CONFIG_RTL8180=m
+@@ -384,7 +384,7 @@ export CONFIG_RTL8180=m
  
  export CONFIG_ADM8211=m
  
@@ -9,7 +9,7 @@
  export CONFIG_RT2400PCI=m
  export CONFIG_RT2500PCI=m
  ifdef CONFIG_CRC_CCITT
-@@ -525,7 +525,7 @@ export CONFIG_RT2800USB_RT35XX=y
+@@ -530,7 +530,7 @@ export CONFIG_RT2800USB_RT35XX=y
  export CONFIG_RT2800USB_RT53XX=y
  export CONFIG_RT2800USB_UNKNOWN=y
  endif #CONFIG_CRC_CCITT
index 581fbfcbe7ba098994d5056a80a44d7062cbe74d..0dd905c868dfa3592723f02ae77598805b294345 100644 (file)
@@ -1,6 +1,6 @@
 --- a/config.mk
 +++ b/config.mk
-@@ -276,7 +276,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
+@@ -281,7 +281,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
  # PCI Drivers
  ifdef CONFIG_PCI
  
index 21b624e7916c6b8c00ed0b879a7e8624b179770b..e2e856eb0563325ac0dac0202a935074f07f6bd2 100644 (file)
@@ -1,8 +1,8 @@
 --- a/include/linux/compat-3.0.h
 +++ b/include/linux/compat-3.0.h
-@@ -7,6 +7,8 @@
+@@ -36,6 +36,8 @@ static inline struct page *shmem_read_ma
+ #endif
  
- #include <linux/rcupdate.h>
  
 +#include <linux/mod_devicetable.h>
 +
index 36645fc75ab90b4976189cf41898f9957aac7f29..900f030882049c74732f09bf5e47dfa748128835 100644 (file)
@@ -7,5 +7,5 @@
 -export CONFIG_ATH9K_BTCOEX_SUPPORT=y
 +# export CONFIG_ATH9K_BTCOEX_SUPPORT=y
  
- ifndef CONFIG_COMPAT_KERNEL_2_6_27
- export CONFIG_ATH6KL=m
+ # WIL6210 requires MSI only available >= 2.6.30
+ ifndef CONFIG_COMPAT_KERNEL_2_6_30
index 6ddfc7dbece7b99fc570b39e4eaddd1afbbbc560..8a35d4e78ee5ad6bfd4c27ea36ce7990dfcfe1f0 100644 (file)
@@ -1,6 +1,6 @@
 --- a/include/linux/compat-3.4.h
 +++ b/include/linux/compat-3.4.h
-@@ -77,6 +77,19 @@ static inline void eth_hw_addr_random(st
+@@ -81,6 +81,19 @@ static inline void eth_hw_addr_random(st
        module_driver(__pci_driver, pci_register_driver, \
                       pci_unregister_driver)
  
index 45a599c4f6e62b8113513b57bed4e094465b0774..86b415170baf52874917b7156e04d15fdbe34a1f 100644 (file)
@@ -9,7 +9,7 @@
  /*
   * This backports:
   *
-@@ -106,6 +108,7 @@ struct vga_switcheroo_client_ops {
+@@ -135,6 +137,7 @@ static inline int compat_vga_switcheroo_
  
  #define SIZE_MAX    (~(size_t)0)
  
index 6f674008f9b550f5c3d965268ab8cd7a305573eb..35f58141e442dae6d11ecfcee09c611f33fa85a1 100644 (file)
@@ -33,7 +33,7 @@
  #endif
 --- a/config.mk
 +++ b/config.mk
-@@ -507,7 +507,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
+@@ -512,7 +512,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
  # This activates a threading fix for usb urb.
  # this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351
  # This fix will be included in some stable releases.
index 817060d42a12df79c58596b02b14d92345345c87..bf6635a5ad21fed0686fc17d6883b5eb76e69757 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/mac80211/mesh_pathtbl.c
 +++ b/net/mac80211/mesh_pathtbl.c
-@@ -826,7 +826,6 @@ static void table_flush_by_iface(struct 
+@@ -817,7 +817,6 @@ static void table_flush_by_iface(struct 
        struct hlist_node *p;
        int i;
  
index 6062e9da2646d2a61999b615b94c94579536c209..c8dce038e3c9ddde45c6b31d5a6937a54d9eb23c 100644 (file)
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -104,11 +104,6 @@ static const struct ani_cck_level_entry 
- #define ATH9K_ANI_CCK_DEF_LEVEL \
-       2 /* default level - matches the INI settings */
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -360,7 +360,7 @@ void ath_tx_aggr_sleep(struct ieee80211_
+ struct ath_vif {
+       int av_bslot;
+-      bool is_bslot_active, primary_sta_vif;
++      bool primary_sta_vif;
+       __le64 tsf_adjust; /* TSF adjustment for staggered beacons */
+       struct ath_buf *av_bcbuf;
+ };
+@@ -386,6 +386,7 @@ struct ath_beacon_config {
+       u16 dtim_period;
+       u16 bmiss_timeout;
+       u8 dtim_count;
++      bool enable_beacon;
+ };
  
--static bool use_new_ani(struct ath_hw *ah)
--{
--      return AR_SREV_9300_20_OR_LATER(ah) || modparam_force_new_ani;
--}
--
- static void ath9k_hw_update_mibstats(struct ath_hw *ah,
-                                    struct ath9k_mib_stats *stats)
+ struct ath_beacon {
+@@ -397,7 +398,6 @@ struct ath_beacon {
+       u32 beaconq;
+       u32 bmisscnt;
+-      u32 ast_be_xmit;
+       u32 bc_tstamp;
+       struct ieee80211_vif *bslot[ATH_BCBUF];
+       int slottime;
+@@ -411,12 +411,14 @@ struct ath_beacon {
+       bool tx_last;
+ };
+-void ath_beacon_tasklet(unsigned long data);
+-void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif);
+-int ath_beacon_alloc(struct ath_softc *sc, struct ieee80211_vif *vif);
+-void ath_beacon_return(struct ath_softc *sc, struct ath_vif *avp);
+-int ath_beaconq_config(struct ath_softc *sc);
+-void ath_set_beacon(struct ath_softc *sc);
++void ath9k_beacon_tasklet(unsigned long data);
++bool ath9k_allow_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif);
++void ath9k_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif,
++                       u32 changed);
++void ath9k_beacon_assign_slot(struct ath_softc *sc, struct ieee80211_vif *vif);
++void ath9k_beacon_remove_slot(struct ath_softc *sc, struct ieee80211_vif *vif);
++void ath9k_set_tsfadjust(struct ath_softc *sc, struct ieee80211_vif *vif);
++void ath9k_set_beacon(struct ath_softc *sc);
+ void ath9k_set_beaconing_status(struct ath_softc *sc, bool status);
+ /*******************/
+@@ -442,9 +444,12 @@ void ath_rx_poll(unsigned long data);
+ void ath_start_rx_poll(struct ath_softc *sc, u8 nbeacon);
+ void ath_paprd_calibrate(struct work_struct *work);
+ void ath_ani_calibrate(unsigned long data);
+-void ath_start_ani(struct ath_common *common);
++void ath_start_ani(struct ath_softc *sc);
++void ath_stop_ani(struct ath_softc *sc);
++void ath_check_ani(struct ath_softc *sc);
+ int ath_update_survey_stats(struct ath_softc *sc);
+ void ath_update_survey_nf(struct ath_softc *sc, int channel);
++void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type);
+ /**********/
+ /* BTCOEX */
+@@ -613,7 +618,6 @@ enum sc_op_flags {
+       SC_OP_INVALID,
+       SC_OP_BEACONS,
+       SC_OP_RXFLUSH,
+-      SC_OP_TSF_RESET,
+       SC_OP_ANI_RUN,
+       SC_OP_PRIM_STA_VIF,
+       SC_OP_HW_RESET,
+--- a/drivers/net/wireless/ath/ath9k/beacon.c
++++ b/drivers/net/wireless/ath/ath9k/beacon.c
+@@ -30,7 +30,7 @@ static void ath9k_reset_beacon_status(st
+  *  the operating mode of the station (AP or AdHoc).  Parameters are AIFS
+  *  settings and channel width min/max
+ */
+-int ath_beaconq_config(struct ath_softc *sc)
++static void ath9k_beaconq_config(struct ath_softc *sc)
  {
-@@ -122,8 +117,6 @@ static void ath9k_hw_update_mibstats(str
- static void ath9k_ani_restart(struct ath_hw *ah)
+       struct ath_hw *ah = sc->sc_ah;
+       struct ath_common *common = ath9k_hw_common(ah);
+@@ -38,6 +38,7 @@ int ath_beaconq_config(struct ath_softc 
+       struct ath_txq *txq;
+       ath9k_hw_get_txq_props(ah, sc->beacon.beaconq, &qi);
++
+       if (sc->sc_ah->opmode == NL80211_IFTYPE_AP) {
+               /* Always burst out beacon and CAB traffic. */
+               qi.tqi_aifs = 1;
+@@ -56,12 +57,9 @@ int ath_beaconq_config(struct ath_softc 
+       }
+       if (!ath9k_hw_set_txq_props(ah, sc->beacon.beaconq, &qi)) {
+-              ath_err(common,
+-                      "Unable to update h/w beacon queue parameters\n");
+-              return 0;
++              ath_err(common, "Unable to update h/w beacon queue parameters\n");
+       } else {
+               ath9k_hw_resettxqueue(ah, sc->beacon.beaconq);
+-              return 1;
+       }
+ }
+@@ -70,7 +68,7 @@ int ath_beaconq_config(struct ath_softc 
+  *  up rate codes, and channel flags. Beacons are always sent out at the
+  *  lowest rate, and are not retried.
+ */
+-static void ath_beacon_setup(struct ath_softc *sc, struct ieee80211_vif *vif,
++static void ath9k_beacon_setup(struct ath_softc *sc, struct ieee80211_vif *vif,
+                            struct ath_buf *bf, int rateidx)
  {
-       struct ar5416AniState *aniState;
--      struct ath_common *common = ath9k_hw_common(ah);
--      u32 ofdm_base = 0, cck_base = 0;
+       struct sk_buff *skb = bf->bf_mpdu;
+@@ -81,8 +79,6 @@ static void ath_beacon_setup(struct ath_
+       u8 chainmask = ah->txchainmask;
+       u8 rate = 0;
  
-       if (!DO_ANI(ah))
-               return;
-@@ -131,18 +124,10 @@ static void ath9k_ani_restart(struct ath
-       aniState = &ah->curchan->ani;
-       aniState->listenTime = 0;
+-      ath9k_reset_beacon_status(sc);
+-
+       sband = &sc->sbands[common->hw->conf.channel->band];
+       rate = sband->bitrates[rateidx].hw_value;
+       if (vif->bss_conf.use_short_preamble)
+@@ -111,7 +107,7 @@ static void ath_beacon_setup(struct ath_
+       ath9k_hw_set_txdesc(ah, bf->bf_desc, &info);
+ }
  
--      if (!use_new_ani(ah)) {
--              ofdm_base = AR_PHY_COUNTMAX - ah->config.ofdm_trig_high;
--              cck_base = AR_PHY_COUNTMAX - ah->config.cck_trig_high;
--      }
+-static void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb)
++static void ath9k_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb)
+ {
+       struct ath_softc *sc = hw->priv;
+       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+@@ -128,28 +124,22 @@ static void ath_tx_cabq(struct ieee80211
+       }
+ }
+-static struct ath_buf *ath_beacon_generate(struct ieee80211_hw *hw,
+-                                         struct ieee80211_vif *vif)
++static struct ath_buf *ath9k_beacon_generate(struct ieee80211_hw *hw,
++                                           struct ieee80211_vif *vif)
+ {
+       struct ath_softc *sc = hw->priv;
+       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+       struct ath_buf *bf;
+-      struct ath_vif *avp;
++      struct ath_vif *avp = (void *)vif->drv_priv;
+       struct sk_buff *skb;
+-      struct ath_txq *cabq;
++      struct ath_txq *cabq = sc->beacon.cabq;
+       struct ieee80211_tx_info *info;
++      struct ieee80211_mgmt *mgmt_hdr;
+       int cabq_depth;
+-      ath9k_reset_beacon_status(sc);
+-
+-      avp = (void *)vif->drv_priv;
+-      cabq = sc->beacon.cabq;
+-
+-      if ((avp->av_bcbuf == NULL) || !avp->is_bslot_active)
++      if (avp->av_bcbuf == NULL)
+               return NULL;
+-      /* Release the old beacon first */
 -
--      ath_dbg(common, ANI, "Writing ofdmbase=%u   cckbase=%u\n",
--              ofdm_base, cck_base);
+       bf = avp->av_bcbuf;
+       skb = bf->bf_mpdu;
+       if (skb) {
+@@ -159,14 +149,14 @@ static struct ath_buf *ath_beacon_genera
+               bf->bf_buf_addr = 0;
+       }
+-      /* Get a new beacon from mac80211 */
 -
-       ENABLE_REGWRITE_BUFFER(ah);
+       skb = ieee80211_beacon_get(hw, vif);
+-      bf->bf_mpdu = skb;
+       if (skb == NULL)
+               return NULL;
+-      ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp =
+-              avp->tsf_adjust;
++
++      bf->bf_mpdu = skb;
++
++      mgmt_hdr = (struct ieee80211_mgmt *)skb->data;
++      mgmt_hdr->u.beacon.timestamp = avp->tsf_adjust;
+       info = IEEE80211_SKB_CB(skb);
+       if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) {
+@@ -212,61 +202,52 @@ static struct ath_buf *ath_beacon_genera
+               }
+       }
  
--      REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base);
--      REG_WRITE(ah, AR_PHY_ERR_2, cck_base);
-+      REG_WRITE(ah, AR_PHY_ERR_1, 0);
-+      REG_WRITE(ah, AR_PHY_ERR_2, 0);
-       REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
-       REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
+-      ath_beacon_setup(sc, vif, bf, info->control.rates[0].idx);
++      ath9k_beacon_setup(sc, vif, bf, info->control.rates[0].idx);
  
-@@ -154,110 +139,6 @@ static void ath9k_ani_restart(struct ath
-       aniState->cckPhyErrCount = 0;
+       while (skb) {
+-              ath_tx_cabq(hw, skb);
++              ath9k_tx_cabq(hw, skb);
+               skb = ieee80211_get_buffered_bc(hw, vif);
+       }
+       return bf;
  }
  
--static void ath9k_hw_ani_ofdm_err_trigger_old(struct ath_hw *ah)
--{
--      struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
--      struct ar5416AniState *aniState;
--      int32_t rssi;
--
--      aniState = &ah->curchan->ani;
+-int ath_beacon_alloc(struct ath_softc *sc, struct ieee80211_vif *vif)
++void ath9k_beacon_assign_slot(struct ath_softc *sc, struct ieee80211_vif *vif)
+ {
+       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+-      struct ath_vif *avp;
+-      struct ath_buf *bf;
+-      struct sk_buff *skb;
+-      struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+-      __le64 tstamp;
++      struct ath_vif *avp = (void *)vif->drv_priv;
++      int slot;
+-      avp = (void *)vif->drv_priv;
++      avp->av_bcbuf = list_first_entry(&sc->beacon.bbuf, struct ath_buf, list);
++      list_del(&avp->av_bcbuf->list);
+-      /* Allocate a beacon descriptor if we haven't done so. */
+-      if (!avp->av_bcbuf) {
+-              /* Allocate beacon state for hostap/ibss.  We know
+-               * a buffer is available. */
+-              avp->av_bcbuf = list_first_entry(&sc->beacon.bbuf,
+-                                               struct ath_buf, list);
+-              list_del(&avp->av_bcbuf->list);
 -
--      if (aniState->noiseImmunityLevel < HAL_NOISE_IMMUNE_MAX) {
--              if (ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
--                                       aniState->noiseImmunityLevel + 1)) {
--                      return;
--              }
--      }
+-              if (ath9k_uses_beacons(vif->type)) {
+-                      int slot;
+-                      /*
+-                       * Assign the vif to a beacon xmit slot. As
+-                       * above, this cannot fail to find one.
+-                       */
+-                      avp->av_bslot = 0;
+-                      for (slot = 0; slot < ATH_BCBUF; slot++)
+-                              if (sc->beacon.bslot[slot] == NULL) {
+-                                      avp->av_bslot = slot;
+-                                      avp->is_bslot_active = false;
 -
--      if (aniState->spurImmunityLevel < HAL_SPUR_IMMUNE_MAX) {
--              if (ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
--                                       aniState->spurImmunityLevel + 1)) {
--                      return;
--              }
--      }
+-                                      /* NB: keep looking for a double slot */
+-                                      if (slot == 0 || !sc->beacon.bslot[slot-1])
+-                                              break;
+-                              }
+-                      BUG_ON(sc->beacon.bslot[avp->av_bslot] != NULL);
+-                      sc->beacon.bslot[avp->av_bslot] = vif;
+-                      sc->nbcnvifs++;
++      for (slot = 0; slot < ATH_BCBUF; slot++) {
++              if (sc->beacon.bslot[slot] == NULL) {
++                      avp->av_bslot = slot;
++                      break;
+               }
+       }
+-      /* release the previous beacon frame, if it already exists. */
+-      bf = avp->av_bcbuf;
+-      if (bf->bf_mpdu != NULL) {
+-              skb = bf->bf_mpdu;
++      sc->beacon.bslot[avp->av_bslot] = vif;
++      sc->nbcnvifs++;
++
++      ath_dbg(common, CONFIG, "Added interface at beacon slot: %d\n",
++              avp->av_bslot);
++}
++
++void ath9k_beacon_remove_slot(struct ath_softc *sc, struct ieee80211_vif *vif)
++{
++      struct ath_common *common = ath9k_hw_common(sc->sc_ah);
++      struct ath_vif *avp = (void *)vif->drv_priv;
++      struct ath_buf *bf = avp->av_bcbuf;
++
++      ath_dbg(common, CONFIG, "Removing interface at beacon slot: %d\n",
++              avp->av_bslot);
++
++      tasklet_disable(&sc->bcon_tasklet);
++
++      if (bf && bf->bf_mpdu) {
++              struct sk_buff *skb = bf->bf_mpdu;
+               dma_unmap_single(sc->dev, bf->bf_buf_addr,
+                                skb->len, DMA_TO_DEVICE);
+               dev_kfree_skb_any(skb);
+@@ -274,99 +255,74 @@ int ath_beacon_alloc(struct ath_softc *s
+               bf->bf_buf_addr = 0;
+       }
+-      /* NB: the beacon data buffer must be 32-bit aligned. */
+-      skb = ieee80211_beacon_get(sc->hw, vif);
+-      if (skb == NULL)
+-              return -ENOMEM;
 -
--      if (ah->opmode == NL80211_IFTYPE_AP) {
--              if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
--                      ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
--                                           aniState->firstepLevel + 1);
--              }
--              return;
+-      tstamp = ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp;
+-      sc->beacon.bc_tstamp = (u32) le64_to_cpu(tstamp);
+-      /* Calculate a TSF adjustment factor required for staggered beacons. */
+-      if (avp->av_bslot > 0) {
+-              u64 tsfadjust;
+-              int intval;
++      avp->av_bcbuf = NULL;
++      sc->beacon.bslot[avp->av_bslot] = NULL;
++      sc->nbcnvifs--;
++      list_add_tail(&bf->list, &sc->beacon.bbuf);
+-              intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL;
++      tasklet_enable(&sc->bcon_tasklet);
++}
+-              /*
+-               * Calculate the TSF offset for this beacon slot, i.e., the
+-               * number of usecs that need to be added to the timestamp field
+-               * in Beacon and Probe Response frames. Beacon slot 0 is
+-               * processed at the correct offset, so it does not require TSF
+-               * adjustment. Other slots are adjusted to get the timestamp
+-               * close to the TBTT for the BSS.
+-               */
+-              tsfadjust = TU_TO_USEC(intval * avp->av_bslot) / ATH_BCBUF;
+-              avp->tsf_adjust = cpu_to_le64(tsfadjust);
++static int ath9k_beacon_choose_slot(struct ath_softc *sc)
++{
++      struct ath_common *common = ath9k_hw_common(sc->sc_ah);
++      struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
++      u16 intval;
++      u32 tsftu;
++      u64 tsf;
++      int slot;
+-              ath_dbg(common, BEACON,
+-                      "stagger beacons, bslot %d intval %u tsfadjust %llu\n",
+-                      avp->av_bslot, intval, (unsigned long long)tsfadjust);
++      if (sc->sc_ah->opmode != NL80211_IFTYPE_AP) {
++              ath_dbg(common, BEACON, "slot 0, tsf: %llu\n",
++                      ath9k_hw_gettsf64(sc->sc_ah));
++              return 0;
++      }
+-              ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp =
+-                      avp->tsf_adjust;
+-      } else
+-              avp->tsf_adjust = cpu_to_le64(0);
++      intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL;
++      tsf = ath9k_hw_gettsf64(sc->sc_ah);
++      tsf += TU_TO_USEC(sc->sc_ah->config.sw_beacon_response_time);
++      tsftu = TSF_TO_TU((tsf * ATH_BCBUF) >>32, tsf * ATH_BCBUF);
++      slot = (tsftu % (intval * ATH_BCBUF)) / intval;
+-      bf->bf_mpdu = skb;
+-      bf->bf_buf_addr = dma_map_single(sc->dev, skb->data,
+-                                       skb->len, DMA_TO_DEVICE);
+-      if (unlikely(dma_mapping_error(sc->dev, bf->bf_buf_addr))) {
+-              dev_kfree_skb_any(skb);
+-              bf->bf_mpdu = NULL;
+-              bf->bf_buf_addr = 0;
+-              ath_err(common, "dma_mapping_error on beacon alloc\n");
+-              return -ENOMEM;
 -      }
--      rssi = BEACON_RSSI(ah);
--      if (rssi > aniState->rssiThrHigh) {
--              if (!aniState->ofdmWeakSigDetectOff) {
--                      if (ath9k_hw_ani_control(ah,
--                                       ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
--                                       false)) {
--                              ath9k_hw_ani_control(ah,
--                                      ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0);
--                              return;
--                      }
--              }
--              if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
--                      ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
--                                           aniState->firstepLevel + 1);
--                      return;
+-      avp->is_bslot_active = true;
++      ath_dbg(common, BEACON, "slot: %d tsf: %llu tsftu: %u\n",
++              slot, tsf, tsftu / ATH_BCBUF);
+-      return 0;
++      return slot;
+ }
+-void ath_beacon_return(struct ath_softc *sc, struct ath_vif *avp)
++void ath9k_set_tsfadjust(struct ath_softc *sc, struct ieee80211_vif *vif)
+ {
+-      if (avp->av_bcbuf != NULL) {
+-              struct ath_buf *bf;
++      struct ath_common *common = ath9k_hw_common(sc->sc_ah);
++      struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
++      struct ath_vif *avp = (void *)vif->drv_priv;
++      u64 tsfadjust;
+-              avp->is_bslot_active = false;
+-              if (avp->av_bslot != -1) {
+-                      sc->beacon.bslot[avp->av_bslot] = NULL;
+-                      sc->nbcnvifs--;
+-                      avp->av_bslot = -1;
 -              }
--      } else if (rssi > aniState->rssiThrLow) {
--              if (aniState->ofdmWeakSigDetectOff)
--                      ath9k_hw_ani_control(ah,
--                                   ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
--                                   true);
--              if (aniState->firstepLevel < HAL_FIRST_STEP_MAX)
--                      ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
--                                           aniState->firstepLevel + 1);
--              return;
--      } else {
--              if ((conf->channel->band == IEEE80211_BAND_2GHZ) &&
--                  !conf_is_ht(conf)) {
--                      if (!aniState->ofdmWeakSigDetectOff)
--                              ath9k_hw_ani_control(ah,
--                                   ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
--                                   false);
--                      if (aniState->firstepLevel > 0)
--                              ath9k_hw_ani_control(ah,
--                                           ATH9K_ANI_FIRSTEP_LEVEL, 0);
--                      return;
++      if (avp->av_bslot == 0)
++              return;
+-              bf = avp->av_bcbuf;
+-              if (bf->bf_mpdu != NULL) {
+-                      struct sk_buff *skb = bf->bf_mpdu;
+-                      dma_unmap_single(sc->dev, bf->bf_buf_addr,
+-                                       skb->len, DMA_TO_DEVICE);
+-                      dev_kfree_skb_any(skb);
+-                      bf->bf_mpdu = NULL;
+-                      bf->bf_buf_addr = 0;
 -              }
+-              list_add_tail(&bf->list, &sc->beacon.bbuf);
++      tsfadjust = cur_conf->beacon_interval * avp->av_bslot / ATH_BCBUF;
++      avp->tsf_adjust = cpu_to_le64(TU_TO_USEC(tsfadjust));
+-              avp->av_bcbuf = NULL;
 -      }
--}
++      ath_dbg(common, CONFIG, "tsfadjust is: %llu for bslot: %d\n",
++              (unsigned long long)tsfadjust, avp->av_bslot);
+ }
+-void ath_beacon_tasklet(unsigned long data)
++void ath9k_beacon_tasklet(unsigned long data)
+ {
+       struct ath_softc *sc = (struct ath_softc *)data;
+-      struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+       struct ath_hw *ah = sc->sc_ah;
+       struct ath_common *common = ath9k_hw_common(ah);
+       struct ath_buf *bf = NULL;
+       struct ieee80211_vif *vif;
+       bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
+       int slot;
+-      u32 bfaddr, bc = 0;
+-      if (work_pending(&sc->hw_reset_work)) {
++      if (test_bit(SC_OP_HW_RESET, &sc->sc_flags)) {
+               ath_dbg(common, RESET,
+                       "reset work is pending, skip beaconing now\n");
+               return;
+       }
++
+       /*
+        * Check if the previous beacon has gone out.  If
+        * not don't try to post another, skip this period
+@@ -390,55 +346,25 @@ void ath_beacon_tasklet(unsigned long da
+               } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) {
+                       ath_dbg(common, BSTUCK, "beacon is officially stuck\n");
+                       sc->beacon.bmisscnt = 0;
+-                      set_bit(SC_OP_TSF_RESET, &sc->sc_flags);
+-                      ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++                      ath9k_queue_reset(sc, RESET_TYPE_BEACON_STUCK);
+               }
+               return;
+       }
+-      /*
+-       * Generate beacon frames. we are sending frames
+-       * staggered so calculate the slot for this frame based
+-       * on the tsf to safeguard against missing an swba.
+-       */
 -
--static void ath9k_hw_ani_cck_err_trigger_old(struct ath_hw *ah)
--{
--      struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
--      struct ar5416AniState *aniState;
--      int32_t rssi;
 -
--      aniState = &ah->curchan->ani;
--      if (aniState->noiseImmunityLevel < HAL_NOISE_IMMUNE_MAX) {
--              if (ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
--                                       aniState->noiseImmunityLevel + 1)) {
--                      return;
--              }
--      }
 -      if (ah->opmode == NL80211_IFTYPE_AP) {
--              if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
--                      ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
--                                           aniState->firstepLevel + 1);
--              }
--              return;
--      }
--      rssi = BEACON_RSSI(ah);
--      if (rssi > aniState->rssiThrLow) {
--              if (aniState->firstepLevel < HAL_FIRST_STEP_MAX)
--                      ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
--                                           aniState->firstepLevel + 1);
+-              u16 intval;
+-              u32 tsftu;
+-              u64 tsf;
+-
+-              intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL;
+-              tsf = ath9k_hw_gettsf64(ah);
+-              tsf += TU_TO_USEC(ah->config.sw_beacon_response_time);
+-              tsftu = TSF_TO_TU((tsf * ATH_BCBUF) >>32, tsf * ATH_BCBUF);
+-              slot = (tsftu % (intval * ATH_BCBUF)) / intval;
+-              vif = sc->beacon.bslot[slot];
+-
+-              ath_dbg(common, BEACON,
+-                      "slot %d [tsf %llu tsftu %u intval %u] vif %p\n",
+-                      slot, tsf, tsftu / ATH_BCBUF, intval, vif);
 -      } else {
--              if ((conf->channel->band == IEEE80211_BAND_2GHZ) &&
--                  !conf_is_ht(conf)) {
--                      if (aniState->firstepLevel > 0)
--                              ath9k_hw_ani_control(ah,
--                                           ATH9K_ANI_FIRSTEP_LEVEL, 0);
+-              slot = 0;
+-              vif = sc->beacon.bslot[slot];
+-      }
++      slot = ath9k_beacon_choose_slot(sc);
++      vif = sc->beacon.bslot[slot];
++      if (!vif || !vif->bss_conf.enable_beacon)
++              return;
+-      bfaddr = 0;
+-      if (vif) {
+-              bf = ath_beacon_generate(sc->hw, vif);
+-              if (bf != NULL) {
+-                      bfaddr = bf->bf_daddr;
+-                      bc = 1;
+-              }
++      bf = ath9k_beacon_generate(sc->hw, vif);
++      WARN_ON(!bf);
+-              if (sc->beacon.bmisscnt != 0) {
+-                      ath_dbg(common, BSTUCK,
+-                              "resume beacon xmit after %u misses\n",
+-                              sc->beacon.bmisscnt);
+-                      sc->beacon.bmisscnt = 0;
 -              }
++      if (sc->beacon.bmisscnt != 0) {
++              ath_dbg(common, BSTUCK, "resume beacon xmit after %u misses\n",
++                      sc->beacon.bmisscnt);
++              sc->beacon.bmisscnt = 0;
+       }
+       /*
+@@ -458,39 +384,37 @@ void ath_beacon_tasklet(unsigned long da
+        *     set to ATH_BCBUF so this check is a noop.
+        */
+       if (sc->beacon.updateslot == UPDATE) {
+-              sc->beacon.updateslot = COMMIT; /* commit next beacon */
++              sc->beacon.updateslot = COMMIT;
+               sc->beacon.slotupdate = slot;
+-      } else if (sc->beacon.updateslot == COMMIT && sc->beacon.slotupdate == slot) {
++      } else if (sc->beacon.updateslot == COMMIT &&
++                 sc->beacon.slotupdate == slot) {
+               ah->slottime = sc->beacon.slottime;
+               ath9k_hw_init_global_settings(ah);
+               sc->beacon.updateslot = OK;
+       }
+-      if (bfaddr != 0) {
++
++      if (bf) {
++              ath9k_reset_beacon_status(sc);
++
+               /* NB: cabq traffic should already be queued and primed */
+-              ath9k_hw_puttxbuf(ah, sc->beacon.beaconq, bfaddr);
++              ath9k_hw_puttxbuf(ah, sc->beacon.beaconq, bf->bf_daddr);
+               if (!edma)
+                       ath9k_hw_txstart(ah, sc->beacon.beaconq);
+-
+-              sc->beacon.ast_be_xmit += bc;     /* XXX per-vif? */
+       }
+ }
+-static void ath9k_beacon_init(struct ath_softc *sc,
+-                            u32 next_beacon,
+-                            u32 beacon_period)
++static void ath9k_beacon_init(struct ath_softc *sc, u32 nexttbtt, u32 intval)
+ {
+-      if (test_bit(SC_OP_TSF_RESET, &sc->sc_flags)) {
+-              ath9k_ps_wakeup(sc);
+-              ath9k_hw_reset_tsf(sc->sc_ah);
 -      }
--}
 -
- /* Adjust the OFDM Noise Immunity Level */
- static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel)
+-      ath9k_hw_beaconinit(sc->sc_ah, next_beacon, beacon_period);
++      struct ath_hw *ah = sc->sc_ah;
+-      if (test_bit(SC_OP_TSF_RESET, &sc->sc_flags)) {
+-              ath9k_ps_restore(sc);
+-              clear_bit(SC_OP_TSF_RESET, &sc->sc_flags);
+-      }
++      ath9k_hw_disable_interrupts(ah);
++      ath9k_hw_reset_tsf(ah);
++      ath9k_beaconq_config(sc);
++      ath9k_hw_beaconinit(ah, nexttbtt, intval);
++      sc->beacon.bmisscnt = 0;
++      ath9k_hw_set_interrupts(ah);
++      ath9k_hw_enable_interrupts(ah);
+ }
+ /*
+@@ -498,32 +422,27 @@ static void ath9k_beacon_init(struct ath
+  * burst together.  For the former arrange for the SWBA to be delivered for each
+  * slot. Slots that are not occupied will generate nothing.
+  */
+-static void ath_beacon_config_ap(struct ath_softc *sc,
+-                               struct ath_beacon_config *conf)
++static void ath9k_beacon_config_ap(struct ath_softc *sc,
++                                 struct ath_beacon_config *conf)
  {
-@@ -265,18 +146,15 @@ static void ath9k_hw_set_ofdm_nil(struct
+       struct ath_hw *ah = sc->sc_ah;
++      struct ath_common *common = ath9k_hw_common(ah);
+       u32 nexttbtt, intval;
+       /* NB: the beacon interval is kept internally in TU's */
+       intval = TU_TO_USEC(conf->beacon_interval);
+-      intval /= ATH_BCBUF;    /* for staggered beacons */
++      intval /= ATH_BCBUF;
+       nexttbtt = intval;
+-      /*
+-       * In AP mode we enable the beacon timers and SWBA interrupts to
+-       * prepare beacon frames.
+-       */
+-      ah->imask |= ATH9K_INT_SWBA;
+-      ath_beaconq_config(sc);
++      if (conf->enable_beacon)
++              ah->imask |= ATH9K_INT_SWBA;
++      else
++              ah->imask &= ~ATH9K_INT_SWBA;
+-      /* Set the computed AP beacon timers */
++      ath_dbg(common, BEACON, "AP nexttbtt: %u intval: %u conf_intval: %u\n",
++              nexttbtt, intval, conf->beacon_interval);
+-      ath9k_hw_disable_interrupts(ah);
+-      set_bit(SC_OP_TSF_RESET, &sc->sc_flags);
+       ath9k_beacon_init(sc, nexttbtt, intval);
+-      sc->beacon.bmisscnt = 0;
+-      ath9k_hw_set_interrupts(ah);
+-      ath9k_hw_enable_interrupts(ah);
+ }
+ /*
+@@ -534,8 +453,8 @@ static void ath_beacon_config_ap(struct 
+  * we'll receive a BMISS interrupt when we stop seeing beacons from the AP
+  * we've associated with.
+  */
+-static void ath_beacon_config_sta(struct ath_softc *sc,
+-                                struct ath_beacon_config *conf)
++static void ath9k_beacon_config_sta(struct ath_softc *sc,
++                                  struct ath_beacon_config *conf)
+ {
+       struct ath_hw *ah = sc->sc_ah;
        struct ath_common *common = ath9k_hw_common(ah);
-       const struct ani_ofdm_level_entry *entry_ofdm;
-       const struct ani_cck_level_entry *entry_cck;
+@@ -654,8 +573,8 @@ static void ath_beacon_config_sta(struct
+       ath9k_hw_enable_interrupts(ah);
+ }
+-static void ath_beacon_config_adhoc(struct ath_softc *sc,
+-                                  struct ath_beacon_config *conf)
++static void ath9k_beacon_config_adhoc(struct ath_softc *sc,
++                                    struct ath_beacon_config *conf)
+ {
+       struct ath_hw *ah = sc->sc_ah;
+       struct ath_common *common = ath9k_hw_common(ah);
+@@ -669,82 +588,53 @@ static void ath_beacon_config_adhoc(stru
+       tsf = roundup(ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE), intval);
+       nexttbtt = tsf + intval;
+-      ath_dbg(common, BEACON, "IBSS nexttbtt %u intval %u (%u)\n",
+-              nexttbtt, intval, conf->beacon_interval);
+-
+-      /*
+-       * In IBSS mode enable the beacon timers but only enable SWBA interrupts
+-       * if we need to manually prepare beacon frames.  Otherwise we use a
+-       * self-linked tx descriptor and let the hardware deal with things.
+-       */
+-      ah->imask |= ATH9K_INT_SWBA;
 -
--      aniState->noiseFloor = BEACON_RSSI(ah);
-+      bool weak_sig;
-       ath_dbg(common, ANI, "**** ofdmlevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
-               aniState->ofdmNoiseImmunityLevel,
--              immunityLevel, aniState->noiseFloor,
-+              immunityLevel, BEACON_RSSI(ah),
-               aniState->rssiThrLow, aniState->rssiThrHigh);
-       if (aniState->update_ani)
--              aniState->ofdmNoiseImmunityLevel =
--                      (immunityLevel > ATH9K_ANI_OFDM_DEF_LEVEL) ?
--                      immunityLevel : ATH9K_ANI_OFDM_DEF_LEVEL;
-+              aniState->ofdmNoiseImmunityLevel = immunityLevel;
-       entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
-       entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel];
-@@ -292,12 +170,22 @@ static void ath9k_hw_set_ofdm_nil(struct
-                                    ATH9K_ANI_FIRSTEP_LEVEL,
-                                    entry_ofdm->fir_step_level);
--      if ((aniState->noiseFloor >= aniState->rssiThrHigh) &&
--          (!aniState->ofdmWeakSigDetectOff !=
--           entry_ofdm->ofdm_weak_signal_on)) {
-+      weak_sig = entry_ofdm->ofdm_weak_signal_on;
-+      if (ah->opmode == NL80211_IFTYPE_STATION &&
-+          BEACON_RSSI(ah) <= aniState->rssiThrHigh)
-+              weak_sig = true;
+-      ath_beaconq_config(sc);
++      if (conf->enable_beacon)
++              ah->imask |= ATH9K_INT_SWBA;
++      else
++              ah->imask &= ~ATH9K_INT_SWBA;
+-      /* Set the computed ADHOC beacon timers */
++      ath_dbg(common, BEACON, "IBSS nexttbtt: %u intval: %u conf_intval: %u\n",
++              nexttbtt, intval, conf->beacon_interval);
+-      ath9k_hw_disable_interrupts(ah);
+       ath9k_beacon_init(sc, nexttbtt, intval);
+-      sc->beacon.bmisscnt = 0;
+-
+-      ath9k_hw_set_interrupts(ah);
+-      ath9k_hw_enable_interrupts(ah);
+ }
+-static bool ath9k_allow_beacon_config(struct ath_softc *sc,
+-                                    struct ieee80211_vif *vif)
++bool ath9k_allow_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif)
+ {
+-      struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+-      struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+       struct ath_vif *avp = (void *)vif->drv_priv;
+-      /*
+-       * Can not have different beacon interval on multiple
+-       * AP interface case
+-       */
+-      if ((sc->sc_ah->opmode == NL80211_IFTYPE_AP) &&
+-          (sc->nbcnvifs > 1) &&
+-          (vif->type == NL80211_IFTYPE_AP) &&
+-          (cur_conf->beacon_interval != bss_conf->beacon_int)) {
+-              ath_dbg(common, CONFIG,
+-                      "Changing beacon interval of multiple AP interfaces !\n");
+-              return false;
+-      }
+-      /*
+-       * Can not configure station vif's beacon config
+-       * while on AP opmode
+-       */
+-      if ((sc->sc_ah->opmode == NL80211_IFTYPE_AP) &&
+-          (vif->type != NL80211_IFTYPE_AP)) {
+-              ath_dbg(common, CONFIG,
+-                      "STA vif's beacon not allowed on AP mode\n");
+-              return false;
++      if (sc->sc_ah->opmode == NL80211_IFTYPE_AP) {
++              if ((vif->type != NL80211_IFTYPE_AP) ||
++                  (sc->nbcnvifs > 1)) {
++                      ath_dbg(common, CONFIG,
++                              "An AP interface is already present !\n");
++                      return false;
++              }
+       }
+-      /*
+-       * Do not allow beacon config if HW was already configured
+-       * with another STA vif
+-       */
+-      if ((sc->sc_ah->opmode == NL80211_IFTYPE_STATION) &&
+-          (vif->type == NL80211_IFTYPE_STATION) &&
+-          test_bit(SC_OP_BEACONS, &sc->sc_flags) &&
+-          !avp->primary_sta_vif) {
+-              ath_dbg(common, CONFIG,
+-                      "Beacon already configured for a station interface\n");
+-              return false;
 +
-+      if (aniState->ofdmWeakSigDetect != weak_sig)
-                       ath9k_hw_ani_control(ah,
-                               ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-                               entry_ofdm->ofdm_weak_signal_on);
++      if (sc->sc_ah->opmode == NL80211_IFTYPE_STATION) {
++              if ((vif->type == NL80211_IFTYPE_STATION) &&
++                  test_bit(SC_OP_BEACONS, &sc->sc_flags) &&
++                  !avp->primary_sta_vif) {
++                      ath_dbg(common, CONFIG,
++                              "Beacon already configured for a station interface\n");
++                      return false;
++              }
+       }
 +
-+      if (aniState->ofdmNoiseImmunityLevel >= ATH9K_ANI_OFDM_DEF_LEVEL) {
-+              ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
-+              ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI;
+       return true;
+ }
+-void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif)
++static void ath9k_cache_beacon_config(struct ath_softc *sc,
++                                    struct ieee80211_bss_conf *bss_conf)
+ {
++      struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+       struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+-      struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+-      if (!ath9k_allow_beacon_config(sc, vif))
+-              return;
++      ath_dbg(common, BEACON,
++              "Caching beacon data for BSS: %pM\n", bss_conf->bssid);
+-      /* Setup the beacon configuration parameters */
+       cur_conf->beacon_interval = bss_conf->beacon_int;
+       cur_conf->dtim_period = bss_conf->dtim_period;
+       cur_conf->listen_interval = 1;
+@@ -769,73 +659,59 @@ void ath_beacon_config(struct ath_softc 
+       if (cur_conf->dtim_period == 0)
+               cur_conf->dtim_period = 1;
+-      ath_set_beacon(sc);
+ }
+-static bool ath_has_valid_bslot(struct ath_softc *sc)
++void ath9k_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif,
++                       u32 changed)
+ {
+-      struct ath_vif *avp;
+-      int slot;
+-      bool found = false;
++      struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
++      struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+-      for (slot = 0; slot < ATH_BCBUF; slot++) {
+-              if (sc->beacon.bslot[slot]) {
+-                      avp = (void *)sc->beacon.bslot[slot]->drv_priv;
+-                      if (avp->is_bslot_active) {
+-                              found = true;
+-                              break;
+-                      }
++      ath9k_cache_beacon_config(sc, bss_conf);
++
++      if (sc->sc_ah->opmode == NL80211_IFTYPE_STATION) {
++              ath9k_set_beacon(sc);
++              set_bit(SC_OP_BEACONS, &sc->sc_flags);
 +      } else {
-+              ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI;
-+              ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
++              /*
++               * Take care of multiple interfaces when
++               * enabling/disabling SWBA.
++               */
++              if (changed & BSS_CHANGED_BEACON_ENABLED) {
++                      if (!bss_conf->enable_beacon &&
++                          (sc->nbcnvifs <= 1))
++                              cur_conf->enable_beacon = false;
++                      else if (bss_conf->enable_beacon)
++                              cur_conf->enable_beacon = true;
+               }
++
++              ath9k_set_beacon(sc);
++
++              if (cur_conf->enable_beacon)
++                      set_bit(SC_OP_BEACONS, &sc->sc_flags);
++              else
++                      clear_bit(SC_OP_BEACONS, &sc->sc_flags);
        }
+-      return found;
  }
  
-@@ -308,11 +196,6 @@ static void ath9k_hw_ani_ofdm_err_trigge
-       if (!DO_ANI(ah))
+-
+-void ath_set_beacon(struct ath_softc *sc)
++void ath9k_set_beacon(struct ath_softc *sc)
+ {
+       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+       struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+       switch (sc->sc_ah->opmode) {
+       case NL80211_IFTYPE_AP:
+-              if (ath_has_valid_bslot(sc))
+-                      ath_beacon_config_ap(sc, cur_conf);
++              ath9k_beacon_config_ap(sc, cur_conf);
+               break;
+       case NL80211_IFTYPE_ADHOC:
+       case NL80211_IFTYPE_MESH_POINT:
+-              ath_beacon_config_adhoc(sc, cur_conf);
++              ath9k_beacon_config_adhoc(sc, cur_conf);
+               break;
+       case NL80211_IFTYPE_STATION:
+-              ath_beacon_config_sta(sc, cur_conf);
++              ath9k_beacon_config_sta(sc, cur_conf);
+               break;
+       default:
+               ath_dbg(common, CONFIG, "Unsupported beaconing mode\n");
                return;
--      if (!use_new_ani(ah)) {
--              ath9k_hw_ani_ofdm_err_trigger_old(ah);
+       }
+-
+-      set_bit(SC_OP_BEACONS, &sc->sc_flags);
+-}
+-
+-void ath9k_set_beaconing_status(struct ath_softc *sc, bool status)
+-{
+-      struct ath_hw *ah = sc->sc_ah;
+-
+-      if (!ath_has_valid_bslot(sc)) {
+-              clear_bit(SC_OP_BEACONS, &sc->sc_flags);
 -              return;
 -      }
 -
-       aniState = &ah->curchan->ani;
-       if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL)
-@@ -329,22 +212,18 @@ static void ath9k_hw_set_cck_nil(struct 
-       const struct ani_ofdm_level_entry *entry_ofdm;
-       const struct ani_cck_level_entry *entry_cck;
--      aniState->noiseFloor = BEACON_RSSI(ah);
-       ath_dbg(common, ANI, "**** ccklevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
-               aniState->cckNoiseImmunityLevel, immunityLevel,
--              aniState->noiseFloor, aniState->rssiThrLow,
-+              BEACON_RSSI(ah), aniState->rssiThrLow,
-               aniState->rssiThrHigh);
--      if ((ah->opmode == NL80211_IFTYPE_STATION ||
--           ah->opmode == NL80211_IFTYPE_ADHOC) &&
--          aniState->noiseFloor <= aniState->rssiThrLow &&
-+      if (ah->opmode == NL80211_IFTYPE_STATION &&
-+          BEACON_RSSI(ah) <= aniState->rssiThrLow &&
-           immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
-               immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
-       if (aniState->update_ani)
--              aniState->cckNoiseImmunityLevel =
--                      (immunityLevel > ATH9K_ANI_CCK_DEF_LEVEL) ?
--                      immunityLevel : ATH9K_ANI_CCK_DEF_LEVEL;
-+              aniState->cckNoiseImmunityLevel = immunityLevel;
-       entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
-       entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel];
-@@ -372,70 +251,12 @@ static void ath9k_hw_ani_cck_err_trigger
-       if (!DO_ANI(ah))
+-      ath9k_ps_wakeup(sc);
+-      if (status) {
+-              /* Re-enable beaconing */
+-              ah->imask |= ATH9K_INT_SWBA;
+-              ath9k_hw_set_interrupts(ah);
+-      } else {
+-              /* Disable SWBA interrupt */
+-              ah->imask &= ~ATH9K_INT_SWBA;
+-              ath9k_hw_set_interrupts(ah);
+-              tasklet_kill(&sc->bcon_tasklet);
+-              ath9k_hw_stop_dma_queue(ah, sc->beacon.beaconq);
+-      }
+-      ath9k_ps_restore(sc);
+ }
+--- a/drivers/net/wireless/ath/ath9k/debug.c
++++ b/drivers/net/wireless/ath/ath9k/debug.c
+@@ -206,10 +206,9 @@ static ssize_t write_file_disable_ani(st
+       if (disable_ani) {
+               clear_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+-              del_timer_sync(&common->ani.timer);
++              ath_stop_ani(sc);
+       } else {
+-              set_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+-              ath_start_ani(common);
++              ath_check_ani(sc);
+       }
+       return count;
+--- a/drivers/net/wireless/ath/ath9k/debug.h
++++ b/drivers/net/wireless/ath/ath9k/debug.h
+@@ -32,6 +32,19 @@ struct ath_buf;
+ #define RESET_STAT_INC(sc, type) do { } while (0)
+ #endif
++enum ath_reset_type {
++      RESET_TYPE_BB_HANG,
++      RESET_TYPE_BB_WATCHDOG,
++      RESET_TYPE_FATAL_INT,
++      RESET_TYPE_TX_ERROR,
++      RESET_TYPE_TX_HANG,
++      RESET_TYPE_PLL_HANG,
++      RESET_TYPE_MAC_HANG,
++      RESET_TYPE_BEACON_STUCK,
++      RESET_TYPE_MCI,
++      __RESET_TYPE_MAX
++};
++
+ #ifdef CONFIG_ATH9K_DEBUGFS
+ /**
+@@ -209,17 +222,6 @@ struct ath_rx_stats {
+       u32 rx_frags;
+ };
+-enum ath_reset_type {
+-      RESET_TYPE_BB_HANG,
+-      RESET_TYPE_BB_WATCHDOG,
+-      RESET_TYPE_FATAL_INT,
+-      RESET_TYPE_TX_ERROR,
+-      RESET_TYPE_TX_HANG,
+-      RESET_TYPE_PLL_HANG,
+-      RESET_TYPE_MAC_HANG,
+-      __RESET_TYPE_MAX
+-};
+-
+ struct ath_stats {
+       struct ath_interrupt_stats istats;
+       struct ath_tx_stats txstats[ATH9K_NUM_TX_QUEUES];
+--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
++++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+@@ -1111,7 +1111,7 @@ static int ath9k_htc_add_interface(struc
+       if ((priv->ah->opmode == NL80211_IFTYPE_AP) &&
+           !test_bit(OP_ANI_RUNNING, &priv->op_flags)) {
+-              ath9k_hw_set_tsfadjust(priv->ah, 1);
++              ath9k_hw_set_tsfadjust(priv->ah, true);
+               ath9k_htc_start_ani(priv);
+       }
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -2908,9 +2908,9 @@ void ath9k_hw_reset_tsf(struct ath_hw *a
+ }
+ EXPORT_SYMBOL(ath9k_hw_reset_tsf);
+-void ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting)
++void ath9k_hw_set_tsfadjust(struct ath_hw *ah, bool set)
+ {
+-      if (setting)
++      if (set)
+               ah->misc_mode |= AR_PCU_TX_ADD_TSF;
+       else
+               ah->misc_mode &= ~AR_PCU_TX_ADD_TSF;
+--- a/drivers/net/wireless/ath/ath9k/hw.h
++++ b/drivers/net/wireless/ath/ath9k/hw.h
+@@ -943,7 +943,7 @@ u32 ath9k_hw_gettsf32(struct ath_hw *ah)
+ u64 ath9k_hw_gettsf64(struct ath_hw *ah);
+ void ath9k_hw_settsf64(struct ath_hw *ah, u64 tsf64);
+ void ath9k_hw_reset_tsf(struct ath_hw *ah);
+-void ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting);
++void ath9k_hw_set_tsfadjust(struct ath_hw *ah, bool set);
+ void ath9k_hw_init_global_settings(struct ath_hw *ah);
+ u32 ar9003_get_pll_sqsum_dvc(struct ath_hw *ah);
+ void ath9k_hw_set11nmac2040(struct ath_hw *ah);
+--- a/drivers/net/wireless/ath/ath9k/init.c
++++ b/drivers/net/wireless/ath/ath9k/init.c
+@@ -560,7 +560,7 @@ static int ath9k_init_softc(u16 devid, s
+       spin_lock_init(&sc->debug.samp_lock);
+ #endif
+       tasklet_init(&sc->intr_tq, ath9k_tasklet, (unsigned long)sc);
+-      tasklet_init(&sc->bcon_tasklet, ath_beacon_tasklet,
++      tasklet_init(&sc->bcon_tasklet, ath9k_beacon_tasklet,
+                    (unsigned long)sc);
+       INIT_WORK(&sc->hw_reset_work, ath_reset_work);
+--- a/drivers/net/wireless/ath/ath9k/link.c
++++ b/drivers/net/wireless/ath/ath9k/link.c
+@@ -50,8 +50,7 @@ void ath_tx_complete_poll_work(struct wo
+       if (needreset) {
+               ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
+                       "tx hung, resetting the chip\n");
+-              RESET_STAT_INC(sc, RESET_TYPE_TX_HANG);
+-              ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++              ath9k_queue_reset(sc, RESET_TYPE_TX_HANG);
                return;
+       }
+@@ -69,6 +68,7 @@ void ath_hw_check(struct work_struct *wo
+       unsigned long flags;
+       int busy;
+       u8 is_alive, nbeacon = 1;
++      enum ath_reset_type type;
+       ath9k_ps_wakeup(sc);
+       is_alive = ath9k_hw_check_alive(sc->sc_ah);
+@@ -78,7 +78,7 @@ void ath_hw_check(struct work_struct *wo
+       else if (!is_alive && AR_SREV_9300(sc->sc_ah)) {
+               ath_dbg(common, RESET,
+                       "DCU stuck is detected. Schedule chip reset\n");
+-              RESET_STAT_INC(sc, RESET_TYPE_MAC_HANG);
++              type = RESET_TYPE_MAC_HANG;
+               goto sched_reset;
+       }
  
--      if (!use_new_ani(ah)) {
--              ath9k_hw_ani_cck_err_trigger_old(ah);
+@@ -90,7 +90,7 @@ void ath_hw_check(struct work_struct *wo
+               busy, sc->hw_busy_count + 1);
+       if (busy >= 99) {
+               if (++sc->hw_busy_count >= 3) {
+-                      RESET_STAT_INC(sc, RESET_TYPE_BB_HANG);
++                      type = RESET_TYPE_BB_HANG;
+                       goto sched_reset;
+               }
+       } else if (busy >= 0) {
+@@ -102,7 +102,7 @@ void ath_hw_check(struct work_struct *wo
+       goto out;
+ sched_reset:
+-      ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++      ath9k_queue_reset(sc, type);
+ out:
+       ath9k_ps_restore(sc);
+ }
+@@ -119,8 +119,7 @@ static bool ath_hw_pll_rx_hang_check(str
+               count++;
+               if (count == 3) {
+                       ath_dbg(common, RESET, "PLL WAR, resetting the chip\n");
+-                      RESET_STAT_INC(sc, RESET_TYPE_PLL_HANG);
+-                      ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++                      ath9k_queue_reset(sc, RESET_TYPE_PLL_HANG);
+                       count = 0;
+                       return true;
+               }
+@@ -432,26 +431,69 @@ set_timer:
+       }
+ }
+-void ath_start_ani(struct ath_common *common)
++void ath_start_ani(struct ath_softc *sc)
+ {
+-      struct ath_hw *ah = common->ah;
++      struct ath_hw *ah = sc->sc_ah;
++      struct ath_common *common = ath9k_hw_common(ah);
+       unsigned long timestamp = jiffies_to_msecs(jiffies);
+-      struct ath_softc *sc = (struct ath_softc *) common->priv;
+-      if (!test_bit(SC_OP_ANI_RUN, &sc->sc_flags))
 -              return;
--      }
 -
-       aniState = &ah->curchan->ani;
+-      if (sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)
++      if (common->disable_ani ||
++          !test_bit(SC_OP_ANI_RUN, &sc->sc_flags) ||
++          (sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL))
+               return;
+       common->ani.longcal_timer = timestamp;
+       common->ani.shortcal_timer = timestamp;
+       common->ani.checkani_timer = timestamp;
  
-       if (aniState->cckNoiseImmunityLevel < ATH9K_ANI_CCK_MAX_LEVEL)
-               ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1);
++      ath_dbg(common, ANI, "Starting ANI\n");
+       mod_timer(&common->ani.timer,
+                 jiffies + msecs_to_jiffies((u32)ah->config.ani_poll_interval));
  }
  
--static void ath9k_hw_ani_lower_immunity_old(struct ath_hw *ah)
--{
--      struct ar5416AniState *aniState;
--      int32_t rssi;
--
--      aniState = &ah->curchan->ani;
--
--      if (ah->opmode == NL80211_IFTYPE_AP) {
--              if (aniState->firstepLevel > 0) {
--                      if (ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
--                                               aniState->firstepLevel - 1))
--                              return;
--              }
--      } else {
--              rssi = BEACON_RSSI(ah);
--              if (rssi > aniState->rssiThrHigh) {
--                      /* XXX: Handle me */
--              } else if (rssi > aniState->rssiThrLow) {
--                      if (aniState->ofdmWeakSigDetectOff) {
--                              if (ath9k_hw_ani_control(ah,
--                                       ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
--                                       true))
--                                      return;
--                      }
--                      if (aniState->firstepLevel > 0) {
--                              if (ath9k_hw_ani_control(ah,
--                                       ATH9K_ANI_FIRSTEP_LEVEL,
--                                       aniState->firstepLevel - 1))
--                                      return;
--                      }
--              } else {
--                      if (aniState->firstepLevel > 0) {
--                              if (ath9k_hw_ani_control(ah,
--                                       ATH9K_ANI_FIRSTEP_LEVEL,
--                                       aniState->firstepLevel - 1))
--                                      return;
--                      }
--              }
--      }
--
--      if (aniState->spurImmunityLevel > 0) {
--              if (ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
--                                       aniState->spurImmunityLevel - 1))
--                      return;
--      }
--
--      if (aniState->noiseImmunityLevel > 0) {
--              ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
--                                   aniState->noiseImmunityLevel - 1);
--              return;
--      }
--}
++void ath_stop_ani(struct ath_softc *sc)
++{
++      struct ath_common *common = ath9k_hw_common(sc->sc_ah);
++
++      ath_dbg(common, ANI, "Stopping ANI\n");
++      del_timer_sync(&common->ani.timer);
++}
++
++void ath_check_ani(struct ath_softc *sc)
++{
++      struct ath_hw *ah = sc->sc_ah;
++      struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
++
++      /*
++       * Check for the various conditions in which ANI has to
++       * be stopped.
++       */
++      if (ah->opmode == NL80211_IFTYPE_ADHOC) {
++              if (!cur_conf->enable_beacon)
++                      goto stop_ani;
++      } else if (ah->opmode == NL80211_IFTYPE_AP) {
++              if (!cur_conf->enable_beacon) {
++                      /*
++                       * Disable ANI only when there are no
++                       * associated stations.
++                       */
++                      if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags))
++                              goto stop_ani;
++              }
++      } else if (ah->opmode == NL80211_IFTYPE_STATION) {
++              if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags))
++                      goto stop_ani;
++      }
++
++      set_bit(SC_OP_ANI_RUN, &sc->sc_flags);
++      ath_start_ani(sc);
++      return;
++
++stop_ani:
++      clear_bit(SC_OP_ANI_RUN, &sc->sc_flags);
++      ath_stop_ani(sc);
++}
++
+ void ath_update_survey_nf(struct ath_softc *sc, int channel)
+ {
+       struct ath_hw *ah = sc->sc_ah;
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -167,8 +167,6 @@ static void ath_cancel_work(struct ath_s
+ static void ath_restart_work(struct ath_softc *sc)
+ {
+-      struct ath_common *common = ath9k_hw_common(sc->sc_ah);
 -
- /*
-  * only lower either OFDM or CCK errors per turn
-  * we lower the other one next time
-@@ -446,11 +267,6 @@ static void ath9k_hw_ani_lower_immunity(
+       ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
  
-       aniState = &ah->curchan->ani;
+       if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9485(sc->sc_ah) ||
+@@ -177,21 +175,18 @@ static void ath_restart_work(struct ath_
+                                    msecs_to_jiffies(ATH_PLL_WORK_INTERVAL));
  
--      if (!use_new_ani(ah)) {
--              ath9k_hw_ani_lower_immunity_old(ah);
--              return;
--      }
+       ath_start_rx_poll(sc, 3);
 -
-       /* lower OFDM noise immunity */
-       if (aniState->ofdmNoiseImmunityLevel > 0 &&
-           (aniState->ofdmsTurn || aniState->cckNoiseImmunityLevel == 0)) {
-@@ -463,72 +279,6 @@ static void ath9k_hw_ani_lower_immunity(
-               ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1);
+-      if (!common->disable_ani)
+-              ath_start_ani(common);
++      ath_start_ani(sc);
  }
  
--static void ath9k_ani_reset_old(struct ath_hw *ah, bool is_scanning)
--{
--      struct ar5416AniState *aniState;
--      struct ath9k_channel *chan = ah->curchan;
+ static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
+ {
+       struct ath_hw *ah = sc->sc_ah;
 -      struct ath_common *common = ath9k_hw_common(ah);
+       bool ret = true;
+       ieee80211_stop_queues(sc->hw);
+       sc->hw_busy_count = 0;
+-      del_timer_sync(&common->ani.timer);
++      ath_stop_ani(sc);
+       del_timer_sync(&sc->rx_poll_timer);
+       ath9k_debug_samp_bb_mac(sc);
+@@ -236,7 +231,7 @@ static bool ath_complete_reset(struct at
+               if (!test_bit(SC_OP_BEACONS, &sc->sc_flags))
+                       goto work;
+-              ath_set_beacon(sc);
++              ath9k_set_beacon(sc);
+               if (ah->opmode == NL80211_IFTYPE_STATION &&
+                   test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
+@@ -365,6 +360,7 @@ void ath9k_tasklet(unsigned long data)
+       struct ath_softc *sc = (struct ath_softc *)data;
+       struct ath_hw *ah = sc->sc_ah;
+       struct ath_common *common = ath9k_hw_common(ah);
++      enum ath_reset_type type;
+       unsigned long flags;
+       u32 status = sc->intrstatus;
+       u32 rxmask;
+@@ -374,18 +370,13 @@ void ath9k_tasklet(unsigned long data)
+       if ((status & ATH9K_INT_FATAL) ||
+           (status & ATH9K_INT_BB_WATCHDOG)) {
+-#ifdef CONFIG_ATH9K_DEBUGFS
+-              enum ath_reset_type type;
+               if (status & ATH9K_INT_FATAL)
+                       type = RESET_TYPE_FATAL_INT;
+               else
+                       type = RESET_TYPE_BB_WATCHDOG;
+-              RESET_STAT_INC(sc, type);
+-#endif
+-              set_bit(SC_OP_HW_RESET, &sc->sc_flags);
+-              ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++              ath9k_queue_reset(sc, type);
+               goto out;
+       }
+@@ -575,6 +566,15 @@ static int ath_reset(struct ath_softc *s
+       return r;
+ }
++void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type)
++{
++#ifdef CONFIG_ATH9K_DEBUGFS
++      RESET_STAT_INC(sc, type);
++#endif
++      set_bit(SC_OP_HW_RESET, &sc->sc_flags);
++      ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++}
++
+ void ath_reset_work(struct work_struct *work)
+ {
+       struct ath_softc *sc = container_of(work, struct ath_softc, hw_reset_work);
+@@ -841,16 +841,6 @@ bool ath9k_uses_beacons(int type)
+       }
+ }
+-static void ath9k_reclaim_beacon(struct ath_softc *sc,
+-                               struct ieee80211_vif *vif)
+-{
+-      struct ath_vif *avp = (void *)vif->drv_priv;
 -
--      if (!DO_ANI(ah))
--              return;
+-      ath9k_set_beaconing_status(sc, false);
+-      ath_beacon_return(sc, avp);
+-      ath9k_set_beaconing_status(sc, true);
+-}
 -
--      aniState = &ah->curchan->ani;
+ static void ath9k_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
+ {
+       struct ath9k_vif_iter_data *iter_data = data;
+@@ -918,18 +908,14 @@ static void ath9k_calculate_summary_stat
+       ath9k_calculate_iter_data(hw, vif, &iter_data);
+-      /* Set BSSID mask. */
+       memcpy(common->bssidmask, iter_data.mask, ETH_ALEN);
+       ath_hw_setbssidmask(common);
+-      /* Set op-mode & TSF */
+       if (iter_data.naps > 0) {
+-              ath9k_hw_set_tsfadjust(ah, 1);
+-              set_bit(SC_OP_TSF_RESET, &sc->sc_flags);
++              ath9k_hw_set_tsfadjust(ah, true);
+               ah->opmode = NL80211_IFTYPE_AP;
+       } else {
+-              ath9k_hw_set_tsfadjust(ah, 0);
+-              clear_bit(SC_OP_TSF_RESET, &sc->sc_flags);
++              ath9k_hw_set_tsfadjust(ah, false);
+               if (iter_data.nmeshes)
+                       ah->opmode = NL80211_IFTYPE_MESH_POINT;
+@@ -941,45 +927,14 @@ static void ath9k_calculate_summary_stat
+                       ah->opmode = NL80211_IFTYPE_STATION;
+       }
+-      /*
+-       * Enable MIB interrupts when there are hardware phy counters.
+-       */
++      ath9k_hw_setopmode(ah);
++
+       if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0)
+               ah->imask |= ATH9K_INT_TSFOOR;
+       else
+               ah->imask &= ~ATH9K_INT_TSFOOR;
+       ath9k_hw_set_interrupts(ah);
 -
--      if (ah->opmode != NL80211_IFTYPE_STATION
--          && ah->opmode != NL80211_IFTYPE_ADHOC) {
--              ath_dbg(common, ANI, "Reset ANI state opmode %u\n", ah->opmode);
--              ah->stats.ast_ani_reset++;
+-      /* Set up ANI */
+-      if (iter_data.naps > 0) {
+-              sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
 -
--              if (ah->opmode == NL80211_IFTYPE_AP) {
--                      /*
--                       * ath9k_hw_ani_control() will only process items set on
--                       * ah->ani_function
--                       */
--                      if (IS_CHAN_2GHZ(chan))
--                              ah->ani_function = (ATH9K_ANI_SPUR_IMMUNITY_LEVEL |
--                                                  ATH9K_ANI_FIRSTEP_LEVEL);
--                      else
--                              ah->ani_function = 0;
+-              if (!common->disable_ani) {
+-                      set_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+-                      ath_start_ani(common);
 -              }
 -
--              ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, 0);
--              ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0);
--              ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, 0);
--              ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
--                                   !ATH9K_ANI_USE_OFDM_WEAK_SIG);
--              ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR,
--                                   ATH9K_ANI_CCK_WEAK_SIG_THR);
--
--              ath9k_ani_restart(ah);
--              return;
+-      } else {
+-              clear_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+-              del_timer_sync(&common->ani.timer);
 -      }
+-}
 -
--      if (aniState->noiseImmunityLevel != 0)
--              ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
--                                   aniState->noiseImmunityLevel);
--      if (aniState->spurImmunityLevel != 0)
--              ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
--                                   aniState->spurImmunityLevel);
--      if (aniState->ofdmWeakSigDetectOff)
--              ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
--                                   !aniState->ofdmWeakSigDetectOff);
--      if (aniState->cckWeakSigThreshold)
--              ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR,
--                                   aniState->cckWeakSigThreshold);
--      if (aniState->firstepLevel != 0)
--              ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
--                                   aniState->firstepLevel);
--
--      ath9k_ani_restart(ah);
--
--      ENABLE_REGWRITE_BUFFER(ah);
--
--      REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
--      REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
+-/* Called with sc->mutex held, vif counts set up properly. */
+-static void ath9k_do_vif_add_setup(struct ieee80211_hw *hw,
+-                                 struct ieee80211_vif *vif)
+-{
+-      struct ath_softc *sc = hw->priv;
 -
--      REGWRITE_BUFFER_FLUSH(ah);
--}
+-      ath9k_calculate_summary_state(hw, vif);
 -
- /*
-  * Restore the ANI parameters in the HAL and reset the statistics.
-  * This routine should be called for every hardware reset and for
-@@ -539,13 +289,11 @@ void ath9k_ani_reset(struct ath_hw *ah, 
-       struct ar5416AniState *aniState = &ah->curchan->ani;
-       struct ath9k_channel *chan = ah->curchan;
-       struct ath_common *common = ath9k_hw_common(ah);
-+      int ofdm_nil, cck_nil;
+-      if (ath9k_uses_beacons(vif->type)) {
+-              /* Reserve a beacon slot for the vif */
+-              ath9k_set_beaconing_status(sc, false);
+-              ath_beacon_alloc(sc, vif);
+-              ath9k_set_beaconing_status(sc, true);
+-      }
+ }
  
-       if (!DO_ANI(ah))
-               return;
+ static int ath9k_add_interface(struct ieee80211_hw *hw,
+@@ -1021,7 +976,10 @@ static int ath9k_add_interface(struct ie
  
--      if (!use_new_ani(ah))
--              return ath9k_ani_reset_old(ah, is_scanning);
--
-       BUG_ON(aniState == NULL);
-       ah->stats.ast_ani_reset++;
+       sc->nvifs++;
  
-@@ -563,6 +311,11 @@ void ath9k_ani_reset(struct ath_hw *ah, 
-       /* always allow mode (on/off) to be controlled */
-       ah->ani_function |= ATH9K_ANI_MODE;
+-      ath9k_do_vif_add_setup(hw, vif);
++      ath9k_calculate_summary_state(hw, vif);
++      if (ath9k_uses_beacons(vif->type))
++              ath9k_beacon_assign_slot(sc, vif);
++
+ out:
+       mutex_unlock(&sc->mutex);
+       ath9k_ps_restore(sc);
+@@ -1038,6 +996,7 @@ static int ath9k_change_interface(struct
+       int ret = 0;
  
-+      ofdm_nil = max_t(int, ATH9K_ANI_OFDM_DEF_LEVEL,
-+                       aniState->ofdmNoiseImmunityLevel);
-+      cck_nil = max_t(int, ATH9K_ANI_CCK_DEF_LEVEL,
-+                       aniState->cckNoiseImmunityLevel);
+       ath_dbg(common, CONFIG, "Change Interface\n");
 +
-       if (is_scanning ||
-           (ah->opmode != NL80211_IFTYPE_STATION &&
-            ah->opmode != NL80211_IFTYPE_ADHOC)) {
-@@ -586,8 +339,8 @@ void ath9k_ani_reset(struct ath_hw *ah, 
-                               aniState->cckNoiseImmunityLevel);
-                       aniState->update_ani = false;
--                      ath9k_hw_set_ofdm_nil(ah, ATH9K_ANI_OFDM_DEF_LEVEL);
--                      ath9k_hw_set_cck_nil(ah, ATH9K_ANI_CCK_DEF_LEVEL);
-+                      ofdm_nil = ATH9K_ANI_OFDM_DEF_LEVEL;
-+                      cck_nil = ATH9K_ANI_CCK_DEF_LEVEL;
+       mutex_lock(&sc->mutex);
+       ath9k_ps_wakeup(sc);
+@@ -1050,15 +1009,16 @@ static int ath9k_change_interface(struct
                }
-       } else {
-               /*
-@@ -603,11 +356,9 @@ void ath9k_ani_reset(struct ath_hw *ah, 
-                       aniState->cckNoiseImmunityLevel);
-                       aniState->update_ani = true;
--                      ath9k_hw_set_ofdm_nil(ah,
--                                            aniState->ofdmNoiseImmunityLevel);
--                      ath9k_hw_set_cck_nil(ah,
--                                           aniState->cckNoiseImmunityLevel);
        }
-+      ath9k_hw_set_ofdm_nil(ah, ofdm_nil);
-+      ath9k_hw_set_cck_nil(ah, cck_nil);
  
-       /*
-        * enable phy counters if hw supports or if not, enable phy
-@@ -627,9 +378,6 @@ static bool ath9k_hw_ani_read_counters(s
- {
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ar5416AniState *aniState = &ah->curchan->ani;
--      u32 ofdm_base = 0;
--      u32 cck_base = 0;
--      u32 ofdmPhyErrCnt, cckPhyErrCnt;
-       u32 phyCnt1, phyCnt2;
-       int32_t listenTime;
-@@ -642,11 +390,6 @@ static bool ath9k_hw_ani_read_counters(s
-               return false;
-       }
+-      /* Clean up old vif stuff */
+       if (ath9k_uses_beacons(vif->type))
+-              ath9k_reclaim_beacon(sc, vif);
++              ath9k_beacon_remove_slot(sc, vif);
  
--      if (!use_new_ani(ah)) {
--              ofdm_base = AR_PHY_COUNTMAX - ah->config.ofdm_trig_high;
--              cck_base = AR_PHY_COUNTMAX - ah->config.cck_trig_high;
--      }
--
-       aniState->listenTime += listenTime;
-       ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
-@@ -654,35 +397,12 @@ static bool ath9k_hw_ani_read_counters(s
-       phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
-       phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
--      if (!use_new_ani(ah) && (phyCnt1 < ofdm_base || phyCnt2 < cck_base)) {
--              if (phyCnt1 < ofdm_base) {
--                      ath_dbg(common, ANI,
--                              "phyCnt1 0x%x, resetting counter value to 0x%x\n",
--                              phyCnt1, ofdm_base);
--                      REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base);
--                      REG_WRITE(ah, AR_PHY_ERR_MASK_1,
--                                AR_PHY_ERR_OFDM_TIMING);
--              }
--              if (phyCnt2 < cck_base) {
--                      ath_dbg(common, ANI,
--                              "phyCnt2 0x%x, resetting counter value to 0x%x\n",
--                              phyCnt2, cck_base);
--                      REG_WRITE(ah, AR_PHY_ERR_2, cck_base);
--                      REG_WRITE(ah, AR_PHY_ERR_MASK_2,
--                                AR_PHY_ERR_CCK_TIMING);
--              }
--              return false;
--      }
-+      ah->stats.ast_ani_ofdmerrs += phyCnt1 - aniState->ofdmPhyErrCount;
-+      aniState->ofdmPhyErrCount = phyCnt1;
+-      /* Add new settings */
+       vif->type = new_type;
+       vif->p2p = p2p;
+-      ath9k_do_vif_add_setup(hw, vif);
++      ath9k_calculate_summary_state(hw, vif);
++      if (ath9k_uses_beacons(vif->type))
++              ath9k_beacon_assign_slot(sc, vif);
 +
-+      ah->stats.ast_ani_cckerrs += phyCnt2 - aniState->cckPhyErrCount;
-+      aniState->cckPhyErrCount = phyCnt2;
+ out:
+       ath9k_ps_restore(sc);
+       mutex_unlock(&sc->mutex);
+@@ -1078,9 +1038,8 @@ static void ath9k_remove_interface(struc
+       sc->nvifs--;
+-      /* Reclaim beacon resources */
+       if (ath9k_uses_beacons(vif->type))
+-              ath9k_reclaim_beacon(sc, vif);
++              ath9k_beacon_remove_slot(sc, vif);
  
--      ofdmPhyErrCnt = phyCnt1 - ofdm_base;
--      ah->stats.ast_ani_ofdmerrs +=
--              ofdmPhyErrCnt - aniState->ofdmPhyErrCount;
--      aniState->ofdmPhyErrCount = ofdmPhyErrCnt;
+       ath9k_calculate_summary_state(hw, NULL);
+@@ -1388,10 +1347,6 @@ static int ath9k_conf_tx(struct ieee8021
+       if (ret)
+               ath_err(common, "TXQ Update failed\n");
+-      if (sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC)
+-              if (queue == WME_AC_BE && !ret)
+-                      ath_beaconq_config(sc);
 -
--      cckPhyErrCnt = phyCnt2 - cck_base;
--      ah->stats.ast_ani_cckerrs +=
--              cckPhyErrCnt - aniState->cckPhyErrCount;
--      aniState->cckPhyErrCount = cckPhyErrCnt;
-       return true;
- }
+       mutex_unlock(&sc->mutex);
+       ath9k_ps_restore(sc);
+@@ -1460,85 +1415,36 @@ static int ath9k_set_key(struct ieee8021
  
-@@ -716,21 +436,10 @@ void ath9k_hw_ani_monitor(struct ath_hw 
-       if (aniState->listenTime > ah->aniperiod) {
-               if (cckPhyErrRate < ah->config.cck_trig_low &&
--                  ((ofdmPhyErrRate < ah->config.ofdm_trig_low &&
--                    aniState->ofdmNoiseImmunityLevel <
--                    ATH9K_ANI_OFDM_DEF_LEVEL) ||
--                   (ofdmPhyErrRate < ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI &&
--                    aniState->ofdmNoiseImmunityLevel >=
--                    ATH9K_ANI_OFDM_DEF_LEVEL))) {
-+                  ofdmPhyErrRate < ah->config.ofdm_trig_low) {
-                       ath9k_hw_ani_lower_immunity(ah);
-                       aniState->ofdmsTurn = !aniState->ofdmsTurn;
--              } else if ((ofdmPhyErrRate > ah->config.ofdm_trig_high &&
--                          aniState->ofdmNoiseImmunityLevel >=
--                          ATH9K_ANI_OFDM_DEF_LEVEL) ||
--                         (ofdmPhyErrRate >
--                          ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI &&
--                          aniState->ofdmNoiseImmunityLevel <
--                          ATH9K_ANI_OFDM_DEF_LEVEL)) {
-+              } else if (ofdmPhyErrRate > ah->config.ofdm_trig_high) {
-                       ath9k_hw_ani_ofdm_err_trigger(ah);
-                       aniState->ofdmsTurn = false;
-               } else if (cckPhyErrRate > ah->config.cck_trig_high) {
-@@ -778,49 +487,6 @@ void ath9k_hw_disable_mib_counters(struc
+       return ret;
  }
- EXPORT_SYMBOL(ath9k_hw_disable_mib_counters);
+-static void ath9k_bss_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
++
++static void ath9k_bss_assoc_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
+ {
+       struct ath_softc *sc = data;
+       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+-      struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+       struct ath_vif *avp = (void *)vif->drv_priv;
++      struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+       unsigned long flags;
+-      /*
+-       * Skip iteration if primary station vif's bss info
+-       * was not changed
+-       */
++
+       if (test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags))
+               return;
  
--/*
-- * Process a MIB interrupt.  We may potentially be invoked because
-- * any of the MIB counters overflow/trigger so don't assume we're
-- * here because a PHY error counter triggered.
-- */
--void ath9k_hw_proc_mib_event(struct ath_hw *ah)
--{
--      u32 phyCnt1, phyCnt2;
--
--      /* Reset these counters regardless */
--      REG_WRITE(ah, AR_FILT_OFDM, 0);
--      REG_WRITE(ah, AR_FILT_CCK, 0);
--      if (!(REG_READ(ah, AR_SLP_MIB_CTRL) & AR_SLP_MIB_PENDING))
--              REG_WRITE(ah, AR_SLP_MIB_CTRL, AR_SLP_MIB_CLEAR);
--
--      /* Clear the mib counters and save them in the stats */
--      ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
--
--      if (!DO_ANI(ah)) {
+       if (bss_conf->assoc) {
+               set_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
+               avp->primary_sta_vif = true;
++
+               memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
+               common->curaid = bss_conf->aid;
+               ath9k_hw_write_associd(sc->sc_ah);
+-              ath_dbg(common, CONFIG, "Bss Info ASSOC %d, bssid: %pM\n",
+-                      bss_conf->aid, common->curbssid);
+-              ath_beacon_config(sc, vif);
 -              /*
--               * We must always clear the interrupt cause by
--               * resetting the phy error regs.
+-               * Request a re-configuration of Beacon related timers
+-               * on the receipt of the first Beacon frame (i.e.,
+-               * after time sync with the AP).
 -               */
--              REG_WRITE(ah, AR_PHY_ERR_1, 0);
--              REG_WRITE(ah, AR_PHY_ERR_2, 0);
--              return;
--      }
--
--      /* NB: these are not reset-on-read */
--      phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
--      phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
--      if (((phyCnt1 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK) ||
--          ((phyCnt2 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK)) {
+-              spin_lock_irqsave(&sc->sc_pm_lock, flags);
+-              sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON;
+-              spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
+-              /* Reset rssi stats */
+               sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
+               sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
+-              ath_start_rx_poll(sc, 3);
 -
--              if (!use_new_ani(ah))
--                      ath9k_hw_ani_read_counters(ah);
+-              if (!common->disable_ani) {
+-                      set_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+-                      ath_start_ani(common);
+-              }
 -
--              /* NB: always restart to insure the h/w counters are reset */
--              ath9k_ani_restart(ah);
 -      }
 -}
--EXPORT_SYMBOL(ath9k_hw_proc_mib_event);
 -
- void ath9k_hw_ani_setup(struct ath_hw *ah)
- {
-       int i;
-@@ -845,50 +511,31 @@ void ath9k_hw_ani_init(struct ath_hw *ah
-       ath_dbg(common, ANI, "Initialize ANI\n");
--      if (use_new_ani(ah)) {
--              ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_NEW;
--              ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_NEW;
-+      ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
-+      ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
--              ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_NEW;
--              ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_NEW;
--      } else {
--              ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_OLD;
--              ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_OLD;
+-static void ath9k_config_bss(struct ath_softc *sc, struct ieee80211_vif *vif)
+-{
+-      struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+-      struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+-      struct ath_vif *avp = (void *)vif->drv_priv;
+-
+-      if (sc->sc_ah->opmode != NL80211_IFTYPE_STATION)
+-              return;
 -
--              ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_OLD;
--              ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_OLD;
+-      /* Reconfigure bss info */
+-      if (avp->primary_sta_vif && !bss_conf->assoc) {
+-              ath_dbg(common, CONFIG, "Bss Info DISASSOC %d, bssid %pM\n",
+-                      common->curaid, common->curbssid);
+-              clear_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
+-              clear_bit(SC_OP_BEACONS, &sc->sc_flags);
+-              avp->primary_sta_vif = false;
+-              memset(common->curbssid, 0, ETH_ALEN);
+-              common->curaid = 0;
 -      }
-+      ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH;
-+      ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW;
-       for (i = 0; i < ARRAY_SIZE(ah->channels); i++) {
-               struct ath9k_channel *chan = &ah->channels[i];
-               struct ar5416AniState *ani = &chan->ani;
--              if (use_new_ani(ah)) {
--                      ani->spurImmunityLevel =
--                              ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
-+              ani->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
--                      ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-+              ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
--                      if (AR_SREV_9300_20_OR_LATER(ah))
--                              ani->mrcCCKOff =
--                                      !ATH9K_ANI_ENABLE_MRC_CCK;
--                      else
--                              ani->mrcCCKOff = true;
 -
--                      ani->ofdmsTurn = true;
--              } else {
--                      ani->spurImmunityLevel =
--                              ATH9K_ANI_SPUR_IMMUNE_LVL_OLD;
--                      ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_OLD;
-+              if (AR_SREV_9300_20_OR_LATER(ah))
-+                      ani->mrcCCKOff =
-+                              !ATH9K_ANI_ENABLE_MRC_CCK;
-+              else
-+                      ani->mrcCCKOff = true;
+-      ieee80211_iterate_active_interfaces_atomic(
+-                      sc->hw, ath9k_bss_iter, sc);
++              spin_lock_irqsave(&sc->sc_pm_lock, flags);
++              sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON;
++              spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
  
--                      ani->cckWeakSigThreshold =
--                              ATH9K_ANI_CCK_WEAK_SIG_THR;
--              }
-+              ani->ofdmsTurn = true;
-               ani->rssiThrHigh = ATH9K_ANI_RSSI_THR_HIGH;
-               ani->rssiThrLow = ATH9K_ANI_RSSI_THR_LOW;
--              ani->ofdmWeakSigDetectOff =
--                      !ATH9K_ANI_USE_OFDM_WEAK_SIG;
-+              ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
-               ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
-               ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
-               ani->update_ani = false;
-@@ -898,13 +545,8 @@ void ath9k_hw_ani_init(struct ath_hw *ah
-        * since we expect some ongoing maintenance on the tables, let's sanity
-        * check here default level should not modify INI setting.
-        */
--      if (use_new_ani(ah)) {
--              ah->aniperiod = ATH9K_ANI_PERIOD_NEW;
--              ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_NEW;
--      } else {
--              ah->aniperiod = ATH9K_ANI_PERIOD_OLD;
--              ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_OLD;
--      }
-+      ah->aniperiod = ATH9K_ANI_PERIOD;
-+      ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL;
-       if (ah->config.enable_ani)
-               ah->proc_phyerr |= HAL_PROCESS_ANI;
---- a/drivers/net/wireless/ath/ath9k/ani.h
-+++ b/drivers/net/wireless/ath/ath9k/ani.h
-@@ -24,42 +24,34 @@
- #define BEACON_RSSI(ahp) (ahp->stats.avgbrssi)
- /* units are errors per second */
--#define ATH9K_ANI_OFDM_TRIG_HIGH_OLD      500
--#define ATH9K_ANI_OFDM_TRIG_HIGH_NEW      3500
-+#define ATH9K_ANI_OFDM_TRIG_HIGH          3500
- #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000
- /* units are errors per second */
--#define ATH9K_ANI_OFDM_TRIG_LOW_OLD       200
--#define ATH9K_ANI_OFDM_TRIG_LOW_NEW       400
-+#define ATH9K_ANI_OFDM_TRIG_LOW           400
- #define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900
- /* units are errors per second */
--#define ATH9K_ANI_CCK_TRIG_HIGH_OLD       200
--#define ATH9K_ANI_CCK_TRIG_HIGH_NEW       600
-+#define ATH9K_ANI_CCK_TRIG_HIGH           600
- /* units are errors per second */
--#define ATH9K_ANI_CCK_TRIG_LOW_OLD        100
--#define ATH9K_ANI_CCK_TRIG_LOW_NEW        300
-+#define ATH9K_ANI_CCK_TRIG_LOW            300
- #define ATH9K_ANI_NOISE_IMMUNE_LVL        4
- #define ATH9K_ANI_USE_OFDM_WEAK_SIG       true
- #define ATH9K_ANI_CCK_WEAK_SIG_THR        false
--#define ATH9K_ANI_SPUR_IMMUNE_LVL_OLD     7
--#define ATH9K_ANI_SPUR_IMMUNE_LVL_NEW     3
-+#define ATH9K_ANI_SPUR_IMMUNE_LVL         3
--#define ATH9K_ANI_FIRSTEP_LVL_OLD         0
--#define ATH9K_ANI_FIRSTEP_LVL_NEW         2
-+#define ATH9K_ANI_FIRSTEP_LVL             2
- #define ATH9K_ANI_RSSI_THR_HIGH           40
- #define ATH9K_ANI_RSSI_THR_LOW            7
--#define ATH9K_ANI_PERIOD_OLD              100
--#define ATH9K_ANI_PERIOD_NEW              300
-+#define ATH9K_ANI_PERIOD                  300
- /* in ms */
--#define ATH9K_ANI_POLLINTERVAL_OLD        100
--#define ATH9K_ANI_POLLINTERVAL_NEW        1000
-+#define ATH9K_ANI_POLLINTERVAL            1000
- #define HAL_NOISE_IMMUNE_MAX              4
- #define HAL_SPUR_IMMUNE_MAX               7
-@@ -122,13 +114,12 @@ struct ar5416AniState {
-       u8 mrcCCKOff;
-       u8 spurImmunityLevel;
-       u8 firstepLevel;
--      u8 ofdmWeakSigDetectOff;
-+      u8 ofdmWeakSigDetect;
-       u8 cckWeakSigThreshold;
-       bool update_ani;
-       u32 listenTime;
-       int32_t rssiThrLow;
-       int32_t rssiThrHigh;
--      u32 noiseFloor;
-       u32 ofdmPhyErrCount;
-       u32 cckPhyErrCount;
-       int16_t pktRssi[2];
---- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -995,141 +995,6 @@ static u32 ar5008_hw_compute_pll_control
-       return pll;
+-      /*
+-       * None of station vifs are associated.
+-       * Clear bssid & aid
+-       */
+-      if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
+-              ath9k_hw_write_associd(sc->sc_ah);
+-              clear_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+-              del_timer_sync(&common->ani.timer);
+-              del_timer_sync(&sc->rx_poll_timer);
+-              memset(&sc->caldata, 0, sizeof(sc->caldata));
++              ath_dbg(common, CONFIG,
++                      "Primary Station interface: %pM, BSSID: %pM\n",
++                      vif->addr, common->curbssid);
+       }
  }
  
--static bool ar5008_hw_ani_control_old(struct ath_hw *ah,
--                                    enum ath9k_ani_cmd cmd,
--                                    int param)
--{
--      struct ar5416AniState *aniState = &ah->curchan->ani;
--      struct ath_common *common = ath9k_hw_common(ah);
--
--      switch (cmd & ah->ani_function) {
--      case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{
--              u32 level = param;
--
--              if (level >= ARRAY_SIZE(ah->totalSizeDesired)) {
--                      ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
--                              level, ARRAY_SIZE(ah->totalSizeDesired));
--                      return false;
--              }
--
--              REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ,
--                            AR_PHY_DESIRED_SZ_TOT_DES,
--                            ah->totalSizeDesired[level]);
--              REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
--                            AR_PHY_AGC_CTL1_COARSE_LOW,
--                            ah->coarse_low[level]);
--              REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
--                            AR_PHY_AGC_CTL1_COARSE_HIGH,
--                            ah->coarse_high[level]);
--              REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
--                            AR_PHY_FIND_SIG_FIRPWR,
--                            ah->firpwr[level]);
--
--              if (level > aniState->noiseImmunityLevel)
--                      ah->stats.ast_ani_niup++;
--              else if (level < aniState->noiseImmunityLevel)
--                      ah->stats.ast_ani_nidown++;
--              aniState->noiseImmunityLevel = level;
--              break;
--      }
--      case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
--              u32 on = param ? 1 : 0;
--
--              if (on)
--                      REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
--                                  AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
--              else
--                      REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
--                                  AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
--
--              if (!on != aniState->ofdmWeakSigDetectOff) {
--                      if (on)
--                              ah->stats.ast_ani_ofdmon++;
--                      else
--                              ah->stats.ast_ani_ofdmoff++;
--                      aniState->ofdmWeakSigDetectOff = !on;
--              }
--              break;
--      }
--      case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{
--              static const int weakSigThrCck[] = { 8, 6 };
--              u32 high = param ? 1 : 0;
+@@ -1547,6 +1453,11 @@ static void ath9k_bss_info_changed(struc
+                                  struct ieee80211_bss_conf *bss_conf,
+                                  u32 changed)
+ {
++#define CHECK_ANI                             \
++      (BSS_CHANGED_ASSOC |                    \
++       BSS_CHANGED_IBSS |                     \
++       BSS_CHANGED_BEACON_ENABLED)
++
+       struct ath_softc *sc = hw->priv;
+       struct ath_hw *ah = sc->sc_ah;
+       struct ath_common *common = ath9k_hw_common(ah);
+@@ -1557,53 +1468,43 @@ static void ath9k_bss_info_changed(struc
+       mutex_lock(&sc->mutex);
+       if (changed & BSS_CHANGED_ASSOC) {
+-              ath9k_config_bss(sc, vif);
++              ath_dbg(common, CONFIG, "BSSID %pM Changed ASSOC %d\n",
++                      bss_conf->bssid, bss_conf->assoc);
+-              ath_dbg(common, CONFIG, "BSSID: %pM aid: 0x%x\n",
+-                      common->curbssid, common->curaid);
++              /*
++               * Do not do anything when the opmode is not STATION.
++               */
++              if (ah->opmode == NL80211_IFTYPE_STATION) {
++                      if (avp->primary_sta_vif && !bss_conf->assoc) {
++                              clear_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
++                              clear_bit(SC_OP_BEACONS, &sc->sc_flags);
++                              avp->primary_sta_vif = false;
++                      }
++
++                      ieee80211_iterate_active_interfaces_atomic(sc->hw,
++                                                 ath9k_bss_assoc_iter, sc);
++
++                      if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
++                              memset(common->curbssid, 0, ETH_ALEN);
++                              common->curaid = 0;
++                              ath9k_hw_write_associd(sc->sc_ah);
++                      }
++              }
+       }
+       if (changed & BSS_CHANGED_IBSS) {
+-              /* There can be only one vif available */
+               memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
+               common->curaid = bss_conf->aid;
+               ath9k_hw_write_associd(sc->sc_ah);
 -
--              REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT,
--                            AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK,
--                            weakSigThrCck[high]);
--              if (high != aniState->cckWeakSigThreshold) {
--                      if (high)
--                              ah->stats.ast_ani_cckhigh++;
--                      else
--                              ah->stats.ast_ani_ccklow++;
--                      aniState->cckWeakSigThreshold = high;
--              }
--              break;
--      }
--      case ATH9K_ANI_FIRSTEP_LEVEL:{
--              static const int firstep[] = { 0, 4, 8 };
--              u32 level = param;
+-              if (bss_conf->ibss_joined) {
+-                      sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
 -
--              if (level >= ARRAY_SIZE(firstep)) {
--                      ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
--                              level, ARRAY_SIZE(firstep));
--                      return false;
--              }
--              REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
--                            AR_PHY_FIND_SIG_FIRSTEP,
--                            firstep[level]);
--              if (level > aniState->firstepLevel)
--                      ah->stats.ast_ani_stepup++;
--              else if (level < aniState->firstepLevel)
--                      ah->stats.ast_ani_stepdown++;
--              aniState->firstepLevel = level;
--              break;
--      }
--      case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
--              static const int cycpwrThr1[] = { 2, 4, 6, 8, 10, 12, 14, 16 };
--              u32 level = param;
+-                      if (!common->disable_ani) {
+-                              set_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+-                              ath_start_ani(common);
+-                      }
 -
--              if (level >= ARRAY_SIZE(cycpwrThr1)) {
--                      ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
--                              level, ARRAY_SIZE(cycpwrThr1));
--                      return false;
+-              } else {
+-                      clear_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+-                      del_timer_sync(&common->ani.timer);
+-                      del_timer_sync(&sc->rx_poll_timer);
 -              }
--              REG_RMW_FIELD(ah, AR_PHY_TIMING5,
--                            AR_PHY_TIMING5_CYCPWR_THR1,
--                            cycpwrThr1[level]);
--              if (level > aniState->spurImmunityLevel)
--                      ah->stats.ast_ani_spurup++;
--              else if (level < aniState->spurImmunityLevel)
--                      ah->stats.ast_ani_spurdown++;
--              aniState->spurImmunityLevel = level;
--              break;
--      }
--      case ATH9K_ANI_PRESENT:
--              break;
--      default:
--              ath_dbg(common, ANI, "invalid cmd %u\n", cmd);
--              return false;
--      }
--
--      ath_dbg(common, ANI, "ANI parameters:\n");
--      ath_dbg(common, ANI,
--              "noiseImmunityLevel=%d, spurImmunityLevel=%d, ofdmWeakSigDetectOff=%d\n",
--              aniState->noiseImmunityLevel,
--              aniState->spurImmunityLevel,
--              !aniState->ofdmWeakSigDetectOff);
--      ath_dbg(common, ANI,
--              "cckWeakSigThreshold=%d, firstepLevel=%d, listenTime=%d\n",
--              aniState->cckWeakSigThreshold,
--              aniState->firstepLevel,
--              aniState->listenTime);
--      ath_dbg(common, ANI, "ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
--              aniState->ofdmPhyErrCount,
--              aniState->cckPhyErrCount);
--
--      return true;
--}
+       }
+-      /*
+-       * In case of AP mode, the HW TSF has to be reset
+-       * when the beacon interval changes.
+-       */
+-      if ((changed & BSS_CHANGED_BEACON_INT) &&
+-          (vif->type == NL80211_IFTYPE_AP))
+-              set_bit(SC_OP_TSF_RESET, &sc->sc_flags);
 -
- static bool ar5008_hw_ani_control_new(struct ath_hw *ah,
-                                     enum ath9k_ani_cmd cmd,
-                                     int param)
-@@ -1206,18 +1071,18 @@ static bool ar5008_hw_ani_control_new(st
-                       REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
-                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
--              if (!on != aniState->ofdmWeakSigDetectOff) {
-+              if (on != aniState->ofdmWeakSigDetect) {
-                       ath_dbg(common, ANI,
-                               "** ch %d: ofdm weak signal: %s=>%s\n",
-                               chan->channel,
--                              !aniState->ofdmWeakSigDetectOff ?
-+                              aniState->ofdmWeakSigDetect ?
-                               "on" : "off",
-                               on ? "on" : "off");
-                       if (on)
-                               ah->stats.ast_ani_ofdmon++;
-                       else
-                               ah->stats.ast_ani_ofdmoff++;
--                      aniState->ofdmWeakSigDetectOff = !on;
-+                      aniState->ofdmWeakSigDetect = on;
+-      /* Configure beaconing (AP, IBSS, MESH) */
+-      if (ath9k_uses_beacons(vif->type) &&
+-          ((changed & BSS_CHANGED_BEACON) ||
+-           (changed & BSS_CHANGED_BEACON_ENABLED) ||
+-           (changed & BSS_CHANGED_BEACON_INT))) {
+-              ath9k_set_beaconing_status(sc, false);
+-              if (bss_conf->enable_beacon)
+-                      ath_beacon_alloc(sc, vif);
+-              else
+-                      avp->is_bslot_active = false;
+-              ath_beacon_config(sc, vif);
+-              ath9k_set_beaconing_status(sc, true);
++      if ((changed & BSS_CHANGED_BEACON) ||
++          (changed & BSS_CHANGED_BEACON_ENABLED) ||
++          (changed & BSS_CHANGED_BEACON_INT)) {
++              if (ah->opmode == NL80211_IFTYPE_AP)
++                      ath9k_set_tsfadjust(sc, vif);
++              if (ath9k_allow_beacon_config(sc, vif))
++                      ath9k_beacon_config(sc, vif, changed);
+       }
+       if (changed & BSS_CHANGED_ERP_SLOT) {
+@@ -1625,8 +1526,13 @@ static void ath9k_bss_info_changed(struc
                }
-               break;
        }
-@@ -1236,7 +1101,7 @@ static bool ar5008_hw_ani_control_new(st
-                * from INI file & cap value
-                */
-               value = firstep_table[level] -
--                      firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+                      firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
-                       aniState->iniDef.firstep;
-               if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
-                       value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -1251,7 +1116,7 @@ static bool ar5008_hw_ani_control_new(st
-                * from INI file & cap value
-                */
-               value2 = firstep_table[level] -
--                       firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+                       firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
-                        aniState->iniDef.firstepLow;
-               if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
-                       value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -1267,7 +1132,7 @@ static bool ar5008_hw_ani_control_new(st
-                               chan->channel,
-                               aniState->firstepLevel,
-                               level,
--                              ATH9K_ANI_FIRSTEP_LVL_NEW,
-+                              ATH9K_ANI_FIRSTEP_LVL,
-                               value,
-                               aniState->iniDef.firstep);
-                       ath_dbg(common, ANI,
-@@ -1275,7 +1140,7 @@ static bool ar5008_hw_ani_control_new(st
-                               chan->channel,
-                               aniState->firstepLevel,
-                               level,
--                              ATH9K_ANI_FIRSTEP_LVL_NEW,
-+                              ATH9K_ANI_FIRSTEP_LVL,
-                               value2,
-                               aniState->iniDef.firstepLow);
-                       if (level > aniState->firstepLevel)
-@@ -1300,7 +1165,7 @@ static bool ar5008_hw_ani_control_new(st
-                * from INI file & cap value
-                */
-               value = cycpwrThr1_table[level] -
--                      cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+                      cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
-                       aniState->iniDef.cycpwrThr1;
-               if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
-                       value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -1316,7 +1181,7 @@ static bool ar5008_hw_ani_control_new(st
-                * from INI file & cap value
-                */
-               value2 = cycpwrThr1_table[level] -
--                       cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+                       cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
-                        aniState->iniDef.cycpwrThr1Ext;
-               if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
-                       value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -1331,7 +1196,7 @@ static bool ar5008_hw_ani_control_new(st
-                               chan->channel,
-                               aniState->spurImmunityLevel,
-                               level,
--                              ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+                              ATH9K_ANI_SPUR_IMMUNE_LVL,
-                               value,
-                               aniState->iniDef.cycpwrThr1);
-                       ath_dbg(common, ANI,
-@@ -1339,7 +1204,7 @@ static bool ar5008_hw_ani_control_new(st
-                               chan->channel,
-                               aniState->spurImmunityLevel,
-                               level,
--                              ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+                              ATH9K_ANI_SPUR_IMMUNE_LVL,
-                               value2,
-                               aniState->iniDef.cycpwrThr1Ext);
-                       if (level > aniState->spurImmunityLevel)
-@@ -1367,7 +1232,7 @@ static bool ar5008_hw_ani_control_new(st
-       ath_dbg(common, ANI,
-               "ANI parameters: SI=%d, ofdmWS=%s FS=%d MRCcck=%s listenTime=%d ofdmErrs=%d cckErrs=%d\n",
-               aniState->spurImmunityLevel,
--              !aniState->ofdmWeakSigDetectOff ? "on" : "off",
-+              aniState->ofdmWeakSigDetect ? "on" : "off",
-               aniState->firstepLevel,
-               !aniState->mrcCCKOff ? "on" : "off",
-               aniState->listenTime,
-@@ -1454,9 +1319,9 @@ static void ar5008_hw_ani_cache_ini_regs
-                                              AR_PHY_EXT_TIMING5_CYCPWR_THR1);
-       /* these levels just got reset to defaults by the INI */
--      aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
--      aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
--      aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG;
-+      aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
-+      aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
-+      aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
-       aniState->mrcCCKOff = true; /* not available on pre AR9003 */
++      if (changed & CHECK_ANI)
++              ath_check_ani(sc);
++
+       mutex_unlock(&sc->mutex);
+       ath9k_ps_restore(sc);
++
++#undef CHECK_ANI
  }
  
-@@ -1545,11 +1410,8 @@ void ar5008_hw_attach_phy_ops(struct ath
-       priv_ops->do_getnf = ar5008_hw_do_getnf;
-       priv_ops->set_radar_params = ar5008_hw_set_radar_params;
+ static u64 ath9k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
+@@ -1855,10 +1761,11 @@ static int ath9k_tx_last_beacon(struct i
+       if (!vif)
+               return 0;
  
--      if (modparam_force_new_ani) {
--              priv_ops->ani_control = ar5008_hw_ani_control_new;
--              priv_ops->ani_cache_ini_regs = ar5008_hw_ani_cache_ini_regs;
--      } else
--              priv_ops->ani_control = ar5008_hw_ani_control_old;
-+      priv_ops->ani_control = ar5008_hw_ani_control_new;
-+      priv_ops->ani_cache_ini_regs = ar5008_hw_ani_cache_ini_regs;
-       if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah))
-               priv_ops->compute_pll_control = ar9160_hw_compute_pll_control;
---- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
-@@ -21,10 +21,6 @@
- #include "ar9002_initvals.h"
- #include "ar9002_phy.h"
--int modparam_force_new_ani;
--module_param_named(force_new_ani, modparam_force_new_ani, int, 0444);
--MODULE_PARM_DESC(force_new_ani, "Force new ANI for AR5008, AR9001, AR9002");
--
- /* General hardware code for the A5008/AR9001/AR9002 hadware families */
- static void ar9002_hw_init_mode_regs(struct ath_hw *ah)
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -825,18 +825,18 @@ static bool ar9003_hw_ani_control(struct
-                       REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
-                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
--              if (!on != aniState->ofdmWeakSigDetectOff) {
-+              if (on != aniState->ofdmWeakSigDetect) {
-                       ath_dbg(common, ANI,
-                               "** ch %d: ofdm weak signal: %s=>%s\n",
-                               chan->channel,
--                              !aniState->ofdmWeakSigDetectOff ?
-+                              aniState->ofdmWeakSigDetect ?
-                               "on" : "off",
-                               on ? "on" : "off");
-                       if (on)
-                               ah->stats.ast_ani_ofdmon++;
-                       else
-                               ah->stats.ast_ani_ofdmoff++;
--                      aniState->ofdmWeakSigDetectOff = !on;
-+                      aniState->ofdmWeakSigDetect = on;
+-      avp = (void *)vif->drv_priv;
+-      if (!avp->is_bslot_active)
++      if (!vif->bss_conf.enable_beacon)
+               return 0;
++      avp = (void *)vif->drv_priv;
++
+       if (!sc->beacon.tx_processed && !edma) {
+               tasklet_disable(&sc->bcon_tasklet);
+--- a/drivers/net/wireless/ath/ath9k/mci.c
++++ b/drivers/net/wireless/ath/ath9k/mci.c
+@@ -202,7 +202,7 @@ static void ath_mci_cal_msg(struct ath_s
+       case MCI_GPM_BT_CAL_REQ:
+               if (mci_hw->bt_state == MCI_BT_AWAKE) {
+                       ar9003_mci_state(ah, MCI_STATE_SET_BT_CAL_START);
+-                      ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++                      ath9k_queue_reset(sc, RESET_TYPE_MCI);
                }
+               ath_dbg(common, MCI, "MCI State : %d\n", mci_hw->bt_state);
                break;
+--- a/drivers/net/wireless/ath/ath9k/recv.c
++++ b/drivers/net/wireless/ath/ath9k/recv.c
+@@ -553,7 +553,7 @@ static void ath_rx_ps_beacon(struct ath_
+               sc->ps_flags &= ~PS_BEACON_SYNC;
+               ath_dbg(common, PS,
+                       "Reconfigure Beacon timers based on timestamp from the AP\n");
+-              ath_set_beacon(sc);
++              ath9k_set_beacon(sc);
        }
-@@ -855,7 +855,7 @@ static bool ar9003_hw_ani_control(struct
-                * from INI file & cap value
-                */
-               value = firstep_table[level] -
--                      firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+                      firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
-                       aniState->iniDef.firstep;
-               if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
-                       value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -870,7 +870,7 @@ static bool ar9003_hw_ani_control(struct
-                * from INI file & cap value
-                */
-               value2 = firstep_table[level] -
--                       firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+                       firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
-                        aniState->iniDef.firstepLow;
-               if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
-                       value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -886,7 +886,7 @@ static bool ar9003_hw_ani_control(struct
-                               chan->channel,
-                               aniState->firstepLevel,
-                               level,
--                              ATH9K_ANI_FIRSTEP_LVL_NEW,
-+                              ATH9K_ANI_FIRSTEP_LVL,
-                               value,
-                               aniState->iniDef.firstep);
-                       ath_dbg(common, ANI,
-@@ -894,7 +894,7 @@ static bool ar9003_hw_ani_control(struct
-                               chan->channel,
-                               aniState->firstepLevel,
-                               level,
--                              ATH9K_ANI_FIRSTEP_LVL_NEW,
-+                              ATH9K_ANI_FIRSTEP_LVL,
-                               value2,
-                               aniState->iniDef.firstepLow);
-                       if (level > aniState->firstepLevel)
-@@ -919,7 +919,7 @@ static bool ar9003_hw_ani_control(struct
-                * from INI file & cap value
-                */
-               value = cycpwrThr1_table[level] -
--                      cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+                      cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
-                       aniState->iniDef.cycpwrThr1;
-               if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
-                       value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -935,7 +935,7 @@ static bool ar9003_hw_ani_control(struct
-                * from INI file & cap value
-                */
-               value2 = cycpwrThr1_table[level] -
--                       cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+                       cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
-                        aniState->iniDef.cycpwrThr1Ext;
-               if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
-                       value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -950,7 +950,7 @@ static bool ar9003_hw_ani_control(struct
-                               chan->channel,
-                               aniState->spurImmunityLevel,
-                               level,
--                              ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+                              ATH9K_ANI_SPUR_IMMUNE_LVL,
-                               value,
-                               aniState->iniDef.cycpwrThr1);
-                       ath_dbg(common, ANI,
-@@ -958,7 +958,7 @@ static bool ar9003_hw_ani_control(struct
-                               chan->channel,
-                               aniState->spurImmunityLevel,
-                               level,
--                              ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+                              ATH9K_ANI_SPUR_IMMUNE_LVL,
-                               value2,
-                               aniState->iniDef.cycpwrThr1Ext);
-                       if (level > aniState->spurImmunityLevel)
-@@ -1002,7 +1002,7 @@ static bool ar9003_hw_ani_control(struct
-       ath_dbg(common, ANI,
-               "ANI parameters: SI=%d, ofdmWS=%s FS=%d MRCcck=%s listenTime=%d ofdmErrs=%d cckErrs=%d\n",
-               aniState->spurImmunityLevel,
--              !aniState->ofdmWeakSigDetectOff ? "on" : "off",
-+              aniState->ofdmWeakSigDetect ? "on" : "off",
-               aniState->firstepLevel,
-               !aniState->mrcCCKOff ? "on" : "off",
-               aniState->listenTime,
-@@ -1111,9 +1111,9 @@ static void ar9003_hw_ani_cache_ini_regs
-                                              AR_PHY_EXT_CYCPWR_THR1);
-       /* these levels just got reset to defaults by the INI */
--      aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
--      aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
--      aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG;
-+      aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
-+      aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
-+      aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
-       aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK;
- }
  
---- a/drivers/net/wireless/ath/ath9k/debug.c
-+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -348,8 +348,6 @@ void ath_debug_stat_interrupt(struct ath
-               sc->debug.stats.istats.txok++;
-       if (status & ATH9K_INT_TXURN)
-               sc->debug.stats.istats.txurn++;
--      if (status & ATH9K_INT_MIB)
--              sc->debug.stats.istats.mib++;
-       if (status & ATH9K_INT_RXPHY)
-               sc->debug.stats.istats.rxphyerr++;
-       if (status & ATH9K_INT_RXKCM)
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -1019,16 +1019,8 @@ void ar9002_hw_attach_ops(struct ath_hw 
- void ar9003_hw_attach_ops(struct ath_hw *ah);
- void ar9002_hw_load_ani_reg(struct ath_hw *ah, struct ath9k_channel *chan);
--/*
-- * ANI work can be shared between all families but a next
-- * generation implementation of ANI will be used only for AR9003 only
-- * for now as the other families still need to be tested with the same
-- * next generation ANI. Feel free to start testing it though for the
-- * older families (AR5008, AR9001, AR9002) by using modparam_force_new_ani.
-- */
--extern int modparam_force_new_ani;
-+
- void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning);
--void ath9k_hw_proc_mib_event(struct ath_hw *ah);
- void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan);
- #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -19,7 +19,7 @@
- #include "ath9k.h"
- #include "btcoex.h"
+       if (ath_beacon_dtim_pending_cab(skb)) {
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -614,10 +614,8 @@ static void ath_tx_complete_aggr(struct 
  
--static u8 parse_mpdudensity(u8 mpdudensity)
-+u8 ath9k_parse_mpdudensity(u8 mpdudensity)
- {
-       /*
-        * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
-@@ -320,6 +320,7 @@ static void ath_node_attach(struct ath_s
-                           struct ieee80211_vif *vif)
- {
-       struct ath_node *an;
-+      u8 density;
-       an = (struct ath_node *)sta->drv_priv;
+       rcu_read_unlock();
  
- #ifdef CONFIG_ATH9K_DEBUGFS
-@@ -334,7 +335,8 @@ static void ath_node_attach(struct ath_s
-               ath_tx_node_init(sc, an);
-               an->maxampdu = 1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
-                                    sta->ht_cap.ampdu_factor);
--              an->mpdudensity = parse_mpdudensity(sta->ht_cap.ampdu_density);
-+              density = ath9k_parse_mpdudensity(sta->ht_cap.ampdu_density);
-+              an->mpdudensity = density;
-       }
+-      if (needreset) {
+-              RESET_STAT_INC(sc, RESET_TYPE_TX_ERROR);
+-              ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
+-      }
++      if (needreset)
++              ath9k_queue_reset(sc, RESET_TYPE_TX_ERROR);
  }
  
-@@ -516,24 +518,6 @@ irqreturn_t ath_isr(int irq, void *dev)
-               ath9k_hw_set_interrupts(ah);
-       }
+ static bool ath_lookup_legacy(struct ath_buf *bf)
+@@ -1586,7 +1584,8 @@ void ath_txq_schedule(struct ath_softc *
+       struct ath_atx_ac *ac, *ac_tmp, *last_ac;
+       struct ath_atx_tid *tid, *last_tid;
  
--      if (status & ATH9K_INT_MIB) {
--              /*
--               * Disable interrupts until we service the MIB
--               * interrupt; otherwise it will continue to
--               * fire.
--               */
--              ath9k_hw_disable_interrupts(ah);
--              /*
--               * Let the hal handle the event. We assume
--               * it will clear whatever condition caused
--               * the interrupt.
--               */
--              spin_lock(&common->cc_lock);
--              ath9k_hw_proc_mib_event(ah);
--              spin_unlock(&common->cc_lock);
--              ath9k_hw_enable_interrupts(ah);
--      }
--
-       if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
-               if (status & ATH9K_INT_TIM_TIMER) {
-                       if (ATH_DBG_WARN_ON_ONCE(sc->ps_idle))
-@@ -959,14 +943,10 @@ static void ath9k_calculate_summary_stat
-       /*
-        * Enable MIB interrupts when there are hardware phy counters.
-        */
--      if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0) {
--              if (ah->config.enable_ani)
--                      ah->imask |= ATH9K_INT_MIB;
-+      if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0)
-               ah->imask |= ATH9K_INT_TSFOOR;
--      } else {
--              ah->imask &= ~ATH9K_INT_MIB;
-+      else
-               ah->imask &= ~ATH9K_INT_TSFOOR;
--      }
+-      if (work_pending(&sc->hw_reset_work) || list_empty(&txq->axq_acq) ||
++      if (test_bit(SC_OP_HW_RESET, &sc->sc_flags) ||
++          list_empty(&txq->axq_acq) ||
+           txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
+               return;
  
-       ath9k_hw_set_interrupts(ah);
+@@ -2191,7 +2190,7 @@ static void ath_tx_processq(struct ath_s
+       ath_txq_lock(sc, txq);
+       for (;;) {
+-              if (work_pending(&sc->hw_reset_work))
++              if (test_bit(SC_OP_HW_RESET, &sc->sc_flags))
+                       break;
+               if (list_empty(&txq->axq_q)) {
+@@ -2274,7 +2273,7 @@ void ath_tx_edma_tasklet(struct ath_soft
+       int status;
  
+       for (;;) {
+-              if (work_pending(&sc->hw_reset_work))
++              if (test_bit(SC_OP_HW_RESET, &sc->sc_flags))
+                       break;
+               status = ath9k_hw_txprocdesc(ah, NULL, (void *)&ts);
+--- a/include/net/mac80211.h
++++ b/include/net/mac80211.h
+@@ -3596,22 +3596,6 @@ void ieee80211_request_smps(struct ieee8
+                           enum ieee80211_smps_mode smps_mode);
+ /**
+- * ieee80211_key_removed - disable hw acceleration for key
+- * @key_conf: The key hw acceleration should be disabled for
+- *
+- * This allows drivers to indicate that the given key has been
+- * removed from hardware acceleration, due to a new key that
+- * was added. Don't use this if the key can continue to be used
+- * for TX, if the key restriction is on RX only it is permitted
+- * to keep the key for TX only and not call this function.
+- *
+- * Due to locking constraints, it may only be called during
+- * @set_key. This function must be allowed to sleep, and the
+- * key it tries to disable may still be used until it returns.
+- */
+-void ieee80211_key_removed(struct ieee80211_key_conf *key_conf);
+-
+-/**
+  * ieee80211_ready_on_channel - notification of remain-on-channel start
+  * @hw: pointer as obtained from ieee80211_alloc_hw()
+  */
 --- a/net/mac80211/agg-rx.c
 +++ b/net/mac80211/agg-rx.c
-@@ -201,6 +201,8 @@ static void ieee80211_send_addba_resp(st
+@@ -203,6 +203,8 @@ static void ieee80211_send_addba_resp(st
                memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN);
        else if (sdata->vif.type == NL80211_IFTYPE_ADHOC)
                memcpy(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN);
                memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN);
        else if (sdata->vif.type == NL80211_IFTYPE_STATION)
                memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN);
-@@ -456,6 +457,7 @@ int ieee80211_start_tx_ba_session(struct
+@@ -459,6 +460,7 @@ int ieee80211_start_tx_ba_session(struct
            sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
            sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
            sdata->vif.type != NL80211_IFTYPE_AP &&
            sdata->vif.type != NL80211_IFTYPE_ADHOC)
                return -EINVAL;
  
+--- a/net/mac80211/cfg.c
++++ b/net/mac80211/cfg.c
+@@ -1741,6 +1741,8 @@ static int ieee80211_set_txq_params(stru
+               return -EINVAL;
+       }
++      ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_QOS);
++
+       return 0;
+ }
 --- a/net/mac80211/debugfs_sta.c
 +++ b/net/mac80211/debugfs_sta.c
 @@ -63,11 +63,11 @@ static ssize_t sta_flags_read(struct fil
                            TEST(TDLS_PEER_AUTH), TEST(4ADDR_EVENT),
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
-@@ -284,7 +284,6 @@ static int ieee80211_do_open(struct net_
+@@ -400,7 +400,6 @@ static int ieee80211_do_open(struct net_
  {
        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
        struct ieee80211_local *local = sdata->local;
        u32 changed = 0;
        int res;
        u32 hw_reconf_flags = 0;
-@@ -430,28 +429,6 @@ static int ieee80211_do_open(struct net_
+@@ -538,28 +537,6 @@ static int ieee80211_do_open(struct net_
  
        set_bit(SDATA_STATE_RUNNING, &sdata->state);
  
        /*
         * set_multicast_list will be invoked by the networking core
         * which will check whether any increments here were done in
-@@ -639,6 +616,8 @@ static void ieee80211_do_stop(struct iee
-               ieee80211_configure_filter(local);
-               break;
-       default:
-+              flush_work(&local->hw_roc_start);
-+              flush_work(&local->hw_roc_done);
-               flush_work(&sdata->work);
-               /*
-                * When we get here, the interface is marked down.
-@@ -845,6 +824,72 @@ static void ieee80211_if_setup(struct ne
+@@ -949,6 +926,72 @@ static void ieee80211_if_setup(struct ne
        dev->destructor = free_netdev;
  }
  
  static void ieee80211_iface_work(struct work_struct *work)
  {
        struct ieee80211_sub_if_data *sdata =
-@@ -949,6 +994,9 @@ static void ieee80211_iface_work(struct 
+@@ -1053,6 +1096,9 @@ static void ieee80211_iface_work(struct 
                                break;
                        ieee80211_mesh_rx_queued_mgmt(sdata, skb);
                        break;
                default:
                        WARN(1, "frame for unexpected interface type");
                        break;
+--- a/net/mac80211/key.c
++++ b/net/mac80211/key.c
+@@ -197,26 +197,6 @@ static void ieee80211_key_disable_hw_acc
+       key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
+ }
+-void ieee80211_key_removed(struct ieee80211_key_conf *key_conf)
+-{
+-      struct ieee80211_key *key;
+-
+-      key = container_of(key_conf, struct ieee80211_key, conf);
+-
+-      might_sleep();
+-      assert_key_lock(key->local);
+-
+-      key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
+-
+-      /*
+-       * Flush TX path to avoid attempts to use this key
+-       * after this function returns. Until then, drivers
+-       * must be prepared to handle the key.
+-       */
+-      synchronize_rcu();
+-}
+-EXPORT_SYMBOL_GPL(ieee80211_key_removed);
+-
+ static void __ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata,
+                                       int idx, bool uni, bool multi)
+ {
+--- a/net/mac80211/mlme.c
++++ b/net/mac80211/mlme.c
+@@ -1108,7 +1108,7 @@ void ieee80211_dynamic_ps_timer(unsigned
+ }
+ /* MLME */
+-static void ieee80211_sta_wmm_params(struct ieee80211_local *local,
++static bool ieee80211_sta_wmm_params(struct ieee80211_local *local,
+                                    struct ieee80211_sub_if_data *sdata,
+                                    u8 *wmm_param, size_t wmm_param_len)
+ {
+@@ -1119,23 +1119,23 @@ static void ieee80211_sta_wmm_params(str
+       u8 *pos, uapsd_queues = 0;
+       if (!local->ops->conf_tx)
+-              return;
++              return false;
+       if (local->hw.queues < IEEE80211_NUM_ACS)
+-              return;
++              return false;
+       if (!wmm_param)
+-              return;
++              return false;
+       if (wmm_param_len < 8 || wmm_param[5] /* version */ != 1)
+-              return;
++              return false;
+       if (ifmgd->flags & IEEE80211_STA_UAPSD_ENABLED)
+               uapsd_queues = ifmgd->uapsd_queues;
+       count = wmm_param[6] & 0x0f;
+       if (count == ifmgd->wmm_last_param_set)
+-              return;
++              return false;
+       ifmgd->wmm_last_param_set = count;
+       pos = wmm_param + 8;
+@@ -1202,6 +1202,7 @@ static void ieee80211_sta_wmm_params(str
+       /* enable WMM or activate new settings */
+       sdata->vif.bss_conf.qos = true;
++      return true;
+ }
+ static void __ieee80211_stop_poll(struct ieee80211_sub_if_data *sdata)
+@@ -2435,14 +2436,6 @@ static void ieee80211_rx_mgmt_beacon(str
+               directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len,
+                                                  ifmgd->aid);
+-      if (ncrc != ifmgd->beacon_crc || !ifmgd->beacon_crc_valid) {
+-              ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems,
+-                                    true);
+-
+-              ieee80211_sta_wmm_params(local, sdata, elems.wmm_param,
+-                                       elems.wmm_param_len);
+-      }
+-
+       if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) {
+               if (directed_tim) {
+                       if (local->hw.conf.dynamic_ps_timeout > 0) {
+@@ -2473,6 +2466,13 @@ static void ieee80211_rx_mgmt_beacon(str
+       ifmgd->beacon_crc = ncrc;
+       ifmgd->beacon_crc_valid = true;
++      ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems,
++                            true);
++
++      if (ieee80211_sta_wmm_params(local, sdata, elems.wmm_param,
++                                   elems.wmm_param_len))
++              changed |= BSS_CHANGED_QOS;
++
+       if (elems.erp_info && elems.erp_info_len >= 1) {
+               erp_valid = true;
+               erp_value = elems.erp_info[0];
+--- a/net/mac80211/rc80211_minstrel_ht.c
++++ b/net/mac80211/rc80211_minstrel_ht.c
+@@ -626,8 +626,12 @@ minstrel_ht_get_rate(void *priv, struct 
+ #ifdef CONFIG_MAC80211_DEBUGFS
+       /* use fixed index if set */
+-      if (mp->fixed_rate_idx != -1)
+-              sample_idx = mp->fixed_rate_idx;
++      if (mp->fixed_rate_idx != -1) {
++              mi->max_tp_rate = mp->fixed_rate_idx;
++              mi->max_tp_rate2 = mp->fixed_rate_idx;
++              mi->max_prob_rate = mp->fixed_rate_idx;
++              sample_idx = -1;
++      }
+ #endif
+       if (sample_idx >= 0) {
 --- a/net/mac80211/rx.c
 +++ b/net/mac80211/rx.c
-@@ -2281,6 +2281,7 @@ ieee80211_rx_h_action(struct ieee80211_r
+@@ -2262,6 +2262,7 @@ ieee80211_rx_h_action(struct ieee80211_r
                    sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
                    sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
                    sdata->vif.type != NL80211_IFTYPE_AP &&
                    sdata->vif.type != NL80211_IFTYPE_ADHOC)
                        break;
  
-@@ -2495,14 +2496,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_
+@@ -2479,14 +2480,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_
  
        if (!ieee80211_vif_is_mesh(&sdata->vif) &&
            sdata->vif.type != NL80211_IFTYPE_ADHOC &&
                break;
        case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP):
        case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP):
-@@ -2833,10 +2835,16 @@ static int prepare_for_handlers(struct i
+@@ -2817,10 +2819,16 @@ static int prepare_for_handlers(struct i
                }
                break;
        case NL80211_IFTYPE_WDS:
        WLAN_STA_CLEAR_PS_FILT,
        WLAN_STA_MFP,
        WLAN_STA_BLOCK_BA,
---- a/drivers/net/wireless/ath/ath9k/ath9k.h
-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -214,6 +214,7 @@ struct ath_frame_info {
-       enum ath9k_key_type keytype;
-       u8 keyix;
-       u8 retries;
-+      u8 rtscts_rate;
- };
- struct ath_buf_state {
-@@ -721,6 +722,7 @@ extern int ath9k_modparam_nohwcrypt;
- extern int led_blink;
- extern bool is_ath9k_unloaded;
-+u8 ath9k_parse_mpdudensity(u8 mpdudensity);
- irqreturn_t ath_isr(int irq, void *dev);
- int ath9k_init_device(u16 devid, struct ath_softc *sc,
-                   const struct ath_bus_ops *bus_ops);
---- a/drivers/net/wireless/ath/ath9k/xmit.c
-+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -938,6 +938,7 @@ static void ath_buf_set_rate(struct ath_
-       struct ieee80211_tx_rate *rates;
-       const struct ieee80211_rate *rate;
-       struct ieee80211_hdr *hdr;
-+      struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu);
-       int i;
-       u8 rix = 0;
-@@ -948,18 +949,7 @@ static void ath_buf_set_rate(struct ath_
-       /* set dur_update_en for l-sig computation except for PS-Poll frames */
-       info->dur_update = !ieee80211_is_pspoll(hdr->frame_control);
--
--      /*
--       * We check if Short Preamble is needed for the CTS rate by
--       * checking the BSS's global flag.
--       * But for the rate series, IEEE80211_TX_RC_USE_SHORT_PREAMBLE is used.
--       */
--      rate = ieee80211_get_rts_cts_rate(sc->hw, tx_info);
--      info->rtscts_rate = rate->hw_value;
--
--      if (tx_info->control.vif &&
--          tx_info->control.vif->bss_conf.use_short_preamble)
--              info->rtscts_rate |= rate->hw_value_short;
-+      info->rtscts_rate = fi->rtscts_rate;
-       for (i = 0; i < 4; i++) {
-               bool is_40, is_sgi, is_sp;
-@@ -1001,13 +991,13 @@ static void ath_buf_set_rate(struct ath_
-               }
-               /* legacy rates */
-+              rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx];
-               if ((tx_info->band == IEEE80211_BAND_2GHZ) &&
-                   !(rate->flags & IEEE80211_RATE_ERP_G))
-                       phy = WLAN_RC_PHY_CCK;
-               else
-                       phy = WLAN_RC_PHY_OFDM;
--              rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx];
-               info->rates[i].Rate = rate->hw_value;
-               if (rate->hw_value_short) {
-                       if (rates[i].flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
-@@ -1175,6 +1165,7 @@ int ath_tx_aggr_start(struct ath_softc *
- {
-       struct ath_atx_tid *txtid;
-       struct ath_node *an;
-+      u8 density;
-       an = (struct ath_node *)sta->drv_priv;
-       txtid = ATH_AN_2_TID(an, tid);
-@@ -1182,6 +1173,17 @@ int ath_tx_aggr_start(struct ath_softc *
-       if (txtid->state & (AGGR_CLEANUP | AGGR_ADDBA_COMPLETE))
-               return -EAGAIN;
-+      /* update ampdu factor/density, they may have changed. This may happen
-+       * in HT IBSS when a beacon with HT-info is received after the station
-+       * has already been added.
-+       */
-+      if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
-+              an->maxampdu = 1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
-+                                   sta->ht_cap.ampdu_factor);
-+              density = ath9k_parse_mpdudensity(sta->ht_cap.ampdu_density);
-+              an->mpdudensity = density;
-+      }
-+
-       txtid->state |= AGGR_ADDBA_PROGRESS;
-       txtid->paused = true;
-       *ssn = txtid->seq_start = txtid->seq_next;
-@@ -1776,10 +1778,22 @@ static void setup_frame_info(struct ieee
-       struct ieee80211_sta *sta = tx_info->control.sta;
-       struct ieee80211_key_conf *hw_key = tx_info->control.hw_key;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-+      const struct ieee80211_rate *rate;
-       struct ath_frame_info *fi = get_frame_info(skb);
-       struct ath_node *an = NULL;
-       enum ath9k_key_type keytype;
-+      bool short_preamble = false;
-+
-+      /*
-+       * We check if Short Preamble is needed for the CTS rate by
-+       * checking the BSS's global flag.
-+       * But for the rate series, IEEE80211_TX_RC_USE_SHORT_PREAMBLE is used.
-+       */
-+      if (tx_info->control.vif &&
-+          tx_info->control.vif->bss_conf.use_short_preamble)
-+              short_preamble = true;
-+      rate = ieee80211_get_rts_cts_rate(hw, tx_info);
-       keytype = ath9k_cmn_get_hw_crypto_keytype(skb);
-       if (sta)
-@@ -1794,6 +1808,9 @@ static void setup_frame_info(struct ieee
-               fi->keyix = ATH9K_TXKEYIX_INVALID;
-       fi->keytype = keytype;
-       fi->framelen = framelen;
-+      fi->rtscts_rate = rate->hw_value;
-+      if (short_preamble)
-+              fi->rtscts_rate |= rate->hw_value_short;
- }
- u8 ath_txchainmask_reduction(struct ath_softc *sc, u8 chainmask, u32 rate)
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -2246,6 +2246,33 @@ static int nl80211_parse_beacon(struct g
-       return 0;
- }
-+static bool nl80211_get_ap_channel(struct cfg80211_registered_device *rdev,
-+                                 struct cfg80211_ap_settings *params)
-+{
-+      struct wireless_dev *wdev;
-+      bool ret = false;
-+
-+      mutex_lock(&rdev->devlist_mtx);
-+
-+      list_for_each_entry(wdev, &rdev->netdev_list, list) {
-+              if (wdev->iftype != NL80211_IFTYPE_AP &&
-+                  wdev->iftype != NL80211_IFTYPE_P2P_GO)
-+                      continue;
-+
-+              if (!wdev->preset_chan)
-+                      continue;
-+
-+              params->channel = wdev->preset_chan;
-+              params->channel_type = wdev->preset_chantype;
-+              ret = true;
-+              break;
-+      }
-+
-+      mutex_unlock(&rdev->devlist_mtx);
-+
-+      return ret;
-+}
-+
- static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -2716,7 +2716,7 @@ EXPORT_SYMBOL(ieee80211_get_buffered_bc)
+ void ieee80211_tx_skb_tid(struct ieee80211_sub_if_data *sdata,
+                         struct sk_buff *skb, int tid)
  {
-       struct cfg80211_registered_device *rdev = info->user_ptr[0];
-@@ -2348,7 +2375,7 @@ static int nl80211_start_ap(struct sk_bu
-       } else if (wdev->preset_chan) {
-               params.channel = wdev->preset_chan;
-               params.channel_type = wdev->preset_chantype;
--      } else
-+      } else if (!nl80211_get_ap_channel(rdev, &params))
-               return -EINVAL;
-       if (!cfg80211_can_beacon_sec_chan(&rdev->wiphy, params.channel,
-@@ -2356,8 +2383,11 @@ static int nl80211_start_ap(struct sk_bu
-               return -EINVAL;
-       err = rdev->ops->start_ap(&rdev->wiphy, dev, &params);
--      if (!err)
-+      if (!err) {
-+              wdev->preset_chan = params.channel;
-+              wdev->preset_chantype = params.channel_type;
-               wdev->beacon_interval = params.beacon_interval;
-+      }
-       return err;
- }
---- a/drivers/net/wireless/ath/ath9k/link.c
-+++ b/drivers/net/wireless/ath/ath9k/link.c
-@@ -407,6 +407,7 @@ void ath_ani_calibrate(unsigned long dat
-               longcal ? "long" : "", shortcal ? "short" : "",
-               aniflag ? "ani" : "", common->ani.caldone ? "true" : "false");
-+      ath9k_debug_samp_bb_mac(sc);
-       ath9k_ps_restore(sc);
- set_timer:
-@@ -415,7 +416,6 @@ set_timer:
-       * The interval must be the shortest necessary to satisfy ANI,
-       * short calibration and long calibration.
-       */
--      ath9k_debug_samp_bb_mac(sc);
-       cal_interval = ATH_LONG_CALINTERVAL;
-       if (sc->sc_ah->config.enable_ani)
-               cal_interval = min(cal_interval,
---- a/drivers/net/wireless/ath/ath.h
-+++ b/drivers/net/wireless/ath/ath.h
-@@ -143,6 +143,7 @@ struct ath_common {
-       u32 keymax;
-       DECLARE_BITMAP(keymap, ATH_KEYMAX);
-       DECLARE_BITMAP(tkip_keymap, ATH_KEYMAX);
-+      DECLARE_BITMAP(ccmp_keymap, ATH_KEYMAX);
-       enum ath_crypt_caps crypt_caps;
-       unsigned int clockrate;
---- a/drivers/net/wireless/ath/ath9k/recv.c
-+++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -785,7 +785,8 @@ static bool ath9k_rx_accept(struct ath_c
-        * descriptor does contain a valid key index. This has been observed
-        * mostly with CCMP encryption.
-        */
--      if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID)
-+      if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID ||
-+          !test_bit(rx_stats->rs_keyix, common->ccmp_keymap))
-               rx_stats->rs_status &= ~ATH9K_RXERR_KEYMISS;
-       if (!rx_stats->rs_datalen) {
---- a/drivers/net/wireless/ath/key.c
-+++ b/drivers/net/wireless/ath/key.c
-@@ -556,6 +556,9 @@ int ath_key_config(struct ath_common *co
-               return -EIO;
-       set_bit(idx, common->keymap);
-+      if (key->cipher == WLAN_CIPHER_SUITE_CCMP)
-+              set_bit(idx, common->ccmp_keymap);
-+
-       if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
-               set_bit(idx + 64, common->keymap);
-               set_bit(idx, common->tkip_keymap);
-@@ -582,6 +585,7 @@ void ath_key_delete(struct ath_common *c
-               return;
-       clear_bit(key->hw_key_idx, common->keymap);
-+      clear_bit(key->hw_key_idx, common->ccmp_keymap);
-       if (key->cipher != WLAN_CIPHER_SUITE_TKIP)
-               return;
+-      int ac = ieee802_1d_to_ac[tid];
++      int ac = ieee802_1d_to_ac[tid & 7];
  
+       skb_set_mac_header(skb, 0);
+       skb_set_network_header(skb, 0);
index 7c59e1f109ca7bf9896684d020ab7db23064dc21..2f469b6285918c6da8c9acb307b1496d529dd640 100644 (file)
@@ -8,7 +8,7 @@
  #include <asm/unaligned.h>
  
  #include "hw.h"
-@@ -523,8 +524,16 @@ static int ath9k_hw_init_macaddr(struct 
+@@ -526,8 +527,16 @@ static int ath9k_hw_init_macaddr(struct 
                common->macaddr[2 * i] = eeval >> 8;
                common->macaddr[2 * i + 1] = eeval & 0xff;
        }
index 577275d26ca62a5086c820556ef8d6c79ec8c4c0..f58f805bcf52ef296af8b38c69d98c6b8d1e0e78 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/wireless/reg.c
 +++ b/net/wireless/reg.c
-@@ -1699,6 +1699,8 @@ void regulatory_hint_11d(struct wiphy *w
+@@ -1702,6 +1702,8 @@ void regulatory_hint_11d(struct wiphy *w
        enum environment_cap env = ENVIRON_ANY;
        struct regulatory_request *request;
  
@@ -9,7 +9,7 @@
        mutex_lock(&reg_mutex);
  
        if (unlikely(!last_request))
-@@ -1934,6 +1936,8 @@ static void restore_regulatory_settings(
+@@ -1937,6 +1939,8 @@ static void restore_regulatory_settings(
  
  void regulatory_hint_disconnect(void)
  {
index 2f23096c636be20c6b3d20f20d0501aab8c5d5f8..8fa6f2a9252f8b380e308e87cd58ed936690734f 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/mac80211/main.c
 +++ b/net/mac80211/main.c
-@@ -776,17 +776,11 @@ int ieee80211_register_hw(struct ieee802
+@@ -786,17 +786,11 @@ int ieee80211_register_hw(struct ieee802
         */
        for (i = 0; i < hw->wiphy->n_iface_combinations; i++) {
                const struct ieee80211_iface_combination *c;
index 0d53d5c0370567a21c711d3432c1a863fac7f5ea..ec33376acffda1c60619604711781e9f37ba7416 100644 (file)
@@ -9,11 +9,9 @@ Other devices will need to be added to the switch in  write_file_bwmode
 drivers/net/wireless/ath/ath5k/debug.c |   86 ++++++++++++++++++++++++++++++++
  1 files changed, 86 insertions(+), 0 deletions(-)
 
-diff --git a/drivers/net/wireless/ath/ath5k/debug.c b/drivers/net/wireless/ath/ath5k/debug.c
-index 8c5ce8b..bb41066 100644
 --- a/drivers/net/wireless/ath/ath5k/debug.c
 +++ b/drivers/net/wireless/ath/ath5k/debug.c
-@@ -815,6 +815,89 @@ static const struct file_operations fops_ani = {
+@@ -812,6 +812,89 @@ static const struct file_operations fops
        .llseek = default_llseek,
  };
  
@@ -103,7 +101,7 @@ index 8c5ce8b..bb41066 100644
  
  /* debugfs: queues etc */
  
-@@ -906,6 +989,9 @@ ath5k_debug_init_device(struct ath5k_hw *ah)
+@@ -903,6 +986,9 @@ ath5k_debug_init_device(struct ath5k_hw 
        debugfs_create_file("beacon", S_IWUSR | S_IRUSR, phydir, ah,
                            &fops_beacon);
  
@@ -113,4 +111,3 @@ index 8c5ce8b..bb41066 100644
        debugfs_create_file("reset", S_IWUSR, phydir, ah, &fops_reset);
  
        debugfs_create_file("antenna", S_IWUSR | S_IRUSR, phydir, ah,
--- 
index ed50ea4e1555807b3554d623dac415043fd53332..49e80ca3e6573741dc5ad3a6b1a17061dffe0dae 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1533,6 +1533,53 @@ static const struct file_operations fops
+@@ -1532,6 +1532,53 @@ static const struct file_operations fops
  
  #endif
  
@@ -54,7 +54,7 @@
  int ath9k_init_debug(struct ath_hw *ah)
  {
        struct ath_common *common = ath9k_hw_common(ah);
-@@ -1596,5 +1643,8 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1595,5 +1642,8 @@ int ath9k_init_debug(struct ath_hw *ah)
        debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
                           sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
  
index 710ca7bad9644e59dd0db79927efc5f8d28a4487..19975c862065c5f09eac9b014af13a6c0867d700 100644 (file)
@@ -71,7 +71,7 @@
                        ath_err(common, "Reading Magic # failed\n");
 --- a/drivers/net/wireless/ath/ath9k/hw.h
 +++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -657,6 +657,7 @@ enum ath_cal_list {
+@@ -658,6 +658,7 @@ enum ath_cal_list {
  #define AH_USE_EEPROM   0x1
  #define AH_UNPLUGGED    0x2 /* The card has been physically removed. */
  #define AH_FASTCC       0x4
index 9ff77812e4dbbd41cf0c810d8f1de1c10f6a83b2..fb6b270cbcb53fb162d9e3f1836455396f38f799 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1928,8 +1928,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1956,8 +1956,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
                REG_WRITE(ah, AR_OBS, 8);
  
        if (ah->config.rx_intr_mitigation) {
index 6126313b6e232799333f0e44b4fbf61f94615c03..d688b065b06bad0db27209b44e29ce9861f3b604 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -641,6 +641,7 @@ struct ath_softc {
+@@ -649,6 +649,7 @@ struct ath_softc {
        struct ieee80211_hw *hw;
        struct device *dev;
  
@@ -8,7 +8,7 @@
        struct survey_info *cur_survey;
        struct survey_info survey[ATH9K_NUM_CHANNELS];
  
-@@ -709,6 +710,7 @@ struct ath_softc {
+@@ -717,6 +718,7 @@ struct ath_softc {
        struct dfs_pattern_detector *dfs_detector;
  };
  
@@ -18,7 +18,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1580,6 +1580,50 @@ static const struct file_operations fops
+@@ -1579,6 +1579,50 @@ static const struct file_operations fops
        .owner = THIS_MODULE
  };
  
@@ -69,7 +69,7 @@
  int ath9k_init_debug(struct ath_hw *ah)
  {
        struct ath_common *common = ath9k_hw_common(ah);
-@@ -1646,5 +1690,8 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1645,5 +1689,8 @@ int ath9k_init_debug(struct ath_hw *ah)
        debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
                            &fops_eeprom);
  
@@ -80,7 +80,7 @@
  }
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1124,7 +1124,7 @@ static void ath9k_disable_ps(struct ath_
+@@ -1084,7 +1084,7 @@ static void ath9k_disable_ps(struct ath_
        ath_dbg(common, PS, "PowerSave disabled\n");
  }
  
@@ -89,7 +89,7 @@
  {
        struct ath_softc *sc = hw->priv;
        struct ath_hw *ah = sc->sc_ah;
-@@ -1175,9 +1175,11 @@ static int ath9k_config(struct ieee80211
+@@ -1138,9 +1138,11 @@ static int ath9k_config(struct ieee80211
  
        if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
                struct ieee80211_channel *curchan = hw->conf.channel;
  
                if (ah->curchan)
                        old_pos = ah->curchan - &ah->channels[0];
-@@ -1220,7 +1222,23 @@ static int ath9k_config(struct ieee80211
+@@ -1183,7 +1185,23 @@ static int ath9k_config(struct ieee80211
                        memset(&sc->survey[pos], 0, sizeof(struct survey_info));
                }
  
index 11f0215f8c12721317c8b97313124c94fb2014a1..604fcb1c8c23901b70d6f095a9d7ef87b9a8fada 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
-@@ -814,6 +814,7 @@ static const struct net_device_ops ieee8
+@@ -916,6 +916,7 @@ static const struct net_device_ops ieee8
  static void ieee80211_if_setup(struct net_device *dev)
  {
        ether_setup(dev);
index 9bb2ce8ae91683e7fafc09066f3605974373baca..b907e50375d55f0e1151eb5b9e5ef5b49b4da99f 100644 (file)
@@ -11,7 +11,7 @@
        u16 listen_interval;
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
-@@ -1940,7 +1940,7 @@ static int ieee80211_get_tx_power(struct
+@@ -1956,7 +1956,7 @@ static int ieee80211_get_tx_power(struct
  {
        struct ieee80211_local *local = wiphy_priv(wiphy);
  
index 2b478184cc09f60814d9370416531615c3b1a95c..fa8d6c6b7b0a87d15b05db655b0d954bfe557b5a 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1245,6 +1245,8 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1208,6 +1208,8 @@ int ath9k_config(struct ieee80211_hw *hw
                        return -EINVAL;
                }
  
@@ -9,7 +9,7 @@
                /*
                 * The most recent snapshot of channel->noisefloor for the old
                 * channel is only available after the hardware reset. Copy it to
-@@ -1259,6 +1261,7 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1222,6 +1224,7 @@ int ath9k_config(struct ieee80211_hw *hw
                sc->config.txpowlimit = 2 * conf->power_level;
                ath9k_cmn_update_txpow(ah, sc->curtxpow,
                                       sc->config.txpowlimit, &sc->curtxpow);
index 671ae7ae6fe103302964f91bdd6bf034ea0b849e..47406087040f1f598da9f1b3e6db9c5debcd1992 100644 (file)
@@ -37,7 +37,7 @@
  
 --- a/net/mac80211/rx.c
 +++ b/net/mac80211/rx.c
-@@ -1263,6 +1263,7 @@ ieee80211_rx_h_sta_process(struct ieee80
+@@ -1254,6 +1254,7 @@ ieee80211_rx_h_sta_process(struct ieee80
        struct sk_buff *skb = rx->skb;
        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
@@ -45,7 +45,7 @@
  
        if (!sta)
                return RX_CONTINUE;
-@@ -1307,6 +1308,19 @@ ieee80211_rx_h_sta_process(struct ieee80
+@@ -1298,6 +1299,19 @@ ieee80211_rx_h_sta_process(struct ieee80
                ewma_add(&sta->avg_signal, -status->signal);
        }
  
@@ -67,7 +67,7 @@
         * exchange sequence.
 --- a/net/mac80211/sta_info.c
 +++ b/net/mac80211/sta_info.c
-@@ -256,6 +256,8 @@ struct sta_info *sta_info_alloc(struct i
+@@ -254,6 +254,8 @@ struct sta_info *sta_info_alloc(struct i
        do_posix_clock_monotonic_gettime(&uptime);
        sta->last_connected = uptime.tv_sec;
        ewma_init(&sta->avg_signal, 1024, 8);
@@ -78,7 +78,7 @@
                kfree(sta);
 --- a/include/net/cfg80211.h
 +++ b/include/net/cfg80211.h
-@@ -527,6 +527,8 @@ struct station_parameters {
+@@ -546,6 +546,8 @@ struct station_parameters {
   * @STATION_INFO_STA_FLAGS: @sta_flags filled
   * @STATION_INFO_BEACON_LOSS_COUNT: @beacon_loss_count filled
   * @STATION_INFO_T_OFFSET: @t_offset filled
@@ -87,7 +87,7 @@
   */
  enum station_info_flags {
        STATION_INFO_INACTIVE_TIME      = 1<<0,
-@@ -550,6 +552,8 @@ enum station_info_flags {
+@@ -569,6 +571,8 @@ enum station_info_flags {
        STATION_INFO_STA_FLAGS          = 1<<18,
        STATION_INFO_BEACON_LOSS_COUNT  = 1<<19,
        STATION_INFO_T_OFFSET           = 1<<20,
  };
  
  /**
-@@ -631,6 +635,9 @@ struct sta_bss_parameters {
-       NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
-  * @signal_avg: avg signal strength, type depends on the wiphy's signal_type
-       NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
+@@ -652,6 +656,9 @@ struct sta_bss_parameters {
+  *    For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
+  * @signal_avg: Average signal strength, type depends on the wiphy's signal_type.
+  *    For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
 + * @chains: bitmask for filled values in @chain_signal, @chain_signal_avg
 + * @chain_signal: per-chain signal strength of last received packet in dBm
 + * @chain_signal_avg: per-chain signal strength average in dBm
   * @txrate: current unicast bitrate from this station
   * @rxrate: current unicast bitrate to this station
   * @rx_packets: packets received from this station
-@@ -663,6 +670,11 @@ struct station_info {
+@@ -684,6 +691,11 @@ struct station_info {
        u8 plink_state;
        s8 signal;
        s8 signal_avg;
        u8 rs_num_delims;
 --- a/drivers/net/wireless/ath/ath9k/recv.c
 +++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -952,6 +952,7 @@ static int ath9k_rx_skb_preprocess(struc
+@@ -955,6 +955,7 @@ static int ath9k_rx_skb_preprocess(struc
                                   bool *decrypt_error)
  {
        struct ath_hw *ah = common->ah;
  
        /*
         * everything but the rate is checked here, the rate check is done
-@@ -977,6 +978,20 @@ static int ath9k_rx_skb_preprocess(struc
+@@ -980,6 +981,20 @@ static int ath9k_rx_skb_preprocess(struc
        if (rx_stats->rs_moreaggr)
                rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
  
        if (ads.ds_rxstatus8 & AR_RxKeyIdxValid)
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -998,12 +998,12 @@ void ath_debug_stat_rx(struct ath_softc 
+@@ -997,12 +997,12 @@ void ath_debug_stat_rx(struct ath_softc 
  #ifdef CONFIG_ATH9K_MAC_DEBUG
        spin_lock(&sc->debug.samp_lock);
        RX_SAMP_DBG(jiffies) = jiffies;
        RX_SAMP_DBG(rate) = rs->rs_rate;
 --- a/include/linux/nl80211.h
 +++ b/include/linux/nl80211.h
-@@ -1699,6 +1699,8 @@ enum nl80211_sta_bss_param {
+@@ -1729,6 +1729,8 @@ enum nl80211_sta_bss_param {
   * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update.
   * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32)
   * @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64)
   * @__NL80211_STA_INFO_AFTER_LAST: internal
   * @NL80211_STA_INFO_MAX: highest possible station info attribute
   */
-@@ -1723,6 +1725,8 @@ enum nl80211_sta_info {
+@@ -1753,6 +1755,8 @@ enum nl80211_sta_info {
        NL80211_STA_INFO_STA_FLAGS,
        NL80211_STA_INFO_BEACON_LOSS,
        NL80211_STA_INFO_T_OFFSET,
        __NL80211_STA_INFO_AFTER_LAST,
 --- a/net/wireless/nl80211.c
 +++ b/net/wireless/nl80211.c
-@@ -2553,6 +2553,32 @@ nla_put_failure:
+@@ -2648,6 +2648,32 @@ nla_put_failure:
        return false;
  }
  
  static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
                                int flags,
                                struct cfg80211_registered_device *rdev,
-@@ -2614,6 +2640,18 @@ static int nl80211_send_station(struct s
+@@ -2709,6 +2735,18 @@ static int nl80211_send_station(struct s
        default:
                break;
        }
                                          NL80211_STA_INFO_TX_BITRATE))
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
-@@ -354,6 +354,7 @@ static void sta_set_sinfo(struct sta_inf
- {
+@@ -355,6 +355,7 @@ static void sta_set_sinfo(struct sta_inf
        struct ieee80211_sub_if_data *sdata = sta->sdata;
+       struct ieee80211_local *local = sdata->local;
        struct timespec uptime;
 +      int i;
  
        sinfo->generation = sdata->local->sta_generation;
  
-@@ -391,6 +392,17 @@ static void sta_set_sinfo(struct sta_inf
-               sinfo->signal = (s8)sta->last_signal;
+@@ -394,6 +395,17 @@ static void sta_set_sinfo(struct sta_inf
+                       sinfo->signal = (s8)sta->last_signal;
                sinfo->signal_avg = (s8) -ewma_read(&sta->avg_signal);
        }
 +      if (sta->chains) {
index 99121f7ab593b3839c5a49fece2a66720a1eda71..d86e718f058c4943aeed53ee670af7478b407adf 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
 +++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-@@ -533,108 +533,108 @@ static const u32 ar9300_2p2_baseband_cor
+@@ -534,108 +534,108 @@ static const u32 ar9300_2p2_baseband_cor
  
  static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = {
        /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
index dbda5ef3faeb347498bf4301182e895de2f42a69..2dfc1ed856ca0c9d5bb401ec8672b77424f29985 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -519,6 +519,9 @@ static inline u16 ath9k_btcoex_aggr_limi
+@@ -528,6 +528,9 @@ static inline void ath9k_btcoex_stop_gen
  #ifdef CONFIG_MAC80211_LEDS
  void ath_init_leds(struct ath_softc *sc);
  void ath_deinit_leds(struct ath_softc *sc);
@@ -10,7 +10,7 @@
  #else
  static inline void ath_init_leds(struct ath_softc *sc)
  {
-@@ -637,6 +640,13 @@ struct ath9k_vif_iter_data {
+@@ -645,6 +648,13 @@ struct ath9k_vif_iter_data {
        int nadhocs;   /* number of adhoc vifs */
  };
  
@@ -24,7 +24,7 @@
  struct ath_softc {
        struct ieee80211_hw *hw;
        struct device *dev;
-@@ -678,9 +688,8 @@ struct ath_softc {
+@@ -686,9 +696,8 @@ struct ath_softc {
        struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
  
  #ifdef CONFIG_MAC80211_LEDS
  #endif
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1256,6 +1256,61 @@ static const struct file_operations fops
+@@ -1255,6 +1255,61 @@ static const struct file_operations fops
        .llseek = default_llseek,
  };
  
  #ifdef CONFIG_ATH9K_MAC_DEBUG
  
  void ath9k_debug_samp_bb_mac(struct ath_softc *sc)
-@@ -1681,6 +1736,11 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1680,6 +1735,11 @@ int ath9k_init_debug(struct ath_hw *ah)
                            &fops_samps);
  #endif
  
index ea066a843c9c5b8b3cffeb26ff2685e7d3c0dc78..ae962b5a1746831e030d6edd4a1ace6f7cf0e183 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -702,6 +702,8 @@ struct ieee80211_sub_if_data {
+@@ -710,6 +710,8 @@ struct ieee80211_sub_if_data {
  
        /* bitmap of allowed (non-MCS) rate indexes for rate control */
        u32 rc_rateidx_mask[IEEE80211_NUM_BANDS];
@@ -11,7 +11,7 @@
        union {
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
-@@ -2119,9 +2119,20 @@ static int ieee80211_set_bitrate_mask(st
+@@ -2135,9 +2135,20 @@ static int ieee80211_set_bitrate_mask(st
        }
  
        for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
@@ -34,7 +34,7 @@
        return 0;
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -3676,7 +3676,7 @@ void ieee80211_send_bar(struct ieee80211
+@@ -3665,7 +3665,7 @@ void ieee80211_send_bar(struct ieee80211
   *    (deprecated; this will be removed once drivers get updated to use
   *    rate_idx_mask)
   * @rate_idx_mask: user-requested (legacy) rate mask
@@ -43,7 +43,7 @@
   * @bss: whether this frame is sent out in AP or IBSS mode
   */
  struct ieee80211_tx_rate_control {
-@@ -3688,7 +3688,7 @@ struct ieee80211_tx_rate_control {
+@@ -3677,7 +3677,7 @@ struct ieee80211_tx_rate_control {
        bool rts, short_preamble;
        u8 max_rate_idx;
        u32 rate_idx_mask;
@@ -54,7 +54,7 @@
  
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -637,9 +637,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+@@ -624,9 +624,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
                txrc.max_rate_idx = -1;
        else
                txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
@@ -69,7 +69,7 @@
        txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP ||
                    tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
                    tx->sdata->vif.type == NL80211_IFTYPE_ADHOC);
-@@ -2475,8 +2477,6 @@ struct sk_buff *ieee80211_beacon_get_tim
+@@ -2454,8 +2456,6 @@ struct sk_buff *ieee80211_beacon_get_tim
                txrc.max_rate_idx = -1;
        else
                txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
index 8b5005b7d8d7a7d0eeaf7a1e52f0f883f7164cd0..9ad4f57d3db19bf7b889aee370914987c8279973 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1929,12 +1929,29 @@ static u32 fill_chainmask(u32 cap, u32 n
+@@ -1840,12 +1840,29 @@ static u32 fill_chainmask(u32 cap, u32 n
        return filled;
  }
  
index 7503634776fb032571b16a5a7d3f2f0144cdb09e..72a56a62204c0c9081d4ace576f53b71b1fd19cd 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -676,10 +676,6 @@ static int __ath9k_hw_init(struct ath_hw
+@@ -680,10 +680,6 @@ static int __ath9k_hw_init(struct ath_hw
        if (!AR_SREV_9300_20_OR_LATER(ah))
                ah->ani_function &= ~ATH9K_ANI_MRC_CCK;
  
diff --git a/package/mac80211/patches/564-ath9k_fix_ani_update.patch b/package/mac80211/patches/564-ath9k_fix_ani_update.patch
deleted file mode 100644 (file)
index 19df768..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -140,7 +140,8 @@ static void ath9k_ani_restart(struct ath
- }
- /* Adjust the OFDM Noise Immunity Level */
--static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel)
-+static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel,
-+                                bool scan)
- {
-       struct ar5416AniState *aniState = &ah->curchan->ani;
-       struct ath_common *common = ath9k_hw_common(ah);
-@@ -153,7 +154,7 @@ static void ath9k_hw_set_ofdm_nil(struct
-               immunityLevel, BEACON_RSSI(ah),
-               aniState->rssiThrLow, aniState->rssiThrHigh);
--      if (aniState->update_ani)
-+      if (!scan)
-               aniState->ofdmNoiseImmunityLevel = immunityLevel;
-       entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
-@@ -199,13 +200,14 @@ static void ath9k_hw_ani_ofdm_err_trigge
-       aniState = &ah->curchan->ani;
-       if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL)
--              ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel + 1);
-+              ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel + 1, false);
- }
- /*
-  * Set the ANI settings to match an CCK level.
-  */
--static void ath9k_hw_set_cck_nil(struct ath_hw *ah, u_int8_t immunityLevel)
-+static void ath9k_hw_set_cck_nil(struct ath_hw *ah, u_int8_t immunityLevel,
-+                               bool scan)
- {
-       struct ar5416AniState *aniState = &ah->curchan->ani;
-       struct ath_common *common = ath9k_hw_common(ah);
-@@ -222,7 +224,7 @@ static void ath9k_hw_set_cck_nil(struct 
-           immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
-               immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
--      if (aniState->update_ani)
-+      if (!scan)
-               aniState->cckNoiseImmunityLevel = immunityLevel;
-       entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
-@@ -254,7 +256,8 @@ static void ath9k_hw_ani_cck_err_trigger
-       aniState = &ah->curchan->ani;
-       if (aniState->cckNoiseImmunityLevel < ATH9K_ANI_CCK_MAX_LEVEL)
--              ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1);
-+              ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1,
-+                                   false);
- }
- /*
-@@ -270,13 +273,15 @@ static void ath9k_hw_ani_lower_immunity(
-       /* lower OFDM noise immunity */
-       if (aniState->ofdmNoiseImmunityLevel > 0 &&
-           (aniState->ofdmsTurn || aniState->cckNoiseImmunityLevel == 0)) {
--              ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel - 1);
-+              ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel - 1,
-+                                    false);
-               return;
-       }
-       /* lower CCK noise immunity */
-       if (aniState->cckNoiseImmunityLevel > 0)
--              ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1);
-+              ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1,
-+                                   false);
- }
- /*
-@@ -338,7 +343,6 @@ void ath9k_ani_reset(struct ath_hw *ah, 
-                               aniState->ofdmNoiseImmunityLevel,
-                               aniState->cckNoiseImmunityLevel);
--                      aniState->update_ani = false;
-                       ofdm_nil = ATH9K_ANI_OFDM_DEF_LEVEL;
-                       cck_nil = ATH9K_ANI_CCK_DEF_LEVEL;
-               }
-@@ -354,11 +358,9 @@ void ath9k_ani_reset(struct ath_hw *ah, 
-                       is_scanning,
-                       aniState->ofdmNoiseImmunityLevel,
-                       aniState->cckNoiseImmunityLevel);
--
--                      aniState->update_ani = true;
-       }
--      ath9k_hw_set_ofdm_nil(ah, ofdm_nil);
--      ath9k_hw_set_cck_nil(ah, cck_nil);
-+      ath9k_hw_set_ofdm_nil(ah, ofdm_nil, is_scanning);
-+      ath9k_hw_set_cck_nil(ah, cck_nil, is_scanning);
-       /*
-        * enable phy counters if hw supports or if not, enable phy
-@@ -538,7 +540,6 @@ void ath9k_hw_ani_init(struct ath_hw *ah
-               ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
-               ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
-               ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
--              ani->update_ani = false;
-       }
-       /*
---- a/drivers/net/wireless/ath/ath9k/ani.h
-+++ b/drivers/net/wireless/ath/ath9k/ani.h
-@@ -116,7 +116,6 @@ struct ar5416AniState {
-       u8 firstepLevel;
-       u8 ofdmWeakSigDetect;
-       u8 cckWeakSigThreshold;
--      bool update_ani;
-       u32 listenTime;
-       int32_t rssiThrLow;
-       int32_t rssiThrHigh;
diff --git a/package/mac80211/patches/564-ath9k_revert_initval_change.patch b/package/mac80211/patches/564-ath9k_revert_initval_change.patch
new file mode 100644 (file)
index 0000000..49aea35
--- /dev/null
@@ -0,0 +1,19 @@
+--- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
++++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
+@@ -778,11 +778,11 @@ static const u32 ar9300Common_rx_gain_ta
+       {0x0000a074, 0x00000000},
+       {0x0000a078, 0x00000000},
+       {0x0000a07c, 0x00000000},
+-      {0x0000a080, 0x1a1a1a1a},
+-      {0x0000a084, 0x1a1a1a1a},
+-      {0x0000a088, 0x1a1a1a1a},
+-      {0x0000a08c, 0x1a1a1a1a},
+-      {0x0000a090, 0x171a1a1a},
++      {0x0000a080, 0x22222229},
++      {0x0000a084, 0x1d1d1d1d},
++      {0x0000a088, 0x1d1d1d1d},
++      {0x0000a08c, 0x1d1d1d1d},
++      {0x0000a090, 0x171d1d1d},
+       {0x0000a094, 0x11111717},
+       {0x0000a098, 0x00030311},
+       {0x0000a09c, 0x00000000},
diff --git a/package/mac80211/patches/565-ath9k_fix_txgain.patch b/package/mac80211/patches/565-ath9k_fix_txgain.patch
new file mode 100644 (file)
index 0000000..c2f54d6
--- /dev/null
@@ -0,0 +1,66 @@
+--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
+@@ -561,8 +561,8 @@ static void ar9003_tx_gain_table_mode1(s
+                       5);
+       else if (AR_SREV_9340(ah))
+               INIT_INI_ARRAY(&ah->iniModesTxGain,
+-                      ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
+-                      ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
++                      ar9340Modes_high_ob_db_tx_gain_table_1p0,
++                      ARRAY_SIZE(ar9340Modes_high_ob_db_tx_gain_table_1p0),
+                       5);
+       else if (AR_SREV_9485_11(ah))
+               INIT_INI_ARRAY(&ah->iniModesTxGain,
+@@ -605,8 +605,8 @@ static void ar9003_tx_gain_table_mode2(s
+                       5);
+       else if (AR_SREV_9340(ah))
+               INIT_INI_ARRAY(&ah->iniModesTxGain,
+-                      ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
+-                      ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
++                      ar9340Modes_low_ob_db_tx_gain_table_1p0,
++                      ARRAY_SIZE(ar9340Modes_low_ob_db_tx_gain_table_1p0),
+                       5);
+       else if (AR_SREV_9485_11(ah))
+               INIT_INI_ARRAY(&ah->iniModesTxGain,
+@@ -639,8 +639,8 @@ static void ar9003_tx_gain_table_mode3(s
+                       5);
+       else if (AR_SREV_9340(ah))
+               INIT_INI_ARRAY(&ah->iniModesTxGain,
+-                      ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
+-                      ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
++                      ar9340Modes_high_power_tx_gain_table_1p0,
++                      ARRAY_SIZE(ar9340Modes_high_power_tx_gain_table_1p0),
+                       5);
+       else if (AR_SREV_9485_11(ah))
+               INIT_INI_ARRAY(&ah->iniModesTxGain,
+@@ -659,6 +659,20 @@ static void ar9003_tx_gain_table_mode3(s
+                       5);
+ }
++static void ar9003_tx_gain_table_mode4(struct ath_hw *ah)
++{
++      if (AR_SREV_9340(ah))
++              INIT_INI_ARRAY(&ah->iniModesTxGain,
++                      ar9340Modes_mixed_ob_db_tx_gain_table_1p0,
++                      ARRAY_SIZE(ar9340Modes_mixed_ob_db_tx_gain_table_1p0),
++                      5);
++      else if (AR_SREV_9580(ah))
++              INIT_INI_ARRAY(&ah->iniModesTxGain,
++                      ar9580_1p0_mixed_ob_db_tx_gain_table,
++                      ARRAY_SIZE(ar9580_1p0_mixed_ob_db_tx_gain_table),
++                      5);
++}
++
+ static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
+ {
+       switch (ar9003_hw_get_tx_gain_idx(ah)) {
+@@ -675,6 +689,9 @@ static void ar9003_tx_gain_table_apply(s
+       case 3:
+               ar9003_tx_gain_table_mode3(ah);
+               break;
++      case 4:
++              ar9003_tx_gain_table_mode4(ah);
++              break;
+       }
+ }
diff --git a/package/mac80211/patches/565-ath9k_update_ar9340_initvals.patch b/package/mac80211/patches/565-ath9k_update_ar9340_initvals.patch
deleted file mode 100644 (file)
index 7298293..0000000
+++ /dev/null
@@ -1,786 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ar9340_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9340_initvals.h
-@@ -1,5 +1,6 @@
- /*
-- * Copyright (c) 2011 Atheros Communications Inc.
-+ * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros Inc.
-  *
-  * Permission to use, copy, modify, and/or distribute this software for any
-  * purpose with or without fee is hereby granted, provided that the above
-@@ -18,16 +19,16 @@
- #define INITVALS_9340_H
- static const u32 ar9340_1p0_radio_postamble[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x000160ac, 0xa4646800, 0xa4646800, 0xa4646800, 0xa4646800},
--      {0x0001610c, 0x08000000, 0x08000000, 0x00000000, 0x00000000},
-+      {0x0001610c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016140, 0x10804000, 0x10804000, 0x50804000, 0x50804000},
--      {0x0001650c, 0x08000000, 0x08000000, 0x00000000, 0x00000000},
-+      {0x0001650c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016540, 0x10804000, 0x10804000, 0x50804000, 0x50804000},
- };
- static const u32 ar9340Modes_lowest_ob_db_tx_gain_table_1p0[][5] = {
--      /*   Addr     5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
-@@ -100,20 +101,20 @@ static const u32 ar9340Modes_lowest_ob_d
- };
- static const u32 ar9340Modes_fast_clock_1p0[][3] = {
--      /*  Addr      5G_HT20     5G_HT40  */
-+      /* Addr      5G_HT20     5G_HT40   */
-       {0x00001030, 0x00000268, 0x000004d0},
-       {0x00001070, 0x0000018c, 0x00000318},
-       {0x000010b0, 0x00000fd0, 0x00001fa0},
-       {0x00008014, 0x044c044c, 0x08980898},
-       {0x0000801c, 0x148ec02b, 0x148ec057},
-       {0x00008318, 0x000044c0, 0x00008980},
--      {0x00009e00, 0x03721821, 0x03721821},
-+      {0x00009e00, 0x0372131c, 0x0372131c},
-       {0x0000a230, 0x0000000b, 0x00000016},
-       {0x0000a254, 0x00000898, 0x00001130},
- };
- static const u32 ar9340_1p0_radio_core[][2] = {
--      /*  Addr     allmodes  */
-+      /* Addr      allmodes  */
-       {0x00016000, 0x36db6db6},
-       {0x00016004, 0x6db6db40},
-       {0x00016008, 0x73f00000},
-@@ -146,15 +147,13 @@ static const u32 ar9340_1p0_radio_core[]
-       {0x00016100, 0x04cb0001},
-       {0x00016104, 0xfff80000},
-       {0x00016108, 0x00080010},
--      {0x0001610c, 0x00000000},
-       {0x00016140, 0x50804008},
-       {0x00016144, 0x01884080},
-       {0x00016148, 0x000080c0},
-       {0x00016280, 0x01000015},
--      {0x00016284, 0x05530000},
-+      {0x00016284, 0x15530000},
-       {0x00016288, 0x00318000},
-       {0x0001628c, 0x50000000},
--      {0x00016290, 0x4080294f},
-       {0x00016380, 0x00000000},
-       {0x00016384, 0x00000000},
-       {0x00016388, 0x00800700},
-@@ -219,13 +218,14 @@ static const u32 ar9340_1p0_radio_core[]
- };
- static const u32 ar9340_1p0_radio_core_40M[][2] = {
-+      /* Addr      allmodes  */
-       {0x0001609c, 0x02566f3a},
-       {0x000160ac, 0xa4647c00},
-       {0x000160b0, 0x01885f5a},
- };
- static const u32 ar9340_1p0_mac_postamble[][5] = {
--      /* Addr       5G_HT20     5G_HT40     2G_HT40    2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
-       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
-       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
-@@ -237,34 +237,37 @@ static const u32 ar9340_1p0_mac_postambl
- };
- static const u32 ar9340_1p0_soc_postamble[][5] = {
--      /*   Addr     5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023},
- };
- static const u32 ar9340_1p0_baseband_postamble[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8011, 0xd00a8011},
-       {0x00009820, 0x206a022e, 0x206a022e, 0x206a022e, 0x206a022e},
-       {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-       {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
-       {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-       {0x00009830, 0x0000059c, 0x0000059c, 0x0000119c, 0x0000119c},
--      {0x00009c00, 0x00000044, 0x000000c4, 0x000000c4, 0x00000044},
--      {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0},
--      {0x00009e04, 0x00182020, 0x00182020, 0x00182020, 0x00182020},
-+      {0x00009c00, 0x000000c4, 0x000000c4, 0x000000c4, 0x000000c4},
-+      {0x00009e00, 0x0372111a, 0x0372111a, 0x037216a0, 0x037216a0},
-+      {0x00009e04, 0x001c2020, 0x001c2020, 0x001c2020, 0x001c2020},
-       {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
-       {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec88d2e, 0x7ec88d2e},
--      {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e},
-+      {0x00009e14, 0x37b95d5e, 0x37b9605e, 0x3379605e, 0x33795d5e},
-       {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c},
-       {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce},
-       {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021},
-+      {0x00009e3c, 0xcf946220, 0xcf946220, 0xcf946222, 0xcf946222},
-       {0x00009e44, 0x02321e27, 0x02321e27, 0x02291e27, 0x02291e27},
-       {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012},
-       {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
--      {0x0000a204, 0x00003fc0, 0x00003fc4, 0x00003fc4, 0x00003fc0},
-+      {0x0000a204, 0x00003ec0, 0x00003ec4, 0x00003ec4, 0x00003ec0},
-       {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
-+      {0x0000a22c, 0x07e26a2f, 0x07e26a2f, 0x01026a2f, 0x01026a2f},
-       {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b},
-+      {0x0000a234, 0x00000fff, 0x10000fff, 0x10000fff, 0x00000fff},
-       {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018},
-       {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108},
-       {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898},
-@@ -277,11 +280,11 @@ static const u32 ar9340_1p0_baseband_pos
-       {0x0000a288, 0x00000220, 0x00000220, 0x00000110, 0x00000110},
-       {0x0000a28c, 0x00011111, 0x00011111, 0x00022222, 0x00022222},
-       {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
--      {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071982},
--      {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
-+      {0x0000a2d0, 0x00041983, 0x00041983, 0x00041982, 0x00041982},
-+      {0x0000a2d8, 0x7999a83a, 0x7999a83a, 0x7999a83a, 0x7999a83a},
-       {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
--      {0x0000ae04, 0x00180000, 0x00180000, 0x00180000, 0x00180000},
-+      {0x0000ae04, 0x001c0000, 0x001c0000, 0x001c0000, 0x001c0000},
-       {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000ae1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-       {0x0000ae20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
-@@ -289,21 +292,21 @@ static const u32 ar9340_1p0_baseband_pos
- };
- static const u32 ar9340_1p0_baseband_core[][2] = {
--      /*  Addr     allmodes  */
-+      /* Addr      allmodes  */
-       {0x00009800, 0xafe68e30},
-       {0x00009804, 0xfd14e000},
-       {0x00009808, 0x9c0a9f6b},
-       {0x0000980c, 0x04900000},
--      {0x00009814, 0xb280c00a},
-+      {0x00009814, 0x3280c00a},
-       {0x00009818, 0x00000000},
-       {0x0000981c, 0x00020028},
--      {0x00009834, 0x5f3ca3de},
-+      {0x00009834, 0x6400a190},
-       {0x00009838, 0x0108ecff},
--      {0x0000983c, 0x14750600},
-+      {0x0000983c, 0x14000600},
-       {0x00009880, 0x201fff00},
-       {0x00009884, 0x00001042},
-       {0x000098a4, 0x00200400},
--      {0x000098b0, 0x52440bbe},
-+      {0x000098b0, 0x32840bbe},
-       {0x000098d0, 0x004b6a8e},
-       {0x000098d4, 0x00000820},
-       {0x000098dc, 0x00000000},
-@@ -329,7 +332,6 @@ static const u32 ar9340_1p0_baseband_cor
-       {0x00009e30, 0x06336f77},
-       {0x00009e34, 0x6af6532f},
-       {0x00009e38, 0x0cc80c00},
--      {0x00009e3c, 0xcf946222},
-       {0x00009e40, 0x0d261820},
-       {0x00009e4c, 0x00001004},
-       {0x00009e50, 0x00ff03f1},
-@@ -342,8 +344,6 @@ static const u32 ar9340_1p0_baseband_cor
-       {0x0000a220, 0x00000000},
-       {0x0000a224, 0x00000000},
-       {0x0000a228, 0x10002310},
--      {0x0000a22c, 0x01036a1e},
--      {0x0000a234, 0x10000fff},
-       {0x0000a23c, 0x00000000},
-       {0x0000a244, 0x0c000000},
-       {0x0000a2a0, 0x00000001},
-@@ -351,10 +351,6 @@ static const u32 ar9340_1p0_baseband_cor
-       {0x0000a2c8, 0x00000000},
-       {0x0000a2cc, 0x18c43433},
-       {0x0000a2d4, 0x00000000},
--      {0x0000a2dc, 0x00000000},
--      {0x0000a2e0, 0x00000000},
--      {0x0000a2e4, 0x00000000},
--      {0x0000a2e8, 0x00000000},
-       {0x0000a2ec, 0x00000000},
-       {0x0000a2f0, 0x00000000},
-       {0x0000a2f4, 0x00000000},
-@@ -385,7 +381,7 @@ static const u32 ar9340_1p0_baseband_cor
-       {0x0000a3e8, 0x20202020},
-       {0x0000a3ec, 0x20202020},
-       {0x0000a3f0, 0x00000000},
--      {0x0000a3f4, 0x00000246},
-+      {0x0000a3f4, 0x00000000},
-       {0x0000a3f8, 0x0cdbd380},
-       {0x0000a3fc, 0x000f0f01},
-       {0x0000a400, 0x8fa91f01},
-@@ -402,33 +398,17 @@ static const u32 ar9340_1p0_baseband_cor
-       {0x0000a430, 0x1ce739ce},
-       {0x0000a434, 0x00000000},
-       {0x0000a438, 0x00001801},
--      {0x0000a43c, 0x00000000},
-+      {0x0000a43c, 0x00100000},
-       {0x0000a440, 0x00000000},
-       {0x0000a444, 0x00000000},
--      {0x0000a448, 0x04000080},
-+      {0x0000a448, 0x05000080},
-       {0x0000a44c, 0x00000001},
-       {0x0000a450, 0x00010000},
-       {0x0000a458, 0x00000000},
--      {0x0000a600, 0x00000000},
--      {0x0000a604, 0x00000000},
--      {0x0000a608, 0x00000000},
--      {0x0000a60c, 0x00000000},
--      {0x0000a610, 0x00000000},
--      {0x0000a614, 0x00000000},
--      {0x0000a618, 0x00000000},
--      {0x0000a61c, 0x00000000},
--      {0x0000a620, 0x00000000},
--      {0x0000a624, 0x00000000},
--      {0x0000a628, 0x00000000},
--      {0x0000a62c, 0x00000000},
--      {0x0000a630, 0x00000000},
--      {0x0000a634, 0x00000000},
--      {0x0000a638, 0x00000000},
--      {0x0000a63c, 0x00000000},
-       {0x0000a640, 0x00000000},
-       {0x0000a644, 0x3fad9d74},
-       {0x0000a648, 0x0048060a},
--      {0x0000a64c, 0x00000637},
-+      {0x0000a64c, 0x00003c37},
-       {0x0000a670, 0x03020100},
-       {0x0000a674, 0x09080504},
-       {0x0000a678, 0x0d0c0b0a},
-@@ -451,10 +431,6 @@ static const u32 ar9340_1p0_baseband_cor
-       {0x0000a8f4, 0x00000000},
-       {0x0000b2d0, 0x00000080},
-       {0x0000b2d4, 0x00000000},
--      {0x0000b2dc, 0x00000000},
--      {0x0000b2e0, 0x00000000},
--      {0x0000b2e4, 0x00000000},
--      {0x0000b2e8, 0x00000000},
-       {0x0000b2ec, 0x00000000},
-       {0x0000b2f0, 0x00000000},
-       {0x0000b2f4, 0x00000000},
-@@ -465,80 +441,108 @@ static const u32 ar9340_1p0_baseband_cor
- };
- static const u32 ar9340Modes_high_power_tx_gain_table_1p0[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+      {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+      {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+      {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-+      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a614, 0x01404000, 0x01404000, 0x01404000, 0x01404000},
-+      {0x0000a618, 0x01404501, 0x01404501, 0x01404501, 0x01404501},
-+      {0x0000a61c, 0x02008802, 0x02008802, 0x02008501, 0x02008501},
-+      {0x0000a620, 0x0300cc03, 0x0300cc03, 0x0280ca03, 0x0280ca03},
-+      {0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04},
-+      {0x0000a628, 0x0300cc03, 0x0300cc03, 0x04014c04, 0x04014c04},
-+      {0x0000a62c, 0x03810c03, 0x03810c03, 0x04015005, 0x04015005},
-+      {0x0000a630, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000a634, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000a638, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000a63c, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000b2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+      {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+      {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+      {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-       {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
--      {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
--      {0x0000a508, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x0d002621, 0x0d002621, 0x0b000200, 0x0b000200},
--      {0x0000a510, 0x13004620, 0x13004620, 0x0f000202, 0x0f000202},
--      {0x0000a514, 0x19004a20, 0x19004a20, 0x11000400, 0x11000400},
--      {0x0000a518, 0x1d004e20, 0x1d004e20, 0x15000402, 0x15000402},
--      {0x0000a51c, 0x21005420, 0x21005420, 0x19000404, 0x19000404},
--      {0x0000a520, 0x26005e20, 0x26005e20, 0x1b000603, 0x1b000603},
--      {0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000a02, 0x1f000a02},
--      {0x0000a528, 0x2f005e42, 0x2f005e42, 0x23000a04, 0x23000a04},
--      {0x0000a52c, 0x33005e44, 0x33005e44, 0x26000a20, 0x26000a20},
--      {0x0000a530, 0x38005e65, 0x38005e65, 0x2a000e20, 0x2a000e20},
--      {0x0000a534, 0x3c005e69, 0x3c005e69, 0x2e000e22, 0x2e000e22},
--      {0x0000a538, 0x40005e6b, 0x40005e6b, 0x31000e24, 0x31000e24},
--      {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x34001640, 0x34001640},
--      {0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
--      {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
--      {0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
--      {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83},
--      {0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
--      {0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
--      {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
--      {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x50001ce9, 0x50001ce9},
--      {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x54001ceb, 0x54001ceb},
--      {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-+      {0x0000a504, 0x04002222, 0x04002222, 0x02000001, 0x02000001},
-+      {0x0000a508, 0x09002421, 0x09002421, 0x05000003, 0x05000003},
-+      {0x0000a50c, 0x0d002621, 0x0d002621, 0x0a000005, 0x0a000005},
-+      {0x0000a510, 0x13004620, 0x13004620, 0x0e000201, 0x0e000201},
-+      {0x0000a514, 0x19004a20, 0x19004a20, 0x11000203, 0x11000203},
-+      {0x0000a518, 0x1d004e20, 0x1d004e20, 0x14000401, 0x14000401},
-+      {0x0000a51c, 0x21005420, 0x21005420, 0x18000403, 0x18000403},
-+      {0x0000a520, 0x26005e20, 0x26005e20, 0x1b000602, 0x1b000602},
-+      {0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000802, 0x1f000802},
-+      {0x0000a528, 0x2f005e42, 0x2f005e42, 0x21000620, 0x21000620},
-+      {0x0000a52c, 0x33005e44, 0x33005e44, 0x25000820, 0x25000820},
-+      {0x0000a530, 0x38005e65, 0x38005e65, 0x29000822, 0x29000822},
-+      {0x0000a534, 0x3c005e69, 0x3c005e69, 0x2d000824, 0x2d000824},
-+      {0x0000a538, 0x40005e6b, 0x40005e6b, 0x30000828, 0x30000828},
-+      {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x3400082a, 0x3400082a},
-+      {0x0000a540, 0x49005e72, 0x49005e72, 0x38000849, 0x38000849},
-+      {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b000a2c, 0x3b000a2c},
-+      {0x0000a548, 0x53005f12, 0x53005f12, 0x3e000e2b, 0x3e000e2b},
-+      {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42000e2d, 0x42000e2d},
-+      {0x0000a550, 0x5e025f12, 0x5e025f12, 0x4500124a, 0x4500124a},
-+      {0x0000a554, 0x61027f12, 0x61027f12, 0x4900124c, 0x4900124c},
-+      {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c00126c, 0x4c00126c},
-+      {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x4f00128c, 0x4f00128c},
-+      {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x52001290, 0x52001290},
-+      {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+      {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+      {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+      {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+      {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+      {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+      {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-       {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000},
--      {0x0000a584, 0x04802222, 0x04802222, 0x04800002, 0x04800002},
--      {0x0000a588, 0x09802421, 0x09802421, 0x08800004, 0x08800004},
--      {0x0000a58c, 0x0d802621, 0x0d802621, 0x0b800200, 0x0b800200},
--      {0x0000a590, 0x13804620, 0x13804620, 0x0f800202, 0x0f800202},
--      {0x0000a594, 0x19804a20, 0x19804a20, 0x11800400, 0x11800400},
--      {0x0000a598, 0x1d804e20, 0x1d804e20, 0x15800402, 0x15800402},
--      {0x0000a59c, 0x21805420, 0x21805420, 0x19800404, 0x19800404},
--      {0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800603, 0x1b800603},
--      {0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800a02, 0x1f800a02},
--      {0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x23800a04, 0x23800a04},
--      {0x0000a5ac, 0x33805e44, 0x33805e44, 0x26800a20, 0x26800a20},
--      {0x0000a5b0, 0x38805e65, 0x38805e65, 0x2a800e20, 0x2a800e20},
--      {0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2e800e22, 0x2e800e22},
--      {0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x31800e24, 0x31800e24},
--      {0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x34801640, 0x34801640},
--      {0x0000a5c0, 0x49805e72, 0x49805e72, 0x38801660, 0x38801660},
--      {0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b801861, 0x3b801861},
--      {0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e801a81, 0x3e801a81},
--      {0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42801a83, 0x42801a83},
--      {0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x44801c84, 0x44801c84},
--      {0x0000a5d4, 0x61827f12, 0x61827f12, 0x48801ce3, 0x48801ce3},
--      {0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c801ce5, 0x4c801ce5},
--      {0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x50801ce9, 0x50801ce9},
--      {0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x54801ceb, 0x54801ceb},
--      {0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x00016044, 0x056db2db, 0x056db2db, 0x056db2db, 0x056db2db},
-+      {0x0000a584, 0x04802222, 0x04802222, 0x02800001, 0x02800001},
-+      {0x0000a588, 0x09802421, 0x09802421, 0x05800003, 0x05800003},
-+      {0x0000a58c, 0x0d802621, 0x0d802621, 0x0a800005, 0x0a800005},
-+      {0x0000a590, 0x13804620, 0x13804620, 0x0e800201, 0x0e800201},
-+      {0x0000a594, 0x19804a20, 0x19804a20, 0x11800203, 0x11800203},
-+      {0x0000a598, 0x1d804e20, 0x1d804e20, 0x14800401, 0x14800401},
-+      {0x0000a59c, 0x21805420, 0x21805420, 0x18800403, 0x18800403},
-+      {0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800602, 0x1b800602},
-+      {0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800802, 0x1f800802},
-+      {0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x21800620, 0x21800620},
-+      {0x0000a5ac, 0x33805e44, 0x33805e44, 0x25800820, 0x25800820},
-+      {0x0000a5b0, 0x38805e65, 0x38805e65, 0x29800822, 0x29800822},
-+      {0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2d800824, 0x2d800824},
-+      {0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x30800828, 0x30800828},
-+      {0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x3480082a, 0x3480082a},
-+      {0x0000a5c0, 0x49805e72, 0x49805e72, 0x38800849, 0x38800849},
-+      {0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b800a2c, 0x3b800a2c},
-+      {0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e800e2b, 0x3e800e2b},
-+      {0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42800e2d, 0x42800e2d},
-+      {0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x4580124a, 0x4580124a},
-+      {0x0000a5d4, 0x61827f12, 0x61827f12, 0x4980124c, 0x4980124c},
-+      {0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c80126c, 0x4c80126c},
-+      {0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x4f80128c, 0x4f80128c},
-+      {0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x52801290, 0x52801290},
-+      {0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+      {0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+      {0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+      {0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+      {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+      {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+      {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+      {0x00016044, 0x056db2db, 0x056db2db, 0x022492db, 0x022492db},
-       {0x00016048, 0x24925266, 0x24925266, 0x24925266, 0x24925266},
--      {0x00016444, 0x056db2db, 0x056db2db, 0x056db2db, 0x056db2db},
-+      {0x00016444, 0x056db2db, 0x056db2db, 0x022492db, 0x022492db},
-       {0x00016448, 0x24925266, 0x24925266, 0x24925266, 0x24925266},
- };
- static const u32 ar9340Modes_high_ob_db_tx_gain_table_1p0[][5] = {
--      /*  Addr       5G_HT20    5G_HT40     2G_HT40     2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x0000a2dc, 0x01feee00, 0x01feee00, 0x03aaa352, 0x03aaa352},
-+      {0x0000a2e0, 0x0000f000, 0x0000f000, 0x03ccc584, 0x03ccc584},
-+      {0x0000a2e4, 0x01ff0000, 0x01ff0000, 0x03f0f800, 0x03f0f800},
-+      {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-       {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
-       {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-@@ -559,7 +563,7 @@ static const u32 ar9340Modes_high_ob_db_
-       {0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
-       {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
-       {0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
--      {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83},
-+      {0x0000a54c, 0x59025eb2, 0x59025eb2, 0x42001a83, 0x42001a83},
-       {0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
-       {0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
-       {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
-@@ -604,13 +608,43 @@ static const u32 ar9340Modes_high_ob_db_
-       {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-+      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a610, 0x00804000, 0x00804000, 0x00000000, 0x00000000},
-+      {0x0000a614, 0x00804201, 0x00804201, 0x01404000, 0x01404000},
-+      {0x0000a618, 0x0280c802, 0x0280c802, 0x01404501, 0x01404501},
-+      {0x0000a61c, 0x0280ca03, 0x0280ca03, 0x02008501, 0x02008501},
-+      {0x0000a620, 0x04c15104, 0x04c15104, 0x0280ca03, 0x0280ca03},
-+      {0x0000a624, 0x04c15305, 0x04c15305, 0x03010c04, 0x03010c04},
-+      {0x0000a628, 0x04c15305, 0x04c15305, 0x04014c04, 0x04014c04},
-+      {0x0000a62c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+      {0x0000a630, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+      {0x0000a634, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+      {0x0000a638, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+      {0x0000a63c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+      {0x0000b2dc, 0x01feee00, 0x01feee00, 0x03aaa352, 0x03aaa352},
-+      {0x0000b2e0, 0x0000f000, 0x0000f000, 0x03ccc584, 0x03ccc584},
-+      {0x0000b2e4, 0x01ff0000, 0x01ff0000, 0x03f0f800, 0x03f0f800},
-+      {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-       {0x00016044, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4},
--      {0x00016048, 0x8e481266, 0x8e481266, 0x8e481266, 0x8e481266},
-+      {0x00016048, 0x8e481666, 0x8e481666, 0x8e481266, 0x8e481266},
-+      {0x00016280, 0x01000015, 0x01000015, 0x01001015, 0x01001015},
-       {0x00016444, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4},
--      {0x00016448, 0x8e481266, 0x8e481266, 0x8e481266, 0x8e481266},
-+      {0x00016448, 0x8e481666, 0x8e481666, 0x8e481266, 0x8e481266},
- };
-+
- static const u32 ar9340Modes_ub124_tx_gain_table_1p0[][5] = {
--      /*  Addr      5G_HT20      5G_HT40     2G_HT40    2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
-+      {0x00009820, 0x206a022e, 0x206a022e, 0x206a00ae, 0x206a00ae},
-+      {0x00009830, 0x0000059c, 0x0000059c, 0x0000059c, 0x0000059c},
-+      {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec82d2e, 0x7ec82d2e},
-+      {0x0000a2dc, 0xfef5d402, 0xfef5d402, 0xfdab5b52, 0xfdab5b52},
-+      {0x0000a2e0, 0xfe896600, 0xfe896600, 0xfd339c84, 0xfd339c84},
-+      {0x0000a2e4, 0xff01f800, 0xff01f800, 0xfec3e000, 0xfec3e000},
-+      {0x0000a2e8, 0xfffe0000, 0xfffe0000, 0xfffc0000, 0xfffc0000},
-       {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
-       {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-@@ -676,15 +710,34 @@ static const u32 ar9340Modes_ub124_tx_ga
-       {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x00016044, 0x036db2db, 0x036db2db, 0x036db2db, 0x036db2db},
--      {0x00016048, 0x69b65266, 0x69b65266, 0x69b65266, 0x69b65266},
--      {0x00016444, 0x036db2db, 0x036db2db, 0x036db2db, 0x036db2db},
--      {0x00016448, 0x69b65266, 0x69b65266, 0x69b65266, 0x69b65266},
-+      {0x00016044, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4},
-+      {0x00016048, 0x8e480086, 0x8e480086, 0x8e480086, 0x8e480086},
-+      {0x00016444, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4},
-+      {0x00016448, 0x8e480086, 0x8e480086, 0x8e480086, 0x8e480086},
-+      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a610, 0x00804000, 0x00804000, 0x00000000, 0x00000000},
-+      {0x0000a614, 0x00804201, 0x00804201, 0x01404000, 0x01404000},
-+      {0x0000a618, 0x0280c802, 0x0280c802, 0x01404501, 0x01404501},
-+      {0x0000a61c, 0x0280ca03, 0x0280ca03, 0x02008501, 0x02008501},
-+      {0x0000a620, 0x04c15104, 0x04c15104, 0x0280ca03, 0x0280ca03},
-+      {0x0000a624, 0x04c15305, 0x04c15305, 0x03010c04, 0x03010c04},
-+      {0x0000a628, 0x04c15305, 0x04c15305, 0x04014c04, 0x04014c04},
-+      {0x0000a62c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+      {0x0000a630, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+      {0x0000a634, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+      {0x0000a638, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+      {0x0000a63c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-+      {0x0000b2dc, 0xfef5d402, 0xfef5d402, 0xfdab5b52, 0xfdab5b52},
-+      {0x0000b2e0, 0xfe896600, 0xfe896600, 0xfd339c84, 0xfd339c84},
-+      {0x0000b2e4, 0xff01f800, 0xff01f800, 0xfec3e000, 0xfec3e000},
-+      {0x0000b2e8, 0xfffe0000, 0xfffe0000, 0xfffc0000, 0xfffc0000},
- };
--
- static const u32 ar9340Common_rx_gain_table_1p0[][2] = {
--      /*   Addr     allmodes */
-+      /* Addr      allmodes  */
-       {0x0000a000, 0x00010000},
-       {0x0000a004, 0x00030002},
-       {0x0000a008, 0x00050004},
-@@ -845,14 +898,14 @@ static const u32 ar9340Common_rx_gain_ta
-       {0x0000b074, 0x00000000},
-       {0x0000b078, 0x00000000},
-       {0x0000b07c, 0x00000000},
--      {0x0000b080, 0x32323232},
--      {0x0000b084, 0x2f2f3232},
--      {0x0000b088, 0x23282a2d},
--      {0x0000b08c, 0x1c1e2123},
--      {0x0000b090, 0x14171919},
--      {0x0000b094, 0x0e0e1214},
--      {0x0000b098, 0x03050707},
--      {0x0000b09c, 0x00030303},
-+      {0x0000b080, 0x23232323},
-+      {0x0000b084, 0x21232323},
-+      {0x0000b088, 0x19191c1e},
-+      {0x0000b08c, 0x12141417},
-+      {0x0000b090, 0x07070e0e},
-+      {0x0000b094, 0x03030305},
-+      {0x0000b098, 0x00000003},
-+      {0x0000b09c, 0x00000000},
-       {0x0000b0a0, 0x00000000},
-       {0x0000b0a4, 0x00000000},
-       {0x0000b0a8, 0x00000000},
-@@ -944,7 +997,11 @@ static const u32 ar9340Common_rx_gain_ta
- };
- static const u32 ar9340Modes_low_ob_db_tx_gain_table_1p0[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+      {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+      {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+      {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-       {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
-@@ -952,8 +1009,8 @@ static const u32 ar9340Modes_low_ob_db_t
-       {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
-       {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
-       {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
--      {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402},
--      {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404},
-+      {0x0000a518, 0x21002220, 0x21002220, 0x16000402, 0x16000402},
-+      {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404},
-       {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
-       {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
-       {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
-@@ -965,19 +1022,19 @@ static const u32 ar9340Modes_low_ob_db_t
-       {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
-       {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861},
-       {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81},
--      {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83},
--      {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84},
--      {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3},
--      {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5},
--      {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9},
--      {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb},
--      {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
--      {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
--      {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
--      {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
--      {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
--      {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
--      {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-+      {0x0000a54c, 0x5c02486b, 0x5c02486b, 0x47001a83, 0x47001a83},
-+      {0x0000a550, 0x61024a6c, 0x61024a6c, 0x4a001c84, 0x4a001c84},
-+      {0x0000a554, 0x66026a6c, 0x66026a6c, 0x4e001ce3, 0x4e001ce3},
-+      {0x0000a558, 0x6b026e6c, 0x6b026e6c, 0x52001ce5, 0x52001ce5},
-+      {0x0000a55c, 0x7002708c, 0x7002708c, 0x56001ce9, 0x56001ce9},
-+      {0x0000a560, 0x7302b08a, 0x7302b08a, 0x5a001ceb, 0x5a001ceb},
-+      {0x0000a564, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-+      {0x0000a568, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-+      {0x0000a56c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-+      {0x0000a570, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-+      {0x0000a574, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-+      {0x0000a578, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-+      {0x0000a57c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
-       {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
-       {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
-@@ -1010,14 +1067,40 @@ static const u32 ar9340Modes_low_ob_db_t
-       {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-+      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a614, 0x01404000, 0x01404000, 0x01404000, 0x01404000},
-+      {0x0000a618, 0x01404501, 0x01404501, 0x01404501, 0x01404501},
-+      {0x0000a61c, 0x02008802, 0x02008802, 0x02008501, 0x02008501},
-+      {0x0000a620, 0x0300cc03, 0x0300cc03, 0x0280ca03, 0x0280ca03},
-+      {0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04},
-+      {0x0000a628, 0x0300cc03, 0x0300cc03, 0x04014c04, 0x04014c04},
-+      {0x0000a62c, 0x03810c03, 0x03810c03, 0x04015005, 0x04015005},
-+      {0x0000a630, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000a634, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000a638, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000a63c, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000b2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+      {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+      {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+      {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-       {0x00016044, 0x056db2db, 0x056db2db, 0x056db2db, 0x056db2db},
--      {0x00016048, 0x24925266, 0x24925266, 0x24925266, 0x24925266},
-+      {0x00016048, 0x24925666, 0x24925666, 0x24925266, 0x24925266},
-+      {0x00016280, 0x01000015, 0x01000015, 0x01001015, 0x01001015},
-+      {0x00016288, 0xf0318000, 0xf0318000, 0xf0318000, 0xf0318000},
-       {0x00016444, 0x056db2db, 0x056db2db, 0x056db2db, 0x056db2db},
--      {0x00016448, 0x24925266, 0x24925266, 0x24925266, 0x24925266},
-+      {0x00016448, 0x24925666, 0x24925666, 0x24925266, 0x24925266},
- };
- static const u32 ar9340Modes_mixed_ob_db_tx_gain_table_1p0[][5] = {
--      /*  Addr       5G_HT20     5G_HT40     2G_HT40    2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+      {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+      {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+      {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-       {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
-@@ -1025,8 +1108,8 @@ static const u32 ar9340Modes_mixed_ob_db
-       {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
-       {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
-       {0x0000a514, 0x1c000223, 0x1c000223, 0x11000400, 0x11000400},
--      {0x0000a518, 0x21020220, 0x21020220, 0x15000402, 0x15000402},
--      {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404},
-+      {0x0000a518, 0x21002220, 0x21002220, 0x15000402, 0x15000402},
-+      {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404},
-       {0x0000a520, 0x2b022220, 0x2b022220, 0x1b000603, 0x1b000603},
-       {0x0000a524, 0x2f022222, 0x2f022222, 0x1f000a02, 0x1f000a02},
-       {0x0000a528, 0x34022225, 0x34022225, 0x23000a04, 0x23000a04},
-@@ -1038,19 +1121,19 @@ static const u32 ar9340Modes_mixed_ob_db
-       {0x0000a540, 0x4e02246c, 0x4e02246c, 0x38001660, 0x38001660},
-       {0x0000a544, 0x5302266c, 0x5302266c, 0x3b001861, 0x3b001861},
-       {0x0000a548, 0x5702286c, 0x5702286c, 0x3e001a81, 0x3e001a81},
--      {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x42001a83, 0x42001a83},
--      {0x0000a550, 0x61042a6c, 0x61042a6c, 0x44001c84, 0x44001c84},
--      {0x0000a554, 0x66062a6c, 0x66062a6c, 0x48001ce3, 0x48001ce3},
--      {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x4c001ce5, 0x4c001ce5},
--      {0x0000a55c, 0x7006308c, 0x7006308c, 0x50001ce9, 0x50001ce9},
--      {0x0000a560, 0x730a308a, 0x730a308a, 0x54001ceb, 0x54001ceb},
--      {0x0000a564, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
--      {0x0000a568, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
--      {0x0000a56c, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
--      {0x0000a570, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
--      {0x0000a574, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
--      {0x0000a578, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
--      {0x0000a57c, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
-+      {0x0000a54c, 0x5c02486b, 0x5c02486b, 0x42001a83, 0x42001a83},
-+      {0x0000a550, 0x61024a6c, 0x61024a6c, 0x44001c84, 0x44001c84},
-+      {0x0000a554, 0x66026a6c, 0x66026a6c, 0x48001ce3, 0x48001ce3},
-+      {0x0000a558, 0x6b026e6c, 0x6b026e6c, 0x4c001ce5, 0x4c001ce5},
-+      {0x0000a55c, 0x7002708c, 0x7002708c, 0x50001ce9, 0x50001ce9},
-+      {0x0000a560, 0x7302b08a, 0x7302b08a, 0x54001ceb, 0x54001ceb},
-+      {0x0000a564, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+      {0x0000a568, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+      {0x0000a56c, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+      {0x0000a570, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+      {0x0000a574, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+      {0x0000a578, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+      {0x0000a57c, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-       {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
-       {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
-       {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
-@@ -1083,14 +1166,36 @@ static const u32 ar9340Modes_mixed_ob_db
-       {0x0000a5f4, 0x778a308c, 0x778a308c, 0x56801eec, 0x56801eec},
-       {0x0000a5f8, 0x778a308c, 0x778a308c, 0x56801eec, 0x56801eec},
-       {0x0000a5fc, 0x778a308c, 0x778a308c, 0x56801eec, 0x56801eec},
-+      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a614, 0x01404000, 0x01404000, 0x01404000, 0x01404000},
-+      {0x0000a618, 0x01404501, 0x01404501, 0x01404501, 0x01404501},
-+      {0x0000a61c, 0x02008802, 0x02008802, 0x02008501, 0x02008501},
-+      {0x0000a620, 0x0300cc03, 0x0300cc03, 0x0280ca03, 0x0280ca03},
-+      {0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04},
-+      {0x0000a628, 0x0300cc03, 0x0300cc03, 0x04014c04, 0x04014c04},
-+      {0x0000a62c, 0x03810c03, 0x03810c03, 0x04015005, 0x04015005},
-+      {0x0000a630, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000a634, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000a638, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000a63c, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-+      {0x0000b2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+      {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+      {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+      {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-       {0x00016044, 0x056db2db, 0x056db2db, 0x03b6d2e4, 0x03b6d2e4},
--      {0x00016048, 0x24927266, 0x24927266, 0x8e483266, 0x8e483266},
-+      {0x00016048, 0x24925666, 0x24925666, 0x8e481266, 0x8e481266},
-+      {0x00016280, 0x01000015, 0x01000015, 0x01001015, 0x01001015},
-+      {0x00016288, 0x30318000, 0x30318000, 0x00318000, 0x00318000},
-       {0x00016444, 0x056db2db, 0x056db2db, 0x03b6d2e4, 0x03b6d2e4},
--      {0x00016448, 0x24927266, 0x24927266, 0x8e482266, 0x8e482266},
-+      {0x00016448, 0x24925666, 0x24925666, 0x8e481266, 0x8e481266},
- };
- static const u32 ar9340_1p0_mac_core[][2] = {
--      /*    Addr        allmodes        */
-+      /* Addr      allmodes  */
-       {0x00000008, 0x00000000},
-       {0x00000030, 0x00020085},
-       {0x00000034, 0x00000005},
-@@ -1119,6 +1224,7 @@ static const u32 ar9340_1p0_mac_core[][2
-       {0x00008004, 0x00000000},
-       {0x00008008, 0x00000000},
-       {0x0000800c, 0x00000000},
-+      {0x00008010, 0x00080800},
-       {0x00008018, 0x00000000},
-       {0x00008020, 0x00000000},
-       {0x00008038, 0x00000000},
-@@ -1146,7 +1252,7 @@ static const u32 ar9340_1p0_mac_core[][2
-       {0x000080bc, 0x00000000},
-       {0x000080c0, 0x2a800000},
-       {0x000080c4, 0x06900168},
--      {0x000080c8, 0x13881c20},
-+      {0x000080c8, 0x13881c22},
-       {0x000080cc, 0x01f40000},
-       {0x000080d0, 0x00252500},
-       {0x000080d4, 0x00a00000},
-@@ -1250,11 +1356,11 @@ static const u32 ar9340_1p0_mac_core[][2
-       {0x000083c4, 0x00000000},
-       {0x000083c8, 0x00000000},
-       {0x000083cc, 0x00000200},
--      {0x000083d0, 0x000301ff},
-+      {0x000083d0, 0x000101ff},
- };
- static const u32 ar9340Common_wo_xlna_rx_gain_table_1p0[][2] = {
--      /*    Addr        allmodes        */
-+      /* Addr      allmodes  */
-       {0x0000a000, 0x00010000},
-       {0x0000a004, 0x00030002},
-       {0x0000a008, 0x00050004},
-@@ -1514,12 +1620,11 @@ static const u32 ar9340Common_wo_xlna_rx
- };
- static const u32 ar9340_1p0_soc_preamble[][2] = {
--      /*    Addr        allmodes        */
--      {0x000040a4, 0x00a0c1c9},
-+      /* Addr      allmodes  */
-       {0x00007008, 0x00000000},
-       {0x00007020, 0x00000000},
-       {0x00007034, 0x00000002},
-       {0x00007038, 0x000004c2},
- };
--#endif
-+#endif /* INITVALS_9340_1P0_H */
diff --git a/package/mac80211/patches/566-ath9k_deduplicate_initvals.patch b/package/mac80211/patches/566-ath9k_deduplicate_initvals.patch
deleted file mode 100644 (file)
index a3c918b..0000000
+++ /dev/null
@@ -1,3745 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-@@ -1,5 +1,6 @@
- /*
-  * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros Inc.
-  *
-  * Permission to use, copy, modify, and/or distribute this software for any
-  * purpose with or without fee is hereby granted, provided that the above
---- a/drivers/net/wireless/ath/ath9k/ar9330_1p1_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9330_1p1_initvals.h
-@@ -337,12 +337,7 @@ static const u32 ar9331_modes_low_ob_db_
-       {0x00016284, 0x14d3f000, 0x14d3f000, 0x14d3f000, 0x14d3f000},
- };
--static const u32 ar9331_1p1_baseband_core_txfir_coeff_japan_2484[][2] = {
--      /* Addr      allmodes  */
--      {0x0000a398, 0x00000000},
--      {0x0000a39c, 0x6f7f0301},
--      {0x0000a3a0, 0xca9228ee},
--};
-+#define ar9331_1p1_baseband_core_txfir_coeff_japan_2484 ar9462_2p0_baseband_core_txfir_coeff_japan_2484
- static const u32 ar9331_1p1_xtal_25M[][2] = {
-       /* Addr      allmodes  */
-@@ -783,17 +778,7 @@ static const u32 ar9331_modes_high_power
-       {0x00016284, 0x14d3f000, 0x14d3f000, 0x14d3f000, 0x14d3f000},
- };
--static const u32 ar9331_1p1_mac_postamble[][5] = {
--      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
--      {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
--      {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
--      {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
--      {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
--      {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
--      {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
--      {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
--      {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
--};
-+#define ar9331_1p1_mac_postamble ar9300_2p2_mac_postamble
- static const u32 ar9331_1p1_soc_preamble[][2] = {
-       /* Addr      allmodes  */
-@@ -1112,38 +1097,4 @@ static const u32 ar9331_common_tx_gain_o
-       {0x00000000},
- };
--static const u32 ar9331_1p1_chansel_xtal_25M[] = {
--      0x0101479e,
--      0x0101d027,
--      0x010258af,
--      0x0102e138,
--      0x010369c0,
--      0x0103f249,
--      0x01047ad1,
--      0x0105035a,
--      0x01058be2,
--      0x0106146b,
--      0x01069cf3,
--      0x0107257c,
--      0x0107ae04,
--      0x0108f5b2,
--};
--
--static const u32 ar9331_1p1_chansel_xtal_40M[] = {
--      0x00a0ccbe,
--      0x00a12213,
--      0x00a17769,
--      0x00a1ccbe,
--      0x00a22213,
--      0x00a27769,
--      0x00a2ccbe,
--      0x00a32213,
--      0x00a37769,
--      0x00a3ccbe,
--      0x00a42213,
--      0x00a47769,
--      0x00a4ccbe,
--      0x00a5998b,
--};
--
- #endif /* INITVALS_9330_1P1_H */
---- a/drivers/net/wireless/ath/ath9k/ar9330_1p2_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9330_1p2_initvals.h
-@@ -1,5 +1,6 @@
- /*
-- * Copyright (c) 2011 Atheros Communications Inc.
-+ * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros Inc.
-  *
-  * Permission to use, copy, modify, and/or distribute this software for any
-  * purpose with or without fee is hereby granted, provided that the above
-@@ -17,8 +18,8 @@
- #ifndef INITVALS_9330_1P2_H
- #define INITVALS_9330_1P2_H
--static const u32 ar9331_modes_lowest_ob_db_tx_gain_1p2[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
-+static const u32 ar9331_modes_high_ob_db_tx_gain_1p2[][5] = {
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d7, 0x000050d7},
-       {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
-       {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-@@ -102,8 +103,14 @@ static const u32 ar9331_modes_lowest_ob_
-       {0x0000a63c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
- };
-+#define ar9331_modes_high_power_tx_gain_1p2 ar9331_modes_high_ob_db_tx_gain_1p2
-+
-+#define ar9331_modes_low_ob_db_tx_gain_1p2 ar9331_modes_high_power_tx_gain_1p2
-+
-+#define ar9331_modes_lowest_ob_db_tx_gain_1p2 ar9331_modes_low_ob_db_tx_gain_1p2
-+
- static const u32 ar9331_1p2_baseband_postamble[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
-       {0x00009820, 0x206a002e, 0x206a002e, 0x206a002e, 0x206a002e},
-       {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-@@ -147,191 +154,6 @@ static const u32 ar9331_1p2_baseband_pos
-       {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- };
--static const u32 ar9331_modes_high_ob_db_tx_gain_1p2[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
--      {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d7, 0x000050d7},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x23000a00, 0x23000a00},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x27000a02, 0x27000a02},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2b000a04, 0x2b000a04},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x3f001620, 0x3f001620},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x41001621, 0x41001621},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x44001640, 0x44001640},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x46001641, 0x46001641},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x48001642, 0x48001642},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x4b001644, 0x4b001644},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x4e001a81, 0x4e001a81},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x51001a83, 0x51001a83},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x54001c84, 0x54001c84},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x57001ce3, 0x57001ce3},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x5b001ce5, 0x5b001ce5},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5f001ce9, 0x5f001ce9},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x66001eec, 0x66001eec},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x66001eec, 0x66001eec},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a580, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a584, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a588, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a58c, 0x11062202, 0x11062202, 0x0b000200, 0x0b000200},
--      {0x0000a590, 0x17022e00, 0x17022e00, 0x0f000202, 0x0f000202},
--      {0x0000a594, 0x1d000ec2, 0x1d000ec2, 0x11000400, 0x11000400},
--      {0x0000a598, 0x25020ec0, 0x25020ec0, 0x15000402, 0x15000402},
--      {0x0000a59c, 0x2b020ec3, 0x2b020ec3, 0x19000404, 0x19000404},
--      {0x0000a5a0, 0x2f001f04, 0x2f001f04, 0x1b000603, 0x1b000603},
--      {0x0000a5a4, 0x35001fc4, 0x35001fc4, 0x1f000a02, 0x1f000a02},
--      {0x0000a5a8, 0x3c022f04, 0x3c022f04, 0x23000a04, 0x23000a04},
--      {0x0000a5ac, 0x41023e85, 0x41023e85, 0x26000a20, 0x26000a20},
--      {0x0000a5b0, 0x48023ec6, 0x48023ec6, 0x2a000e20, 0x2a000e20},
--      {0x0000a5b4, 0x4d023f01, 0x4d023f01, 0x2e000e22, 0x2e000e22},
--      {0x0000a5b8, 0x53023f4b, 0x53023f4b, 0x31000e24, 0x31000e24},
--      {0x0000a5bc, 0x5a027f09, 0x5a027f09, 0x34001640, 0x34001640},
--      {0x0000a5c0, 0x5f027fc9, 0x5f027fc9, 0x38001660, 0x38001660},
--      {0x0000a5c4, 0x6502feca, 0x6502feca, 0x3b001861, 0x3b001861},
--      {0x0000a5c8, 0x6b02ff4a, 0x6b02ff4a, 0x3e001a81, 0x3e001a81},
--      {0x0000a5cc, 0x7203feca, 0x7203feca, 0x42001a83, 0x42001a83},
--      {0x0000a5d0, 0x7703ff0b, 0x7703ff0b, 0x44001c84, 0x44001c84},
--      {0x0000a5d4, 0x7d06ffcb, 0x7d06ffcb, 0x48001ce3, 0x48001ce3},
--      {0x0000a5d8, 0x8407ff0b, 0x8407ff0b, 0x4c001ce5, 0x4c001ce5},
--      {0x0000a5dc, 0x8907ffcb, 0x8907ffcb, 0x50001ce9, 0x50001ce9},
--      {0x0000a5e0, 0x900fff0b, 0x900fff0b, 0x54001ceb, 0x54001ceb},
--      {0x0000a5e4, 0x960fffcb, 0x960fffcb, 0x56001eec, 0x56001eec},
--      {0x0000a5e8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5ec, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5f0, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5f4, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5f8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5fc, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a614, 0x01404000, 0x01404000, 0x01404000, 0x01404000},
--      {0x0000a618, 0x02008501, 0x02008501, 0x02008501, 0x02008501},
--      {0x0000a61c, 0x02008802, 0x02008802, 0x02008802, 0x02008802},
--      {0x0000a620, 0x0300c802, 0x0300c802, 0x0300c802, 0x0300c802},
--      {0x0000a624, 0x0300cc03, 0x0300cc03, 0x0300cc03, 0x0300cc03},
--      {0x0000a628, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a62c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a630, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a634, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a638, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a63c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--};
--
--static const u32 ar9331_modes_low_ob_db_tx_gain_1p2[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
--      {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d7, 0x000050d7},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x23000a00, 0x23000a00},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x27000a02, 0x27000a02},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2b000a04, 0x2b000a04},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x3f001620, 0x3f001620},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x41001621, 0x41001621},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x44001640, 0x44001640},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x46001641, 0x46001641},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x48001642, 0x48001642},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x4b001644, 0x4b001644},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x4e001a81, 0x4e001a81},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x51001a83, 0x51001a83},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x54001c84, 0x54001c84},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x57001ce3, 0x57001ce3},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x5b001ce5, 0x5b001ce5},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5f001ce9, 0x5f001ce9},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x66001eec, 0x66001eec},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x66001eec, 0x66001eec},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a580, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a584, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a588, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a58c, 0x11062202, 0x11062202, 0x0b000200, 0x0b000200},
--      {0x0000a590, 0x17022e00, 0x17022e00, 0x0f000202, 0x0f000202},
--      {0x0000a594, 0x1d000ec2, 0x1d000ec2, 0x11000400, 0x11000400},
--      {0x0000a598, 0x25020ec0, 0x25020ec0, 0x15000402, 0x15000402},
--      {0x0000a59c, 0x2b020ec3, 0x2b020ec3, 0x19000404, 0x19000404},
--      {0x0000a5a0, 0x2f001f04, 0x2f001f04, 0x1b000603, 0x1b000603},
--      {0x0000a5a4, 0x35001fc4, 0x35001fc4, 0x1f000a02, 0x1f000a02},
--      {0x0000a5a8, 0x3c022f04, 0x3c022f04, 0x23000a04, 0x23000a04},
--      {0x0000a5ac, 0x41023e85, 0x41023e85, 0x26000a20, 0x26000a20},
--      {0x0000a5b0, 0x48023ec6, 0x48023ec6, 0x2a000e20, 0x2a000e20},
--      {0x0000a5b4, 0x4d023f01, 0x4d023f01, 0x2e000e22, 0x2e000e22},
--      {0x0000a5b8, 0x53023f4b, 0x53023f4b, 0x31000e24, 0x31000e24},
--      {0x0000a5bc, 0x5a027f09, 0x5a027f09, 0x34001640, 0x34001640},
--      {0x0000a5c0, 0x5f027fc9, 0x5f027fc9, 0x38001660, 0x38001660},
--      {0x0000a5c4, 0x6502feca, 0x6502feca, 0x3b001861, 0x3b001861},
--      {0x0000a5c8, 0x6b02ff4a, 0x6b02ff4a, 0x3e001a81, 0x3e001a81},
--      {0x0000a5cc, 0x7203feca, 0x7203feca, 0x42001a83, 0x42001a83},
--      {0x0000a5d0, 0x7703ff0b, 0x7703ff0b, 0x44001c84, 0x44001c84},
--      {0x0000a5d4, 0x7d06ffcb, 0x7d06ffcb, 0x48001ce3, 0x48001ce3},
--      {0x0000a5d8, 0x8407ff0b, 0x8407ff0b, 0x4c001ce5, 0x4c001ce5},
--      {0x0000a5dc, 0x8907ffcb, 0x8907ffcb, 0x50001ce9, 0x50001ce9},
--      {0x0000a5e0, 0x900fff0b, 0x900fff0b, 0x54001ceb, 0x54001ceb},
--      {0x0000a5e4, 0x960fffcb, 0x960fffcb, 0x56001eec, 0x56001eec},
--      {0x0000a5e8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5ec, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5f0, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5f4, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5f8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5fc, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a614, 0x01404000, 0x01404000, 0x01404000, 0x01404000},
--      {0x0000a618, 0x02008501, 0x02008501, 0x02008501, 0x02008501},
--      {0x0000a61c, 0x02008802, 0x02008802, 0x02008802, 0x02008802},
--      {0x0000a620, 0x0300c802, 0x0300c802, 0x0300c802, 0x0300c802},
--      {0x0000a624, 0x0300cc03, 0x0300cc03, 0x0300cc03, 0x0300cc03},
--      {0x0000a628, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a62c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a630, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a634, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a638, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a63c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--};
--
--static const u32 ar9331_1p2_baseband_core_txfir_coeff_japan_2484[][2] = {
--      /* Addr      allmodes  */
--      {0x0000a398, 0x00000000},
--      {0x0000a39c, 0x6f7f0301},
--      {0x0000a3a0, 0xca9228ee},
--};
--
--static const u32 ar9331_1p2_xtal_25M[][2] = {
--      /* Addr      allmodes  */
--      {0x00007038, 0x000002f8},
--      {0x00008244, 0x0010f3d7},
--      {0x0000824c, 0x0001e7ae},
--      {0x0001609c, 0x0f508f29},
--};
--
- static const u32 ar9331_1p2_radio_core[][2] = {
-       /* Addr      allmodes  */
-       {0x00016000, 0x36db6db6},
-@@ -397,684 +219,24 @@ static const u32 ar9331_1p2_radio_core[]
-       {0x000163d4, 0x00000000},
- };
--static const u32 ar9331_1p2_soc_postamble[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
--      {0x00007010, 0x00000022, 0x00000022, 0x00000022, 0x00000022},
--};
-+#define ar9331_1p2_baseband_core_txfir_coeff_japan_2484 ar9331_1p1_baseband_core_txfir_coeff_japan_2484
--static const u32 ar9331_common_wo_xlna_rx_gain_1p2[][2] = {
--      /* Addr      allmodes  */
--      {0x0000a000, 0x00060005},
--      {0x0000a004, 0x00810080},
--      {0x0000a008, 0x00830082},
--      {0x0000a00c, 0x00850084},
--      {0x0000a010, 0x01820181},
--      {0x0000a014, 0x01840183},
--      {0x0000a018, 0x01880185},
--      {0x0000a01c, 0x018a0189},
--      {0x0000a020, 0x02850284},
--      {0x0000a024, 0x02890288},
--      {0x0000a028, 0x028b028a},
--      {0x0000a02c, 0x03850384},
--      {0x0000a030, 0x03890388},
--      {0x0000a034, 0x038b038a},
--      {0x0000a038, 0x038d038c},
--      {0x0000a03c, 0x03910390},
--      {0x0000a040, 0x03930392},
--      {0x0000a044, 0x03950394},
--      {0x0000a048, 0x00000396},
--      {0x0000a04c, 0x00000000},
--      {0x0000a050, 0x00000000},
--      {0x0000a054, 0x00000000},
--      {0x0000a058, 0x00000000},
--      {0x0000a05c, 0x00000000},
--      {0x0000a060, 0x00000000},
--      {0x0000a064, 0x00000000},
--      {0x0000a068, 0x00000000},
--      {0x0000a06c, 0x00000000},
--      {0x0000a070, 0x00000000},
--      {0x0000a074, 0x00000000},
--      {0x0000a078, 0x00000000},
--      {0x0000a07c, 0x00000000},
--      {0x0000a080, 0x28282828},
--      {0x0000a084, 0x28282828},
--      {0x0000a088, 0x28282828},
--      {0x0000a08c, 0x28282828},
--      {0x0000a090, 0x28282828},
--      {0x0000a094, 0x24242428},
--      {0x0000a098, 0x171e1e1e},
--      {0x0000a09c, 0x02020b0b},
--      {0x0000a0a0, 0x02020202},
--      {0x0000a0a4, 0x00000000},
--      {0x0000a0a8, 0x00000000},
--      {0x0000a0ac, 0x00000000},
--      {0x0000a0b0, 0x00000000},
--      {0x0000a0b4, 0x00000000},
--      {0x0000a0b8, 0x00000000},
--      {0x0000a0bc, 0x00000000},
--      {0x0000a0c0, 0x22072208},
--      {0x0000a0c4, 0x22052206},
--      {0x0000a0c8, 0x22032204},
--      {0x0000a0cc, 0x22012202},
--      {0x0000a0d0, 0x221f2200},
--      {0x0000a0d4, 0x221d221e},
--      {0x0000a0d8, 0x33023303},
--      {0x0000a0dc, 0x33003301},
--      {0x0000a0e0, 0x331e331f},
--      {0x0000a0e4, 0x4402331d},
--      {0x0000a0e8, 0x44004401},
--      {0x0000a0ec, 0x441e441f},
--      {0x0000a0f0, 0x55025503},
--      {0x0000a0f4, 0x55005501},
--      {0x0000a0f8, 0x551e551f},
--      {0x0000a0fc, 0x6602551d},
--      {0x0000a100, 0x66006601},
--      {0x0000a104, 0x661e661f},
--      {0x0000a108, 0x7703661d},
--      {0x0000a10c, 0x77017702},
--      {0x0000a110, 0x00007700},
--      {0x0000a114, 0x00000000},
--      {0x0000a118, 0x00000000},
--      {0x0000a11c, 0x00000000},
--      {0x0000a120, 0x00000000},
--      {0x0000a124, 0x00000000},
--      {0x0000a128, 0x00000000},
--      {0x0000a12c, 0x00000000},
--      {0x0000a130, 0x00000000},
--      {0x0000a134, 0x00000000},
--      {0x0000a138, 0x00000000},
--      {0x0000a13c, 0x00000000},
--      {0x0000a140, 0x001f0000},
--      {0x0000a144, 0x111f1100},
--      {0x0000a148, 0x111d111e},
--      {0x0000a14c, 0x111b111c},
--      {0x0000a150, 0x22032204},
--      {0x0000a154, 0x22012202},
--      {0x0000a158, 0x221f2200},
--      {0x0000a15c, 0x221d221e},
--      {0x0000a160, 0x33013302},
--      {0x0000a164, 0x331f3300},
--      {0x0000a168, 0x4402331e},
--      {0x0000a16c, 0x44004401},
--      {0x0000a170, 0x441e441f},
--      {0x0000a174, 0x55015502},
--      {0x0000a178, 0x551f5500},
--      {0x0000a17c, 0x6602551e},
--      {0x0000a180, 0x66006601},
--      {0x0000a184, 0x661e661f},
--      {0x0000a188, 0x7703661d},
--      {0x0000a18c, 0x77017702},
--      {0x0000a190, 0x00007700},
--      {0x0000a194, 0x00000000},
--      {0x0000a198, 0x00000000},
--      {0x0000a19c, 0x00000000},
--      {0x0000a1a0, 0x00000000},
--      {0x0000a1a4, 0x00000000},
--      {0x0000a1a8, 0x00000000},
--      {0x0000a1ac, 0x00000000},
--      {0x0000a1b0, 0x00000000},
--      {0x0000a1b4, 0x00000000},
--      {0x0000a1b8, 0x00000000},
--      {0x0000a1bc, 0x00000000},
--      {0x0000a1c0, 0x00000000},
--      {0x0000a1c4, 0x00000000},
--      {0x0000a1c8, 0x00000000},
--      {0x0000a1cc, 0x00000000},
--      {0x0000a1d0, 0x00000000},
--      {0x0000a1d4, 0x00000000},
--      {0x0000a1d8, 0x00000000},
--      {0x0000a1dc, 0x00000000},
--      {0x0000a1e0, 0x00000000},
--      {0x0000a1e4, 0x00000000},
--      {0x0000a1e8, 0x00000000},
--      {0x0000a1ec, 0x00000000},
--      {0x0000a1f0, 0x00000396},
--      {0x0000a1f4, 0x00000396},
--      {0x0000a1f8, 0x00000396},
--      {0x0000a1fc, 0x00000296},
--};
-+#define ar9331_1p2_xtal_25M ar9331_1p1_xtal_25M
--static const u32 ar9331_1p2_baseband_core[][2] = {
--      /* Addr      allmodes  */
--      {0x00009800, 0xafe68e30},
--      {0x00009804, 0xfd14e000},
--      {0x00009808, 0x9c0a8f6b},
--      {0x0000980c, 0x04800000},
--      {0x00009814, 0x9280c00a},
--      {0x00009818, 0x00000000},
--      {0x0000981c, 0x00020028},
--      {0x00009834, 0x5f3ca3de},
--      {0x00009838, 0x0108ecff},
--      {0x0000983c, 0x14750600},
--      {0x00009880, 0x201fff00},
--      {0x00009884, 0x00001042},
--      {0x000098a4, 0x00200400},
--      {0x000098b0, 0x32840bbe},
--      {0x000098d0, 0x004b6a8e},
--      {0x000098d4, 0x00000820},
--      {0x000098dc, 0x00000000},
--      {0x000098f0, 0x00000000},
--      {0x000098f4, 0x00000000},
--      {0x00009c04, 0x00000000},
--      {0x00009c08, 0x03200000},
--      {0x00009c0c, 0x00000000},
--      {0x00009c10, 0x00000000},
--      {0x00009c14, 0x00046384},
--      {0x00009c18, 0x05b6b440},
--      {0x00009c1c, 0x00b6b440},
--      {0x00009d00, 0xc080a333},
--      {0x00009d04, 0x40206c10},
--      {0x00009d08, 0x009c4060},
--      {0x00009d0c, 0x1883800a},
--      {0x00009d10, 0x01834061},
--      {0x00009d14, 0x00c00400},
--      {0x00009d18, 0x00000000},
--      {0x00009e08, 0x0038233c},
--      {0x00009e24, 0x9927b515},
--      {0x00009e28, 0x12ef0200},
--      {0x00009e30, 0x06336f77},
--      {0x00009e34, 0x6af6532f},
--      {0x00009e38, 0x0cc80c00},
--      {0x00009e40, 0x0d261820},
--      {0x00009e4c, 0x00001004},
--      {0x00009e50, 0x00ff03f1},
--      {0x00009fc0, 0x803e4788},
--      {0x00009fc4, 0x0001efb5},
--      {0x00009fcc, 0x40000014},
--      {0x0000a20c, 0x00000000},
--      {0x0000a220, 0x00000000},
--      {0x0000a224, 0x00000000},
--      {0x0000a228, 0x10002310},
--      {0x0000a23c, 0x00000000},
--      {0x0000a244, 0x0c000000},
--      {0x0000a2a0, 0x00000001},
--      {0x0000a2c0, 0x00000001},
--      {0x0000a2c8, 0x00000000},
--      {0x0000a2cc, 0x18c43433},
--      {0x0000a2d4, 0x00000000},
--      {0x0000a2dc, 0x00000000},
--      {0x0000a2e0, 0x00000000},
--      {0x0000a2e4, 0x00000000},
--      {0x0000a2e8, 0x00000000},
--      {0x0000a2ec, 0x00000000},
--      {0x0000a2f0, 0x00000000},
--      {0x0000a2f4, 0x00000000},
--      {0x0000a2f8, 0x00000000},
--      {0x0000a344, 0x00000000},
--      {0x0000a34c, 0x00000000},
--      {0x0000a350, 0x0000a000},
--      {0x0000a364, 0x00000000},
--      {0x0000a370, 0x00000000},
--      {0x0000a390, 0x00000001},
--      {0x0000a394, 0x00000444},
--      {0x0000a398, 0x001f0e0f},
--      {0x0000a39c, 0x0075393f},
--      {0x0000a3a0, 0xb79f6427},
--      {0x0000a3a4, 0x00000000},
--      {0x0000a3a8, 0xaaaaaaaa},
--      {0x0000a3ac, 0x3c466478},
--      {0x0000a3c0, 0x20202020},
--      {0x0000a3c4, 0x22222220},
--      {0x0000a3c8, 0x20200020},
--      {0x0000a3cc, 0x20202020},
--      {0x0000a3d0, 0x20202020},
--      {0x0000a3d4, 0x20202020},
--      {0x0000a3d8, 0x20202020},
--      {0x0000a3dc, 0x20202020},
--      {0x0000a3e0, 0x20202020},
--      {0x0000a3e4, 0x20202020},
--      {0x0000a3e8, 0x20202020},
--      {0x0000a3ec, 0x20202020},
--      {0x0000a3f0, 0x00000000},
--      {0x0000a3f4, 0x00000006},
--      {0x0000a3f8, 0x0cdbd380},
--      {0x0000a3fc, 0x000f0f01},
--      {0x0000a400, 0x8fa91f01},
--      {0x0000a404, 0x00000000},
--      {0x0000a408, 0x0e79e5c6},
--      {0x0000a40c, 0x00820820},
--      {0x0000a414, 0x1ce739ce},
--      {0x0000a418, 0x2d001dce},
--      {0x0000a41c, 0x1ce739ce},
--      {0x0000a420, 0x000001ce},
--      {0x0000a424, 0x1ce739ce},
--      {0x0000a428, 0x000001ce},
--      {0x0000a42c, 0x1ce739ce},
--      {0x0000a430, 0x1ce739ce},
--      {0x0000a434, 0x00000000},
--      {0x0000a438, 0x00001801},
--      {0x0000a43c, 0x00000000},
--      {0x0000a440, 0x00000000},
--      {0x0000a444, 0x00000000},
--      {0x0000a448, 0x04000000},
--      {0x0000a44c, 0x00000001},
--      {0x0000a450, 0x00010000},
--      {0x0000a458, 0x00000000},
--      {0x0000a640, 0x00000000},
--      {0x0000a644, 0x3fad9d74},
--      {0x0000a648, 0x0048060a},
--      {0x0000a64c, 0x00003c37},
--      {0x0000a670, 0x03020100},
--      {0x0000a674, 0x09080504},
--      {0x0000a678, 0x0d0c0b0a},
--      {0x0000a67c, 0x13121110},
--      {0x0000a680, 0x31301514},
--      {0x0000a684, 0x35343332},
--      {0x0000a688, 0x00000036},
--      {0x0000a690, 0x00000838},
--      {0x0000a7c0, 0x00000000},
--      {0x0000a7c4, 0xfffffffc},
--      {0x0000a7c8, 0x00000000},
--      {0x0000a7cc, 0x00000000},
--      {0x0000a7d0, 0x00000000},
--      {0x0000a7d4, 0x00000004},
--      {0x0000a7dc, 0x00000001},
--};
-+#define ar9331_1p2_xtal_40M ar9331_1p1_xtal_40M
--static const u32 ar9331_modes_high_power_tx_gain_1p2[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
--      {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d7, 0x000050d7},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x23000a00, 0x23000a00},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x27000a02, 0x27000a02},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2b000a04, 0x2b000a04},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x3f001620, 0x3f001620},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x41001621, 0x41001621},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x44001640, 0x44001640},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x46001641, 0x46001641},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x48001642, 0x48001642},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x4b001644, 0x4b001644},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x4e001a81, 0x4e001a81},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x51001a83, 0x51001a83},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x54001c84, 0x54001c84},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x57001ce3, 0x57001ce3},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x5b001ce5, 0x5b001ce5},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5f001ce9, 0x5f001ce9},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x66001eec, 0x66001eec},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x66001eec, 0x66001eec},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
--      {0x0000a580, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a584, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a588, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a58c, 0x11062202, 0x11062202, 0x0b000200, 0x0b000200},
--      {0x0000a590, 0x17022e00, 0x17022e00, 0x0f000202, 0x0f000202},
--      {0x0000a594, 0x1d000ec2, 0x1d000ec2, 0x11000400, 0x11000400},
--      {0x0000a598, 0x25020ec0, 0x25020ec0, 0x15000402, 0x15000402},
--      {0x0000a59c, 0x2b020ec3, 0x2b020ec3, 0x19000404, 0x19000404},
--      {0x0000a5a0, 0x2f001f04, 0x2f001f04, 0x1b000603, 0x1b000603},
--      {0x0000a5a4, 0x35001fc4, 0x35001fc4, 0x1f000a02, 0x1f000a02},
--      {0x0000a5a8, 0x3c022f04, 0x3c022f04, 0x23000a04, 0x23000a04},
--      {0x0000a5ac, 0x41023e85, 0x41023e85, 0x26000a20, 0x26000a20},
--      {0x0000a5b0, 0x48023ec6, 0x48023ec6, 0x2a000e20, 0x2a000e20},
--      {0x0000a5b4, 0x4d023f01, 0x4d023f01, 0x2e000e22, 0x2e000e22},
--      {0x0000a5b8, 0x53023f4b, 0x53023f4b, 0x31000e24, 0x31000e24},
--      {0x0000a5bc, 0x5a027f09, 0x5a027f09, 0x34001640, 0x34001640},
--      {0x0000a5c0, 0x5f027fc9, 0x5f027fc9, 0x38001660, 0x38001660},
--      {0x0000a5c4, 0x6502feca, 0x6502feca, 0x3b001861, 0x3b001861},
--      {0x0000a5c8, 0x6b02ff4a, 0x6b02ff4a, 0x3e001a81, 0x3e001a81},
--      {0x0000a5cc, 0x7203feca, 0x7203feca, 0x42001a83, 0x42001a83},
--      {0x0000a5d0, 0x7703ff0b, 0x7703ff0b, 0x44001c84, 0x44001c84},
--      {0x0000a5d4, 0x7d06ffcb, 0x7d06ffcb, 0x48001ce3, 0x48001ce3},
--      {0x0000a5d8, 0x8407ff0b, 0x8407ff0b, 0x4c001ce5, 0x4c001ce5},
--      {0x0000a5dc, 0x8907ffcb, 0x8907ffcb, 0x50001ce9, 0x50001ce9},
--      {0x0000a5e0, 0x900fff0b, 0x900fff0b, 0x54001ceb, 0x54001ceb},
--      {0x0000a5e4, 0x960fffcb, 0x960fffcb, 0x56001eec, 0x56001eec},
--      {0x0000a5e8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5ec, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5f0, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5f4, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5f8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a5fc, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
--      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a614, 0x01404000, 0x01404000, 0x01404000, 0x01404000},
--      {0x0000a618, 0x02008501, 0x02008501, 0x02008501, 0x02008501},
--      {0x0000a61c, 0x02008802, 0x02008802, 0x02008802, 0x02008802},
--      {0x0000a620, 0x0300c802, 0x0300c802, 0x0300c802, 0x0300c802},
--      {0x0000a624, 0x0300cc03, 0x0300cc03, 0x0300cc03, 0x0300cc03},
--      {0x0000a628, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a62c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a630, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a634, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a638, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--      {0x0000a63c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--};
-+#define ar9331_1p2_baseband_core ar9331_1p1_baseband_core
--static const u32 ar9331_1p2_mac_postamble[][5] = {
--      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
--      {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
--      {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
--      {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
--      {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
--      {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
--      {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
--      {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
--      {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
--};
-+#define ar9331_1p2_soc_postamble ar9331_1p1_soc_postamble
--static const u32 ar9331_1p2_soc_preamble[][2] = {
--      /* Addr      allmodes  */
--      {0x00007020, 0x00000000},
--      {0x00007034, 0x00000002},
--      {0x00007038, 0x000002f8},
--};
-+#define ar9331_1p2_mac_postamble ar9331_1p1_mac_postamble
--static const u32 ar9331_1p2_xtal_40M[][2] = {
--      /* Addr      allmodes  */
--      {0x00007038, 0x000004c2},
--      {0x00008244, 0x0010f400},
--      {0x0000824c, 0x0001e800},
--      {0x0001609c, 0x0b283f31},
--};
-+#define ar9331_1p2_soc_preamble ar9331_1p1_soc_preamble
--static const u32 ar9331_1p2_mac_core[][2] = {
--      /* Addr      allmodes  */
--      {0x00000008, 0x00000000},
--      {0x00000030, 0x00020085},
--      {0x00000034, 0x00000005},
--      {0x00000040, 0x00000000},
--      {0x00000044, 0x00000000},
--      {0x00000048, 0x00000008},
--      {0x0000004c, 0x00000010},
--      {0x00000050, 0x00000000},
--      {0x00001040, 0x002ffc0f},
--      {0x00001044, 0x002ffc0f},
--      {0x00001048, 0x002ffc0f},
--      {0x0000104c, 0x002ffc0f},
--      {0x00001050, 0x002ffc0f},
--      {0x00001054, 0x002ffc0f},
--      {0x00001058, 0x002ffc0f},
--      {0x0000105c, 0x002ffc0f},
--      {0x00001060, 0x002ffc0f},
--      {0x00001064, 0x002ffc0f},
--      {0x000010f0, 0x00000100},
--      {0x00001270, 0x00000000},
--      {0x000012b0, 0x00000000},
--      {0x000012f0, 0x00000000},
--      {0x0000143c, 0x00000000},
--      {0x0000147c, 0x00000000},
--      {0x00008000, 0x00000000},
--      {0x00008004, 0x00000000},
--      {0x00008008, 0x00000000},
--      {0x0000800c, 0x00000000},
--      {0x00008018, 0x00000000},
--      {0x00008020, 0x00000000},
--      {0x00008038, 0x00000000},
--      {0x0000803c, 0x00000000},
--      {0x00008040, 0x00000000},
--      {0x00008044, 0x00000000},
--      {0x00008048, 0x00000000},
--      {0x0000804c, 0xffffffff},
--      {0x00008054, 0x00000000},
--      {0x00008058, 0x00000000},
--      {0x0000805c, 0x000fc78f},
--      {0x00008060, 0x0000000f},
--      {0x00008064, 0x00000000},
--      {0x00008070, 0x00000310},
--      {0x00008074, 0x00000020},
--      {0x00008078, 0x00000000},
--      {0x0000809c, 0x0000000f},
--      {0x000080a0, 0x00000000},
--      {0x000080a4, 0x02ff0000},
--      {0x000080a8, 0x0e070605},
--      {0x000080ac, 0x0000000d},
--      {0x000080b0, 0x00000000},
--      {0x000080b4, 0x00000000},
--      {0x000080b8, 0x00000000},
--      {0x000080bc, 0x00000000},
--      {0x000080c0, 0x2a800000},
--      {0x000080c4, 0x06900168},
--      {0x000080c8, 0x13881c20},
--      {0x000080cc, 0x01f40000},
--      {0x000080d0, 0x00252500},
--      {0x000080d4, 0x00a00000},
--      {0x000080d8, 0x00400000},
--      {0x000080dc, 0x00000000},
--      {0x000080e0, 0xffffffff},
--      {0x000080e4, 0x0000ffff},
--      {0x000080e8, 0x3f3f3f3f},
--      {0x000080ec, 0x00000000},
--      {0x000080f0, 0x00000000},
--      {0x000080f4, 0x00000000},
--      {0x000080fc, 0x00020000},
--      {0x00008100, 0x00000000},
--      {0x00008108, 0x00000052},
--      {0x0000810c, 0x00000000},
--      {0x00008110, 0x00000000},
--      {0x00008114, 0x000007ff},
--      {0x00008118, 0x000000aa},
--      {0x0000811c, 0x00003210},
--      {0x00008124, 0x00000000},
--      {0x00008128, 0x00000000},
--      {0x0000812c, 0x00000000},
--      {0x00008130, 0x00000000},
--      {0x00008134, 0x00000000},
--      {0x00008138, 0x00000000},
--      {0x0000813c, 0x0000ffff},
--      {0x00008144, 0xffffffff},
--      {0x00008168, 0x00000000},
--      {0x0000816c, 0x00000000},
--      {0x00008170, 0x18486200},
--      {0x00008174, 0x33332210},
--      {0x00008178, 0x00000000},
--      {0x0000817c, 0x00020000},
--      {0x000081c0, 0x00000000},
--      {0x000081c4, 0x33332210},
--      {0x000081c8, 0x00000000},
--      {0x000081cc, 0x00000000},
--      {0x000081d4, 0x00000000},
--      {0x000081ec, 0x00000000},
--      {0x000081f0, 0x00000000},
--      {0x000081f4, 0x00000000},
--      {0x000081f8, 0x00000000},
--      {0x000081fc, 0x00000000},
--      {0x00008240, 0x00100000},
--      {0x00008248, 0x00000800},
--      {0x00008250, 0x00000000},
--      {0x00008254, 0x00000000},
--      {0x00008258, 0x00000000},
--      {0x0000825c, 0x40000000},
--      {0x00008260, 0x00080922},
--      {0x00008264, 0x9d400010},
--      {0x00008268, 0xffffffff},
--      {0x0000826c, 0x0000ffff},
--      {0x00008270, 0x00000000},
--      {0x00008274, 0x40000000},
--      {0x00008278, 0x003e4180},
--      {0x0000827c, 0x00000004},
--      {0x00008284, 0x0000002c},
--      {0x00008288, 0x0000002c},
--      {0x0000828c, 0x000000ff},
--      {0x00008294, 0x00000000},
--      {0x00008298, 0x00000000},
--      {0x0000829c, 0x00000000},
--      {0x00008300, 0x00000140},
--      {0x00008314, 0x00000000},
--      {0x0000831c, 0x0000010d},
--      {0x00008328, 0x00000000},
--      {0x0000832c, 0x00000007},
--      {0x00008330, 0x00000302},
--      {0x00008334, 0x00000700},
--      {0x00008338, 0x00ff0000},
--      {0x0000833c, 0x02400000},
--      {0x00008340, 0x000107ff},
--      {0x00008344, 0xaa48105b},
--      {0x00008348, 0x008f0000},
--      {0x0000835c, 0x00000000},
--      {0x00008360, 0xffffffff},
--      {0x00008364, 0xffffffff},
--      {0x00008368, 0x00000000},
--      {0x00008370, 0x00000000},
--      {0x00008374, 0x000000ff},
--      {0x00008378, 0x00000000},
--      {0x0000837c, 0x00000000},
--      {0x00008380, 0xffffffff},
--      {0x00008384, 0xffffffff},
--      {0x00008390, 0xffffffff},
--      {0x00008394, 0xffffffff},
--      {0x00008398, 0x00000000},
--      {0x0000839c, 0x00000000},
--      {0x000083a0, 0x00000000},
--      {0x000083a4, 0x0000fa14},
--      {0x000083a8, 0x000f0c00},
--      {0x000083ac, 0x33332210},
--      {0x000083b0, 0x33332210},
--      {0x000083b4, 0x33332210},
--      {0x000083b8, 0x33332210},
--      {0x000083bc, 0x00000000},
--      {0x000083c0, 0x00000000},
--      {0x000083c4, 0x00000000},
--      {0x000083c8, 0x00000000},
--      {0x000083cc, 0x00000200},
--      {0x000083d0, 0x000301ff},
--};
-+#define ar9331_1p2_mac_core ar9331_1p1_mac_core
--static const u32 ar9331_common_rx_gain_1p2[][2] = {
--      /* Addr      allmodes  */
--      {0x0000a000, 0x00010000},
--      {0x0000a004, 0x00030002},
--      {0x0000a008, 0x00050004},
--      {0x0000a00c, 0x00810080},
--      {0x0000a010, 0x01800082},
--      {0x0000a014, 0x01820181},
--      {0x0000a018, 0x01840183},
--      {0x0000a01c, 0x01880185},
--      {0x0000a020, 0x018a0189},
--      {0x0000a024, 0x02850284},
--      {0x0000a028, 0x02890288},
--      {0x0000a02c, 0x03850384},
--      {0x0000a030, 0x03890388},
--      {0x0000a034, 0x038b038a},
--      {0x0000a038, 0x038d038c},
--      {0x0000a03c, 0x03910390},
--      {0x0000a040, 0x03930392},
--      {0x0000a044, 0x03950394},
--      {0x0000a048, 0x00000396},
--      {0x0000a04c, 0x00000000},
--      {0x0000a050, 0x00000000},
--      {0x0000a054, 0x00000000},
--      {0x0000a058, 0x00000000},
--      {0x0000a05c, 0x00000000},
--      {0x0000a060, 0x00000000},
--      {0x0000a064, 0x00000000},
--      {0x0000a068, 0x00000000},
--      {0x0000a06c, 0x00000000},
--      {0x0000a070, 0x00000000},
--      {0x0000a074, 0x00000000},
--      {0x0000a078, 0x00000000},
--      {0x0000a07c, 0x00000000},
--      {0x0000a080, 0x28282828},
--      {0x0000a084, 0x28282828},
--      {0x0000a088, 0x28282828},
--      {0x0000a08c, 0x28282828},
--      {0x0000a090, 0x28282828},
--      {0x0000a094, 0x21212128},
--      {0x0000a098, 0x171c1c1c},
--      {0x0000a09c, 0x02020212},
--      {0x0000a0a0, 0x00000202},
--      {0x0000a0a4, 0x00000000},
--      {0x0000a0a8, 0x00000000},
--      {0x0000a0ac, 0x00000000},
--      {0x0000a0b0, 0x00000000},
--      {0x0000a0b4, 0x00000000},
--      {0x0000a0b8, 0x00000000},
--      {0x0000a0bc, 0x00000000},
--      {0x0000a0c0, 0x001f0000},
--      {0x0000a0c4, 0x111f1100},
--      {0x0000a0c8, 0x111d111e},
--      {0x0000a0cc, 0x111b111c},
--      {0x0000a0d0, 0x22032204},
--      {0x0000a0d4, 0x22012202},
--      {0x0000a0d8, 0x221f2200},
--      {0x0000a0dc, 0x221d221e},
--      {0x0000a0e0, 0x33013302},
--      {0x0000a0e4, 0x331f3300},
--      {0x0000a0e8, 0x4402331e},
--      {0x0000a0ec, 0x44004401},
--      {0x0000a0f0, 0x441e441f},
--      {0x0000a0f4, 0x55015502},
--      {0x0000a0f8, 0x551f5500},
--      {0x0000a0fc, 0x6602551e},
--      {0x0000a100, 0x66006601},
--      {0x0000a104, 0x661e661f},
--      {0x0000a108, 0x7703661d},
--      {0x0000a10c, 0x77017702},
--      {0x0000a110, 0x00007700},
--      {0x0000a114, 0x00000000},
--      {0x0000a118, 0x00000000},
--      {0x0000a11c, 0x00000000},
--      {0x0000a120, 0x00000000},
--      {0x0000a124, 0x00000000},
--      {0x0000a128, 0x00000000},
--      {0x0000a12c, 0x00000000},
--      {0x0000a130, 0x00000000},
--      {0x0000a134, 0x00000000},
--      {0x0000a138, 0x00000000},
--      {0x0000a13c, 0x00000000},
--      {0x0000a140, 0x001f0000},
--      {0x0000a144, 0x111f1100},
--      {0x0000a148, 0x111d111e},
--      {0x0000a14c, 0x111b111c},
--      {0x0000a150, 0x22032204},
--      {0x0000a154, 0x22012202},
--      {0x0000a158, 0x221f2200},
--      {0x0000a15c, 0x221d221e},
--      {0x0000a160, 0x33013302},
--      {0x0000a164, 0x331f3300},
--      {0x0000a168, 0x4402331e},
--      {0x0000a16c, 0x44004401},
--      {0x0000a170, 0x441e441f},
--      {0x0000a174, 0x55015502},
--      {0x0000a178, 0x551f5500},
--      {0x0000a17c, 0x6602551e},
--      {0x0000a180, 0x66006601},
--      {0x0000a184, 0x661e661f},
--      {0x0000a188, 0x7703661d},
--      {0x0000a18c, 0x77017702},
--      {0x0000a190, 0x00007700},
--      {0x0000a194, 0x00000000},
--      {0x0000a198, 0x00000000},
--      {0x0000a19c, 0x00000000},
--      {0x0000a1a0, 0x00000000},
--      {0x0000a1a4, 0x00000000},
--      {0x0000a1a8, 0x00000000},
--      {0x0000a1ac, 0x00000000},
--      {0x0000a1b0, 0x00000000},
--      {0x0000a1b4, 0x00000000},
--      {0x0000a1b8, 0x00000000},
--      {0x0000a1bc, 0x00000000},
--      {0x0000a1c0, 0x00000000},
--      {0x0000a1c4, 0x00000000},
--      {0x0000a1c8, 0x00000000},
--      {0x0000a1cc, 0x00000000},
--      {0x0000a1d0, 0x00000000},
--      {0x0000a1d4, 0x00000000},
--      {0x0000a1d8, 0x00000000},
--      {0x0000a1dc, 0x00000000},
--      {0x0000a1e0, 0x00000000},
--      {0x0000a1e4, 0x00000000},
--      {0x0000a1e8, 0x00000000},
--      {0x0000a1ec, 0x00000000},
--      {0x0000a1f0, 0x00000396},
--      {0x0000a1f4, 0x00000396},
--      {0x0000a1f8, 0x00000396},
--      {0x0000a1fc, 0x00000296},
--};
-+#define ar9331_common_wo_xlna_rx_gain_1p2 ar9331_common_wo_xlna_rx_gain_1p1
-+
-+#define ar9331_common_rx_gain_1p2 ar9485_common_rx_gain_1_1
- #endif /* INITVALS_9330_1P2_H */
---- a/drivers/net/wireless/ath/ath9k/ar9340_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9340_initvals.h
-@@ -100,18 +100,7 @@ static const u32 ar9340Modes_lowest_ob_d
-       {0x00016448, 0x24925266, 0x24925266, 0x24925266, 0x24925266},
- };
--static const u32 ar9340Modes_fast_clock_1p0[][3] = {
--      /* Addr      5G_HT20     5G_HT40   */
--      {0x00001030, 0x00000268, 0x000004d0},
--      {0x00001070, 0x0000018c, 0x00000318},
--      {0x000010b0, 0x00000fd0, 0x00001fa0},
--      {0x00008014, 0x044c044c, 0x08980898},
--      {0x0000801c, 0x148ec02b, 0x148ec057},
--      {0x00008318, 0x000044c0, 0x00008980},
--      {0x00009e00, 0x0372131c, 0x0372131c},
--      {0x0000a230, 0x0000000b, 0x00000016},
--      {0x0000a254, 0x00000898, 0x00001130},
--};
-+#define ar9340Modes_fast_clock_1p0 ar9300Modes_fast_clock_2p2
- static const u32 ar9340_1p0_radio_core[][2] = {
-       /* Addr      allmodes  */
-@@ -224,22 +213,9 @@ static const u32 ar9340_1p0_radio_core_4
-       {0x000160b0, 0x01885f5a},
- };
--static const u32 ar9340_1p0_mac_postamble[][5] = {
--      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
--      {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
--      {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
--      {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
--      {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
--      {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
--      {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
--      {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
--      {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
--};
-+#define ar9340_1p0_mac_postamble ar9300_2p2_mac_postamble
--static const u32 ar9340_1p0_soc_postamble[][5] = {
--      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
--      {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023},
--};
-+#define ar9340_1p0_soc_postamble ar9300_2p2_soc_postamble
- static const u32 ar9340_1p0_baseband_postamble[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-@@ -1359,265 +1335,7 @@ static const u32 ar9340_1p0_mac_core[][2
-       {0x000083d0, 0x000101ff},
- };
--static const u32 ar9340Common_wo_xlna_rx_gain_table_1p0[][2] = {
--      /* Addr      allmodes  */
--      {0x0000a000, 0x00010000},
--      {0x0000a004, 0x00030002},
--      {0x0000a008, 0x00050004},
--      {0x0000a00c, 0x00810080},
--      {0x0000a010, 0x00830082},
--      {0x0000a014, 0x01810180},
--      {0x0000a018, 0x01830182},
--      {0x0000a01c, 0x01850184},
--      {0x0000a020, 0x01890188},
--      {0x0000a024, 0x018b018a},
--      {0x0000a028, 0x018d018c},
--      {0x0000a02c, 0x03820190},
--      {0x0000a030, 0x03840383},
--      {0x0000a034, 0x03880385},
--      {0x0000a038, 0x038a0389},
--      {0x0000a03c, 0x038c038b},
--      {0x0000a040, 0x0390038d},
--      {0x0000a044, 0x03920391},
--      {0x0000a048, 0x03940393},
--      {0x0000a04c, 0x03960395},
--      {0x0000a050, 0x00000000},
--      {0x0000a054, 0x00000000},
--      {0x0000a058, 0x00000000},
--      {0x0000a05c, 0x00000000},
--      {0x0000a060, 0x00000000},
--      {0x0000a064, 0x00000000},
--      {0x0000a068, 0x00000000},
--      {0x0000a06c, 0x00000000},
--      {0x0000a070, 0x00000000},
--      {0x0000a074, 0x00000000},
--      {0x0000a078, 0x00000000},
--      {0x0000a07c, 0x00000000},
--      {0x0000a080, 0x29292929},
--      {0x0000a084, 0x29292929},
--      {0x0000a088, 0x29292929},
--      {0x0000a08c, 0x29292929},
--      {0x0000a090, 0x22292929},
--      {0x0000a094, 0x1d1d2222},
--      {0x0000a098, 0x0c111117},
--      {0x0000a09c, 0x00030303},
--      {0x0000a0a0, 0x00000000},
--      {0x0000a0a4, 0x00000000},
--      {0x0000a0a8, 0x00000000},
--      {0x0000a0ac, 0x00000000},
--      {0x0000a0b0, 0x00000000},
--      {0x0000a0b4, 0x00000000},
--      {0x0000a0b8, 0x00000000},
--      {0x0000a0bc, 0x00000000},
--      {0x0000a0c0, 0x001f0000},
--      {0x0000a0c4, 0x01000101},
--      {0x0000a0c8, 0x011e011f},
--      {0x0000a0cc, 0x011c011d},
--      {0x0000a0d0, 0x02030204},
--      {0x0000a0d4, 0x02010202},
--      {0x0000a0d8, 0x021f0200},
--      {0x0000a0dc, 0x0302021e},
--      {0x0000a0e0, 0x03000301},
--      {0x0000a0e4, 0x031e031f},
--      {0x0000a0e8, 0x0402031d},
--      {0x0000a0ec, 0x04000401},
--      {0x0000a0f0, 0x041e041f},
--      {0x0000a0f4, 0x0502041d},
--      {0x0000a0f8, 0x05000501},
--      {0x0000a0fc, 0x051e051f},
--      {0x0000a100, 0x06010602},
--      {0x0000a104, 0x061f0600},
--      {0x0000a108, 0x061d061e},
--      {0x0000a10c, 0x07020703},
--      {0x0000a110, 0x07000701},
--      {0x0000a114, 0x00000000},
--      {0x0000a118, 0x00000000},
--      {0x0000a11c, 0x00000000},
--      {0x0000a120, 0x00000000},
--      {0x0000a124, 0x00000000},
--      {0x0000a128, 0x00000000},
--      {0x0000a12c, 0x00000000},
--      {0x0000a130, 0x00000000},
--      {0x0000a134, 0x00000000},
--      {0x0000a138, 0x00000000},
--      {0x0000a13c, 0x00000000},
--      {0x0000a140, 0x001f0000},
--      {0x0000a144, 0x01000101},
--      {0x0000a148, 0x011e011f},
--      {0x0000a14c, 0x011c011d},
--      {0x0000a150, 0x02030204},
--      {0x0000a154, 0x02010202},
--      {0x0000a158, 0x021f0200},
--      {0x0000a15c, 0x0302021e},
--      {0x0000a160, 0x03000301},
--      {0x0000a164, 0x031e031f},
--      {0x0000a168, 0x0402031d},
--      {0x0000a16c, 0x04000401},
--      {0x0000a170, 0x041e041f},
--      {0x0000a174, 0x0502041d},
--      {0x0000a178, 0x05000501},
--      {0x0000a17c, 0x051e051f},
--      {0x0000a180, 0x06010602},
--      {0x0000a184, 0x061f0600},
--      {0x0000a188, 0x061d061e},
--      {0x0000a18c, 0x07020703},
--      {0x0000a190, 0x07000701},
--      {0x0000a194, 0x00000000},
--      {0x0000a198, 0x00000000},
--      {0x0000a19c, 0x00000000},
--      {0x0000a1a0, 0x00000000},
--      {0x0000a1a4, 0x00000000},
--      {0x0000a1a8, 0x00000000},
--      {0x0000a1ac, 0x00000000},
--      {0x0000a1b0, 0x00000000},
--      {0x0000a1b4, 0x00000000},
--      {0x0000a1b8, 0x00000000},
--      {0x0000a1bc, 0x00000000},
--      {0x0000a1c0, 0x00000000},
--      {0x0000a1c4, 0x00000000},
--      {0x0000a1c8, 0x00000000},
--      {0x0000a1cc, 0x00000000},
--      {0x0000a1d0, 0x00000000},
--      {0x0000a1d4, 0x00000000},
--      {0x0000a1d8, 0x00000000},
--      {0x0000a1dc, 0x00000000},
--      {0x0000a1e0, 0x00000000},
--      {0x0000a1e4, 0x00000000},
--      {0x0000a1e8, 0x00000000},
--      {0x0000a1ec, 0x00000000},
--      {0x0000a1f0, 0x00000396},
--      {0x0000a1f4, 0x00000396},
--      {0x0000a1f8, 0x00000396},
--      {0x0000a1fc, 0x00000196},
--      {0x0000b000, 0x00010000},
--      {0x0000b004, 0x00030002},
--      {0x0000b008, 0x00050004},
--      {0x0000b00c, 0x00810080},
--      {0x0000b010, 0x00830082},
--      {0x0000b014, 0x01810180},
--      {0x0000b018, 0x01830182},
--      {0x0000b01c, 0x01850184},
--      {0x0000b020, 0x02810280},
--      {0x0000b024, 0x02830282},
--      {0x0000b028, 0x02850284},
--      {0x0000b02c, 0x02890288},
--      {0x0000b030, 0x028b028a},
--      {0x0000b034, 0x0388028c},
--      {0x0000b038, 0x038a0389},
--      {0x0000b03c, 0x038c038b},
--      {0x0000b040, 0x0390038d},
--      {0x0000b044, 0x03920391},
--      {0x0000b048, 0x03940393},
--      {0x0000b04c, 0x03960395},
--      {0x0000b050, 0x00000000},
--      {0x0000b054, 0x00000000},
--      {0x0000b058, 0x00000000},
--      {0x0000b05c, 0x00000000},
--      {0x0000b060, 0x00000000},
--      {0x0000b064, 0x00000000},
--      {0x0000b068, 0x00000000},
--      {0x0000b06c, 0x00000000},
--      {0x0000b070, 0x00000000},
--      {0x0000b074, 0x00000000},
--      {0x0000b078, 0x00000000},
--      {0x0000b07c, 0x00000000},
--      {0x0000b080, 0x32323232},
--      {0x0000b084, 0x2f2f3232},
--      {0x0000b088, 0x23282a2d},
--      {0x0000b08c, 0x1c1e2123},
--      {0x0000b090, 0x14171919},
--      {0x0000b094, 0x0e0e1214},
--      {0x0000b098, 0x03050707},
--      {0x0000b09c, 0x00030303},
--      {0x0000b0a0, 0x00000000},
--      {0x0000b0a4, 0x00000000},
--      {0x0000b0a8, 0x00000000},
--      {0x0000b0ac, 0x00000000},
--      {0x0000b0b0, 0x00000000},
--      {0x0000b0b4, 0x00000000},
--      {0x0000b0b8, 0x00000000},
--      {0x0000b0bc, 0x00000000},
--      {0x0000b0c0, 0x003f0020},
--      {0x0000b0c4, 0x00400041},
--      {0x0000b0c8, 0x0140005f},
--      {0x0000b0cc, 0x0160015f},
--      {0x0000b0d0, 0x017e017f},
--      {0x0000b0d4, 0x02410242},
--      {0x0000b0d8, 0x025f0240},
--      {0x0000b0dc, 0x027f0260},
--      {0x0000b0e0, 0x0341027e},
--      {0x0000b0e4, 0x035f0340},
--      {0x0000b0e8, 0x037f0360},
--      {0x0000b0ec, 0x04400441},
--      {0x0000b0f0, 0x0460045f},
--      {0x0000b0f4, 0x0541047f},
--      {0x0000b0f8, 0x055f0540},
--      {0x0000b0fc, 0x057f0560},
--      {0x0000b100, 0x06400641},
--      {0x0000b104, 0x0660065f},
--      {0x0000b108, 0x067e067f},
--      {0x0000b10c, 0x07410742},
--      {0x0000b110, 0x075f0740},
--      {0x0000b114, 0x077f0760},
--      {0x0000b118, 0x07800781},
--      {0x0000b11c, 0x07a0079f},
--      {0x0000b120, 0x07c107bf},
--      {0x0000b124, 0x000007c0},
--      {0x0000b128, 0x00000000},
--      {0x0000b12c, 0x00000000},
--      {0x0000b130, 0x00000000},
--      {0x0000b134, 0x00000000},
--      {0x0000b138, 0x00000000},
--      {0x0000b13c, 0x00000000},
--      {0x0000b140, 0x003f0020},
--      {0x0000b144, 0x00400041},
--      {0x0000b148, 0x0140005f},
--      {0x0000b14c, 0x0160015f},
--      {0x0000b150, 0x017e017f},
--      {0x0000b154, 0x02410242},
--      {0x0000b158, 0x025f0240},
--      {0x0000b15c, 0x027f0260},
--      {0x0000b160, 0x0341027e},
--      {0x0000b164, 0x035f0340},
--      {0x0000b168, 0x037f0360},
--      {0x0000b16c, 0x04400441},
--      {0x0000b170, 0x0460045f},
--      {0x0000b174, 0x0541047f},
--      {0x0000b178, 0x055f0540},
--      {0x0000b17c, 0x057f0560},
--      {0x0000b180, 0x06400641},
--      {0x0000b184, 0x0660065f},
--      {0x0000b188, 0x067e067f},
--      {0x0000b18c, 0x07410742},
--      {0x0000b190, 0x075f0740},
--      {0x0000b194, 0x077f0760},
--      {0x0000b198, 0x07800781},
--      {0x0000b19c, 0x07a0079f},
--      {0x0000b1a0, 0x07c107bf},
--      {0x0000b1a4, 0x000007c0},
--      {0x0000b1a8, 0x00000000},
--      {0x0000b1ac, 0x00000000},
--      {0x0000b1b0, 0x00000000},
--      {0x0000b1b4, 0x00000000},
--      {0x0000b1b8, 0x00000000},
--      {0x0000b1bc, 0x00000000},
--      {0x0000b1c0, 0x00000000},
--      {0x0000b1c4, 0x00000000},
--      {0x0000b1c8, 0x00000000},
--      {0x0000b1cc, 0x00000000},
--      {0x0000b1d0, 0x00000000},
--      {0x0000b1d4, 0x00000000},
--      {0x0000b1d8, 0x00000000},
--      {0x0000b1dc, 0x00000000},
--      {0x0000b1e0, 0x00000000},
--      {0x0000b1e4, 0x00000000},
--      {0x0000b1e8, 0x00000000},
--      {0x0000b1ec, 0x00000000},
--      {0x0000b1f0, 0x00000396},
--      {0x0000b1f4, 0x00000396},
--      {0x0000b1f8, 0x00000396},
--      {0x0000b1fc, 0x00000196},
--};
-+#define ar9340Common_wo_xlna_rx_gain_table_1p0 ar9300Common_wo_xlna_rx_gain_table_2p2
- static const u32 ar9340_1p0_soc_preamble[][2] = {
-       /* Addr      allmodes  */
---- a/drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h
-@@ -1,5 +1,6 @@
- /*
-- * Copyright (c) 2010 Atheros Communications Inc.
-+ * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros Inc.
-  *
-  * Permission to use, copy, modify, and/or distribute this software for any
-  * purpose with or without fee is hereby granted, provided that the above
-@@ -1007,7 +1008,7 @@ static const u32 ar9462_2p0_radio_core[]
- static const u32 ar9462_2p0_soc_preamble[][2] = {
-       /* Addr      allmodes  */
--      {0x000040a4 ,0x00a0c1c9},
-+      {0x000040a4, 0x00a0c1c9},
-       {0x00007020, 0x00000000},
-       {0x00007034, 0x00000002},
-       {0x00007038, 0x000004c2},
---- a/drivers/net/wireless/ath/ath9k/ar9485_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9485_initvals.h
-@@ -1,5 +1,6 @@
- /*
-  * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros Inc.
-  *
-  * Permission to use, copy, modify, and/or distribute this software for any
-  * purpose with or without fee is hereby granted, provided that the above
-@@ -17,599 +18,151 @@
- #ifndef INITVALS_9485_H
- #define INITVALS_9485_H
--static const u32 ar9485_1_1_mac_core[][2] = {
--      /*  Addr       allmodes */
--      {0x00000008, 0x00000000},
--      {0x00000030, 0x00020085},
--      {0x00000034, 0x00000005},
--      {0x00000040, 0x00000000},
--      {0x00000044, 0x00000000},
--      {0x00000048, 0x00000008},
--      {0x0000004c, 0x00000010},
--      {0x00000050, 0x00000000},
--      {0x00001040, 0x002ffc0f},
--      {0x00001044, 0x002ffc0f},
--      {0x00001048, 0x002ffc0f},
--      {0x0000104c, 0x002ffc0f},
--      {0x00001050, 0x002ffc0f},
--      {0x00001054, 0x002ffc0f},
--      {0x00001058, 0x002ffc0f},
--      {0x0000105c, 0x002ffc0f},
--      {0x00001060, 0x002ffc0f},
--      {0x00001064, 0x002ffc0f},
--      {0x000010f0, 0x00000100},
--      {0x00001270, 0x00000000},
--      {0x000012b0, 0x00000000},
--      {0x000012f0, 0x00000000},
--      {0x0000143c, 0x00000000},
--      {0x0000147c, 0x00000000},
--      {0x00008000, 0x00000000},
--      {0x00008004, 0x00000000},
--      {0x00008008, 0x00000000},
--      {0x0000800c, 0x00000000},
--      {0x00008018, 0x00000000},
--      {0x00008020, 0x00000000},
--      {0x00008038, 0x00000000},
--      {0x0000803c, 0x00000000},
--      {0x00008040, 0x00000000},
--      {0x00008044, 0x00000000},
--      {0x00008048, 0x00000000},
--      {0x0000804c, 0xffffffff},
--      {0x00008054, 0x00000000},
--      {0x00008058, 0x00000000},
--      {0x0000805c, 0x000fc78f},
--      {0x00008060, 0x0000000f},
--      {0x00008064, 0x00000000},
--      {0x00008070, 0x00000310},
--      {0x00008074, 0x00000020},
--      {0x00008078, 0x00000000},
--      {0x0000809c, 0x0000000f},
--      {0x000080a0, 0x00000000},
--      {0x000080a4, 0x02ff0000},
--      {0x000080a8, 0x0e070605},
--      {0x000080ac, 0x0000000d},
--      {0x000080b0, 0x00000000},
--      {0x000080b4, 0x00000000},
--      {0x000080b8, 0x00000000},
--      {0x000080bc, 0x00000000},
--      {0x000080c0, 0x2a800000},
--      {0x000080c4, 0x06900168},
--      {0x000080c8, 0x13881c22},
--      {0x000080cc, 0x01f40000},
--      {0x000080d0, 0x00252500},
--      {0x000080d4, 0x00a00000},
--      {0x000080d8, 0x00400000},
--      {0x000080dc, 0x00000000},
--      {0x000080e0, 0xffffffff},
--      {0x000080e4, 0x0000ffff},
--      {0x000080e8, 0x3f3f3f3f},
--      {0x000080ec, 0x00000000},
--      {0x000080f0, 0x00000000},
--      {0x000080f4, 0x00000000},
--      {0x000080fc, 0x00020000},
--      {0x00008100, 0x00000000},
--      {0x00008108, 0x00000052},
--      {0x0000810c, 0x00000000},
--      {0x00008110, 0x00000000},
--      {0x00008114, 0x000007ff},
--      {0x00008118, 0x000000aa},
--      {0x0000811c, 0x00003210},
--      {0x00008124, 0x00000000},
--      {0x00008128, 0x00000000},
--      {0x0000812c, 0x00000000},
--      {0x00008130, 0x00000000},
--      {0x00008134, 0x00000000},
--      {0x00008138, 0x00000000},
--      {0x0000813c, 0x0000ffff},
--      {0x00008144, 0xffffffff},
--      {0x00008168, 0x00000000},
--      {0x0000816c, 0x00000000},
--      {0x00008170, 0x18486200},
--      {0x00008174, 0x33332210},
--      {0x00008178, 0x00000000},
--      {0x0000817c, 0x00020000},
--      {0x000081c0, 0x00000000},
--      {0x000081c4, 0x33332210},
--      {0x000081d4, 0x00000000},
--      {0x000081ec, 0x00000000},
--      {0x000081f0, 0x00000000},
--      {0x000081f4, 0x00000000},
--      {0x000081f8, 0x00000000},
--      {0x000081fc, 0x00000000},
--      {0x00008240, 0x00100000},
--      {0x00008244, 0x0010f400},
--      {0x00008248, 0x00000800},
--      {0x0000824c, 0x0001e800},
--      {0x00008250, 0x00000000},
--      {0x00008254, 0x00000000},
--      {0x00008258, 0x00000000},
--      {0x0000825c, 0x40000000},
--      {0x00008260, 0x00080922},
--      {0x00008264, 0x9ca00010},
--      {0x00008268, 0xffffffff},
--      {0x0000826c, 0x0000ffff},
--      {0x00008270, 0x00000000},
--      {0x00008274, 0x40000000},
--      {0x00008278, 0x003e4180},
--      {0x0000827c, 0x00000004},
--      {0x00008284, 0x0000002c},
--      {0x00008288, 0x0000002c},
--      {0x0000828c, 0x000000ff},
--      {0x00008294, 0x00000000},
--      {0x00008298, 0x00000000},
--      {0x0000829c, 0x00000000},
--      {0x00008300, 0x00000140},
--      {0x00008314, 0x00000000},
--      {0x0000831c, 0x0000010d},
--      {0x00008328, 0x00000000},
--      {0x0000832c, 0x00000007},
--      {0x00008330, 0x00000302},
--      {0x00008334, 0x00000700},
--      {0x00008338, 0x00ff0000},
--      {0x0000833c, 0x02400000},
--      {0x00008340, 0x000107ff},
--      {0x00008344, 0xa248105b},
--      {0x00008348, 0x008f0000},
--      {0x0000835c, 0x00000000},
--      {0x00008360, 0xffffffff},
--      {0x00008364, 0xffffffff},
--      {0x00008368, 0x00000000},
--      {0x00008370, 0x00000000},
--      {0x00008374, 0x000000ff},
--      {0x00008378, 0x00000000},
--      {0x0000837c, 0x00000000},
--      {0x00008380, 0xffffffff},
--      {0x00008384, 0xffffffff},
--      {0x00008390, 0xffffffff},
--      {0x00008394, 0xffffffff},
--      {0x00008398, 0x00000000},
--      {0x0000839c, 0x00000000},
--      {0x000083a0, 0x00000000},
--      {0x000083a4, 0x0000fa14},
--      {0x000083a8, 0x000f0c00},
--      {0x000083ac, 0x33332210},
--      {0x000083b0, 0x33332210},
--      {0x000083b4, 0x33332210},
--      {0x000083b8, 0x33332210},
--      {0x000083bc, 0x00000000},
--      {0x000083c0, 0x00000000},
--      {0x000083c4, 0x00000000},
--      {0x000083c8, 0x00000000},
--      {0x000083cc, 0x00000200},
--      {0x000083d0, 0x000301ff},
--};
--
--static const u32 ar9485_1_1_baseband_core[][2] = {
--      /* Addr       allmodes */
--      {0x00009800, 0xafe68e30},
--      {0x00009804, 0xfd14e000},
--      {0x00009808, 0x9c0a8f6b},
--      {0x0000980c, 0x04800000},
--      {0x00009814, 0x9280c00a},
--      {0x00009818, 0x00000000},
--      {0x0000981c, 0x00020028},
--      {0x00009834, 0x5f3ca3de},
--      {0x00009838, 0x0108ecff},
--      {0x0000983c, 0x14750600},
--      {0x00009880, 0x201fff00},
--      {0x00009884, 0x00001042},
--      {0x000098a4, 0x00200400},
--      {0x000098b0, 0x52440bbe},
--      {0x000098d0, 0x004b6a8e},
--      {0x000098d4, 0x00000820},
--      {0x000098dc, 0x00000000},
--      {0x000098f0, 0x00000000},
--      {0x000098f4, 0x00000000},
--      {0x00009c04, 0x00000000},
--      {0x00009c08, 0x03200000},
--      {0x00009c0c, 0x00000000},
--      {0x00009c10, 0x00000000},
--      {0x00009c14, 0x00046384},
--      {0x00009c18, 0x05b6b440},
--      {0x00009c1c, 0x00b6b440},
--      {0x00009d00, 0xc080a333},
--      {0x00009d04, 0x40206c10},
--      {0x00009d08, 0x009c4060},
--      {0x00009d0c, 0x1883800a},
--      {0x00009d10, 0x01834061},
--      {0x00009d14, 0x00c00400},
--      {0x00009d18, 0x00000000},
--      {0x00009d1c, 0x00000000},
--      {0x00009e08, 0x0038233c},
--      {0x00009e24, 0x9927b515},
--      {0x00009e28, 0x12ef0200},
--      {0x00009e30, 0x06336f77},
--      {0x00009e34, 0x6af6532f},
--      {0x00009e38, 0x0cc80c00},
--      {0x00009e40, 0x0d261820},
--      {0x00009e4c, 0x00001004},
--      {0x00009e50, 0x00ff03f1},
--      {0x00009fc0, 0x80be4788},
--      {0x00009fc4, 0x0001efb5},
--      {0x00009fcc, 0x40000014},
--      {0x0000a20c, 0x00000000},
--      {0x0000a210, 0x00000000},
--      {0x0000a220, 0x00000000},
--      {0x0000a224, 0x00000000},
--      {0x0000a228, 0x10002310},
--      {0x0000a23c, 0x00000000},
--      {0x0000a244, 0x0c000000},
--      {0x0000a2a0, 0x00000001},
--      {0x0000a2c0, 0x00000001},
--      {0x0000a2c8, 0x00000000},
--      {0x0000a2cc, 0x18c43433},
--      {0x0000a2d4, 0x00000000},
--      {0x0000a2dc, 0x00000000},
--      {0x0000a2e0, 0x00000000},
--      {0x0000a2e4, 0x00000000},
--      {0x0000a2e8, 0x00000000},
--      {0x0000a2ec, 0x00000000},
--      {0x0000a2f0, 0x00000000},
--      {0x0000a2f4, 0x00000000},
--      {0x0000a2f8, 0x00000000},
--      {0x0000a344, 0x00000000},
--      {0x0000a34c, 0x00000000},
--      {0x0000a350, 0x0000a000},
--      {0x0000a364, 0x00000000},
--      {0x0000a370, 0x00000000},
--      {0x0000a390, 0x00000001},
--      {0x0000a394, 0x00000444},
--      {0x0000a398, 0x001f0e0f},
--      {0x0000a39c, 0x0075393f},
--      {0x0000a3a0, 0xb79f6427},
--      {0x0000a3a4, 0x000000ff},
--      {0x0000a3a8, 0x3b3b3b3b},
--      {0x0000a3ac, 0x2f2f2f2f},
--      {0x0000a3c0, 0x20202020},
--      {0x0000a3c4, 0x22222220},
--      {0x0000a3c8, 0x20200020},
--      {0x0000a3cc, 0x20202020},
--      {0x0000a3d0, 0x20202020},
--      {0x0000a3d4, 0x20202020},
--      {0x0000a3d8, 0x20202020},
--      {0x0000a3dc, 0x20202020},
--      {0x0000a3e0, 0x20202020},
--      {0x0000a3e4, 0x20202020},
--      {0x0000a3e8, 0x20202020},
--      {0x0000a3ec, 0x20202020},
--      {0x0000a3f0, 0x00000000},
--      {0x0000a3f4, 0x00000006},
--      {0x0000a3f8, 0x0cdbd380},
--      {0x0000a3fc, 0x000f0f01},
--      {0x0000a400, 0x8fa91f01},
--      {0x0000a404, 0x00000000},
--      {0x0000a408, 0x0e79e5c6},
--      {0x0000a40c, 0x00820820},
--      {0x0000a414, 0x1ce739cf},
--      {0x0000a418, 0x2d0019ce},
--      {0x0000a41c, 0x1ce739ce},
--      {0x0000a420, 0x000001ce},
--      {0x0000a424, 0x1ce739ce},
--      {0x0000a428, 0x000001ce},
--      {0x0000a42c, 0x1ce739ce},
--      {0x0000a430, 0x1ce739ce},
--      {0x0000a434, 0x00000000},
--      {0x0000a438, 0x00001801},
--      {0x0000a43c, 0x00000000},
--      {0x0000a440, 0x00000000},
--      {0x0000a444, 0x00000000},
--      {0x0000a448, 0x04000000},
--      {0x0000a44c, 0x00000001},
--      {0x0000a450, 0x00010000},
--      {0x0000a5c4, 0xbfad9d74},
--      {0x0000a5c8, 0x0048060a},
--      {0x0000a5cc, 0x00000637},
--      {0x0000a760, 0x03020100},
--      {0x0000a764, 0x09080504},
--      {0x0000a768, 0x0d0c0b0a},
--      {0x0000a76c, 0x13121110},
--      {0x0000a770, 0x31301514},
--      {0x0000a774, 0x35343332},
--      {0x0000a778, 0x00000036},
--      {0x0000a780, 0x00000838},
--      {0x0000a7c0, 0x00000000},
--      {0x0000a7c4, 0xfffffffc},
--      {0x0000a7c8, 0x00000000},
--      {0x0000a7cc, 0x00000000},
--      {0x0000a7d0, 0x00000000},
--      {0x0000a7d4, 0x00000004},
--      {0x0000a7dc, 0x00000000},
--};
--
--static const u32 ar9485Common_1_1[][2] = {
--      /*  Addr      allmodes */
--      {0x00007010, 0x00000022},
--      {0x00007020, 0x00000000},
--      {0x00007034, 0x00000002},
--      {0x00007038, 0x000004c2},
--};
--
--static const u32 ar9485_1_1_baseband_postamble[][5] = {
--      /* Addr       5G_HT20        5G_HT40       2G_HT40       2G_HT20 */
--      {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
--      {0x00009820, 0x206a002e, 0x206a002e, 0x206a002e, 0x206a002e},
--      {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
--      {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
--      {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
--      {0x00009830, 0x0000059c, 0x0000059c, 0x0000059c, 0x0000059c},
--      {0x00009c00, 0x00000044, 0x00000044, 0x00000044, 0x00000044},
--      {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0},
--      {0x00009e04, 0x00182020, 0x00182020, 0x00182020, 0x00182020},
--      {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
--      {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec80d2e, 0x7ec80d2e},
--      {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e},
--      {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c},
--      {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce},
--      {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021},
--      {0x00009e3c, 0xcf946220, 0xcf946220, 0xcf946222, 0xcf946222},
--      {0x00009e44, 0x02321e27, 0x02321e27, 0x02282324, 0x02282324},
--      {0x00009e48, 0x5030201a, 0x5030201a, 0x50302010, 0x50302010},
--      {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
--      {0x0000a204, 0x01303fc0, 0x01303fc4, 0x01303fc4, 0x01303fc0},
--      {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
--      {0x0000a230, 0x0000400a, 0x00004014, 0x00004016, 0x0000400b},
--      {0x0000a234, 0x10000fff, 0x10000fff, 0x10000fff, 0x10000fff},
--      {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018},
--      {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108},
--      {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898},
--      {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002},
--      {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
--      {0x0000a260, 0x3a021501, 0x3a021501, 0x3a021501, 0x3a021501},
--      {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
--      {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b},
--      {0x0000a284, 0x00000000, 0x00000000, 0x000002a0, 0x000002a0},
--      {0x0000a288, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a28c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
--      {0x0000a2d0, 0x00071981, 0x00071981, 0x00071982, 0x00071982},
--      {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
--      {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000be04, 0x00802020, 0x00802020, 0x00802020, 0x00802020},
--      {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--};
--
--static const u32 ar9485Modes_high_ob_db_tx_gain_1_1[][5] = {
--      /* Addr        5G_HT20       5G_HT40       2G_HT40       2G_HT20 */
--      {0x000098bc, 0x00000002, 0x00000002, 0x00000002, 0x00000002},
--      {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
--      {0x0000a458, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x21000603, 0x21000603},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x25000605, 0x25000605},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2a000a03, 0x2a000a03},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x2c000a04, 0x2c000a04},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x34000e20, 0x34000e20},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x35000e21, 0x35000e21},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x43000e62, 0x43000e62},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x45000e63, 0x45000e63},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x49000e65, 0x49000e65},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x4b000e66, 0x4b000e66},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x4d001645, 0x4d001645},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x51001865, 0x51001865},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x55001a86, 0x55001a86},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x57001ce9, 0x57001ce9},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5a001ceb, 0x5a001ceb},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000b500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b504, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b508, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b50c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b510, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b514, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b518, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b51c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b520, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b524, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b528, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b52c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b530, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b534, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b538, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b53c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b540, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b544, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b548, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b54c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b550, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b554, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b558, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b55c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b560, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b564, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b568, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b56c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b570, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b574, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b578, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b57c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x00016044, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db},
--      {0x00016048, 0x6c924260, 0x6c924260, 0x6c924260, 0x6c924260},
--};
--
--static const u32 ar9485_modes_lowest_ob_db_tx_gain_1_1[][5] = {
--      /* Addr        5G_HT20       5G_HT40       2G_HT40       2G_HT20  */
--      {0x000098bc, 0x00000002, 0x00000002, 0x00000002, 0x00000002},
--      {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
--      {0x0000a458, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x21000603, 0x21000603},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x25000605, 0x25000605},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2a000a03, 0x2a000a03},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x2c000a04, 0x2c000a04},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x34000e20, 0x34000e20},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x35000e21, 0x35000e21},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x43000e62, 0x43000e62},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x45000e63, 0x45000e63},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x49000e65, 0x49000e65},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x4b000e66, 0x4b000e66},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x4d001645, 0x4d001645},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x51001865, 0x51001865},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x55001a86, 0x55001a86},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x57001ce9, 0x57001ce9},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5a001ceb, 0x5a001ceb},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000b500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b504, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b508, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b50c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b510, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b514, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b518, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b51c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b520, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b524, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b528, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b52c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b530, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b534, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b538, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b53c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b540, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b544, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b548, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b54c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b550, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b554, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b558, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b55c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b560, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b564, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b568, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b56c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b570, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b574, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b578, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b57c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x00016044, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db},
--      {0x00016048, 0x6c924260, 0x6c924260, 0x6c924260, 0x6c924260},
--};
--
--static const u32 ar9485_1_1_radio_postamble[][2] = {
--      /* Addr        allmodes */
--      {0x0001609c, 0x0b283f31},
--      {0x000160ac, 0x24611800},
--      {0x000160b0, 0x03284f3e},
--      {0x0001610c, 0x00170000},
--      {0x00016140, 0x50804008},
--};
--
--static const u32 ar9485_1_1_mac_postamble[][5] = {
--      /* Addr        5G_HT20       5G_HT40       2G_HT40       2G_HT20 */
--      {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
--      {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
--      {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
--      {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
--      {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
--      {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
--      {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
--      {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
--};
-+/* AR9485 1.0 */
--static const u32 ar9485_1_1_radio_core[][2] = {
--      /* Addr        allmodes */
--      {0x00016000, 0x36db6db6},
--      {0x00016004, 0x6db6db40},
--      {0x00016008, 0x73800000},
--      {0x0001600c, 0x00000000},
--      {0x00016040, 0x7f80fff8},
--      {0x0001604c, 0x000f0278},
--      {0x00016050, 0x4db6db8c},
--      {0x00016054, 0x6db60000},
--      {0x00016080, 0x00080000},
--      {0x00016084, 0x0e48048c},
--      {0x00016088, 0x14214514},
--      {0x0001608c, 0x119f081e},
--      {0x00016090, 0x24926490},
--      {0x00016098, 0xd28b3330},
--      {0x000160a0, 0xc2108ffe},
--      {0x000160a4, 0x812fc370},
--      {0x000160a8, 0x423c8000},
--      {0x000160b4, 0x92480040},
--      {0x000160c0, 0x006db6db},
--      {0x000160c4, 0x0186db60},
--      {0x000160c8, 0x6db6db6c},
--      {0x000160cc, 0x6de6fbe0},
--      {0x000160d0, 0xf7dfcf3c},
--      {0x00016100, 0x04cb0001},
--      {0x00016104, 0xfff80015},
--      {0x00016108, 0x00080010},
--      {0x00016144, 0x01884080},
--      {0x00016148, 0x00008040},
--      {0x00016240, 0x08400000},
--      {0x00016244, 0x1bf90f00},
--      {0x00016248, 0x00000000},
--      {0x0001624c, 0x00000000},
--      {0x00016280, 0x01000015},
--      {0x00016284, 0x00d30000},
--      {0x00016288, 0x00318000},
--      {0x0001628c, 0x50000000},
--      {0x00016290, 0x4b96210f},
--      {0x00016380, 0x00000000},
--      {0x00016384, 0x00000000},
--      {0x00016388, 0x00800700},
--      {0x0001638c, 0x00800700},
--      {0x00016390, 0x00800700},
--      {0x00016394, 0x00000000},
--      {0x00016398, 0x00000000},
--      {0x0001639c, 0x00000000},
--      {0x000163a0, 0x00000001},
--      {0x000163a4, 0x00000001},
--      {0x000163a8, 0x00000000},
--      {0x000163ac, 0x00000000},
--      {0x000163b0, 0x00000000},
--      {0x000163b4, 0x00000000},
--      {0x000163b8, 0x00000000},
--      {0x000163bc, 0x00000000},
--      {0x000163c0, 0x000000a0},
--      {0x000163c4, 0x000c0000},
--      {0x000163c8, 0x14021402},
--      {0x000163cc, 0x00001402},
--      {0x000163d0, 0x00000000},
--      {0x000163d4, 0x00000000},
--      {0x00016c40, 0x13188278},
--      {0x00016c44, 0x12000000},
--};
-+#define ar9485_1_1_mac_postamble ar9300_2p2_mac_postamble
--static const u32 ar9485_1_1_pcie_phy_pll_on_clkreq_enable_L1[][2] = {
--      /* Addr        allmodes */
--      {0x00018c00, 0x18052e5e},
-+static const u32 ar9485_1_1_pcie_phy_pll_on_clkreq_disable_L1[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00018c00, 0x18012e5e},
-       {0x00018c04, 0x000801d8},
-       {0x00018c08, 0x0000080c},
- };
-+static const u32 ar9485Common_wo_xlna_rx_gain_1_1[][2] = {
-+      /* Addr      allmodes  */
-+      {0x0000a000, 0x00060005},
-+      {0x0000a004, 0x00810080},
-+      {0x0000a008, 0x00830082},
-+      {0x0000a00c, 0x00850084},
-+      {0x0000a010, 0x01820181},
-+      {0x0000a014, 0x01840183},
-+      {0x0000a018, 0x01880185},
-+      {0x0000a01c, 0x018a0189},
-+      {0x0000a020, 0x02850284},
-+      {0x0000a024, 0x02890288},
-+      {0x0000a028, 0x028b028a},
-+      {0x0000a02c, 0x03850384},
-+      {0x0000a030, 0x03890388},
-+      {0x0000a034, 0x038b038a},
-+      {0x0000a038, 0x038d038c},
-+      {0x0000a03c, 0x03910390},
-+      {0x0000a040, 0x03930392},
-+      {0x0000a044, 0x03950394},
-+      {0x0000a048, 0x00000396},
-+      {0x0000a04c, 0x00000000},
-+      {0x0000a050, 0x00000000},
-+      {0x0000a054, 0x00000000},
-+      {0x0000a058, 0x00000000},
-+      {0x0000a05c, 0x00000000},
-+      {0x0000a060, 0x00000000},
-+      {0x0000a064, 0x00000000},
-+      {0x0000a068, 0x00000000},
-+      {0x0000a06c, 0x00000000},
-+      {0x0000a070, 0x00000000},
-+      {0x0000a074, 0x00000000},
-+      {0x0000a078, 0x00000000},
-+      {0x0000a07c, 0x00000000},
-+      {0x0000a080, 0x28282828},
-+      {0x0000a084, 0x28282828},
-+      {0x0000a088, 0x28282828},
-+      {0x0000a08c, 0x28282828},
-+      {0x0000a090, 0x28282828},
-+      {0x0000a094, 0x24242428},
-+      {0x0000a098, 0x171e1e1e},
-+      {0x0000a09c, 0x02020b0b},
-+      {0x0000a0a0, 0x02020202},
-+      {0x0000a0a4, 0x00000000},
-+      {0x0000a0a8, 0x00000000},
-+      {0x0000a0ac, 0x00000000},
-+      {0x0000a0b0, 0x00000000},
-+      {0x0000a0b4, 0x00000000},
-+      {0x0000a0b8, 0x00000000},
-+      {0x0000a0bc, 0x00000000},
-+      {0x0000a0c0, 0x22072208},
-+      {0x0000a0c4, 0x22052206},
-+      {0x0000a0c8, 0x22032204},
-+      {0x0000a0cc, 0x22012202},
-+      {0x0000a0d0, 0x221f2200},
-+      {0x0000a0d4, 0x221d221e},
-+      {0x0000a0d8, 0x33023303},
-+      {0x0000a0dc, 0x33003301},
-+      {0x0000a0e0, 0x331e331f},
-+      {0x0000a0e4, 0x4402331d},
-+      {0x0000a0e8, 0x44004401},
-+      {0x0000a0ec, 0x441e441f},
-+      {0x0000a0f0, 0x55025503},
-+      {0x0000a0f4, 0x55005501},
-+      {0x0000a0f8, 0x551e551f},
-+      {0x0000a0fc, 0x6602551d},
-+      {0x0000a100, 0x66006601},
-+      {0x0000a104, 0x661e661f},
-+      {0x0000a108, 0x7703661d},
-+      {0x0000a10c, 0x77017702},
-+      {0x0000a110, 0x00007700},
-+      {0x0000a114, 0x00000000},
-+      {0x0000a118, 0x00000000},
-+      {0x0000a11c, 0x00000000},
-+      {0x0000a120, 0x00000000},
-+      {0x0000a124, 0x00000000},
-+      {0x0000a128, 0x00000000},
-+      {0x0000a12c, 0x00000000},
-+      {0x0000a130, 0x00000000},
-+      {0x0000a134, 0x00000000},
-+      {0x0000a138, 0x00000000},
-+      {0x0000a13c, 0x00000000},
-+      {0x0000a140, 0x001f0000},
-+      {0x0000a144, 0x111f1100},
-+      {0x0000a148, 0x111d111e},
-+      {0x0000a14c, 0x111b111c},
-+      {0x0000a150, 0x22032204},
-+      {0x0000a154, 0x22012202},
-+      {0x0000a158, 0x221f2200},
-+      {0x0000a15c, 0x221d221e},
-+      {0x0000a160, 0x33013302},
-+      {0x0000a164, 0x331f3300},
-+      {0x0000a168, 0x4402331e},
-+      {0x0000a16c, 0x44004401},
-+      {0x0000a170, 0x441e441f},
-+      {0x0000a174, 0x55015502},
-+      {0x0000a178, 0x551f5500},
-+      {0x0000a17c, 0x6602551e},
-+      {0x0000a180, 0x66006601},
-+      {0x0000a184, 0x661e661f},
-+      {0x0000a188, 0x7703661d},
-+      {0x0000a18c, 0x77017702},
-+      {0x0000a190, 0x00007700},
-+      {0x0000a194, 0x00000000},
-+      {0x0000a198, 0x00000000},
-+      {0x0000a19c, 0x00000000},
-+      {0x0000a1a0, 0x00000000},
-+      {0x0000a1a4, 0x00000000},
-+      {0x0000a1a8, 0x00000000},
-+      {0x0000a1ac, 0x00000000},
-+      {0x0000a1b0, 0x00000000},
-+      {0x0000a1b4, 0x00000000},
-+      {0x0000a1b8, 0x00000000},
-+      {0x0000a1bc, 0x00000000},
-+      {0x0000a1c0, 0x00000000},
-+      {0x0000a1c4, 0x00000000},
-+      {0x0000a1c8, 0x00000000},
-+      {0x0000a1cc, 0x00000000},
-+      {0x0000a1d0, 0x00000000},
-+      {0x0000a1d4, 0x00000000},
-+      {0x0000a1d8, 0x00000000},
-+      {0x0000a1dc, 0x00000000},
-+      {0x0000a1e0, 0x00000000},
-+      {0x0000a1e4, 0x00000000},
-+      {0x0000a1e8, 0x00000000},
-+      {0x0000a1ec, 0x00000000},
-+      {0x0000a1f0, 0x00000396},
-+      {0x0000a1f4, 0x00000396},
-+      {0x0000a1f8, 0x00000396},
-+      {0x0000a1fc, 0x00000296},
-+};
-+
- static const u32 ar9485Modes_high_power_tx_gain_1_1[][5] = {
--      /* Addr        5G_HT20       5G_HT40       2G_HT40       2G_HT20 */
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x000098bc, 0x00000002, 0x00000002, 0x00000002, 0x00000002},
-       {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
-       {0x0000a458, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-@@ -681,8 +234,14 @@ static const u32 ar9485Modes_high_power_
-       {0x00016048, 0x6c924260, 0x6c924260, 0x6c924260, 0x6c924260},
- };
-+#define ar9485Modes_high_ob_db_tx_gain_1_1 ar9485Modes_high_power_tx_gain_1_1
-+
-+#define ar9485Modes_low_ob_db_tx_gain_1_1 ar9485Modes_high_ob_db_tx_gain_1_1
-+
-+#define ar9485_modes_lowest_ob_db_tx_gain_1_1 ar9485Modes_low_ob_db_tx_gain_1_1
-+
- static const u32 ar9485_1_1[][2] = {
--      /* Addr        allmodes */
-+      /* Addr      allmodes  */
-       {0x0000a580, 0x00000000},
-       {0x0000a584, 0x00000000},
-       {0x0000a588, 0x00000000},
-@@ -701,194 +260,210 @@ static const u32 ar9485_1_1[][2] = {
-       {0x0000a5bc, 0x00000000},
- };
--static const u32 ar9485_modes_green_ob_db_tx_gain_1_1[][5] = {
--      /* Addr        5G_HT20       5G_HT40       2G_HT40       2G_HT20 */
--      {0x000098bc, 0x00000003, 0x00000003, 0x00000003, 0x00000003},
--      {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
--      {0x0000a458, 0x80000000, 0x80000000, 0x80000000, 0x80000000},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000006, 0x00000006},
--      {0x0000a504, 0x05062002, 0x05062002, 0x03000201, 0x03000201},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x06000203, 0x06000203},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0a000401, 0x0a000401},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x0e000403, 0x0e000403},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x12000405, 0x12000405},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x15000604, 0x15000604},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x18000605, 0x18000605},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x1c000a04, 0x1c000a04},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x21000a06, 0x21000a06},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x29000a24, 0x29000a24},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x2f000e21, 0x2f000e21},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x31000e20, 0x31000e20},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x33000e20, 0x33000e20},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x43000e62, 0x43000e62},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x45000e63, 0x45000e63},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x49000e65, 0x49000e65},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x4b000e66, 0x4b000e66},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x4d001645, 0x4d001645},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x51001865, 0x51001865},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x55001a86, 0x55001a86},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x57001ce9, 0x57001ce9},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5a001ceb, 0x5a001ceb},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000b500, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b504, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b508, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b50c, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b510, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b514, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b518, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b51c, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b520, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b524, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b528, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
--      {0x0000b52c, 0x0000002a, 0x0000002a, 0x0000002a, 0x0000002a},
--      {0x0000b530, 0x0000003a, 0x0000003a, 0x0000003a, 0x0000003a},
--      {0x0000b534, 0x0000004a, 0x0000004a, 0x0000004a, 0x0000004a},
--      {0x0000b538, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b53c, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b540, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b544, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b548, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b54c, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b550, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b554, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b558, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b55c, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b560, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b564, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b568, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b56c, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b570, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b574, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b578, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x0000b57c, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
--      {0x00016044, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db},
--      {0x00016048, 0x6c924260, 0x6c924260, 0x6c924260, 0x6c924260},
--};
--
--static const u32 ar9485_1_1_pcie_phy_clkreq_disable_L1[][2] = {
--      /* Addr        allmodes */
--      {0x00018c00, 0x18013e5e},
--      {0x00018c04, 0x000801d8},
--      {0x00018c08, 0x0000080c},
--};
--
--static const u32 ar9485_1_1_soc_preamble[][2] = {
--      /* Addr        allmodes */
--      {0x00004014, 0xba280400},
--      {0x00004090, 0x00aa10aa},
--      {0x000040a4, 0x00a0c9c9},
--      {0x00007010, 0x00000022},
--      {0x00007020, 0x00000000},
--      {0x00007034, 0x00000002},
--      {0x00007038, 0x000004c2},
--      {0x00007048, 0x00000002},
--};
--
--static const u32 ar9485_1_1_baseband_core_txfir_coeff_japan_2484[][2] = {
--      /* Addr        allmodes */
--      {0x0000a398, 0x00000000},
--      {0x0000a39c, 0x6f7f0301},
--      {0x0000a3a0, 0xca9228ee},
--};
--
--static const u32 ar9485Modes_low_ob_db_tx_gain_1_1[][5] = {
--      /* Addr        5G_HT20       5G_HT40       2G_HT40       2G_HT20  */
--      {0x000098bc, 0x00000002, 0x00000002, 0x00000002, 0x00000002},
--      {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
--      {0x0000a458, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
--      {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
--      {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
--      {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
--      {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
--      {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
--      {0x0000a520, 0x2f001f04, 0x2f001f04, 0x21000603, 0x21000603},
--      {0x0000a524, 0x35001fc4, 0x35001fc4, 0x25000605, 0x25000605},
--      {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2a000a03, 0x2a000a03},
--      {0x0000a52c, 0x41023e85, 0x41023e85, 0x2c000a04, 0x2c000a04},
--      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x34000e20, 0x34000e20},
--      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x35000e21, 0x35000e21},
--      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x43000e62, 0x43000e62},
--      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x45000e63, 0x45000e63},
--      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x49000e65, 0x49000e65},
--      {0x0000a544, 0x6502feca, 0x6502feca, 0x4b000e66, 0x4b000e66},
--      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x4d001645, 0x4d001645},
--      {0x0000a54c, 0x7203feca, 0x7203feca, 0x51001865, 0x51001865},
--      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x55001a86, 0x55001a86},
--      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x57001ce9, 0x57001ce9},
--      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5a001ceb, 0x5a001ceb},
--      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
--      {0x0000b500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b504, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b508, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b50c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b510, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b514, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b518, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b51c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b520, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b524, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b528, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b52c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b530, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b534, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b538, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b53c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b540, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b544, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b548, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b54c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b550, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b554, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b558, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b55c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b560, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b564, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b568, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b56c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b570, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b574, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b578, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000b57c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x00016044, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db},
--      {0x00016048, 0x6c924260, 0x6c924260, 0x6c924260, 0x6c924260},
--};
--
--static const u32 ar9485_fast_clock_1_1_baseband_postamble[][3] = {
--      /* Addr        5G_HT2        5G_HT40  */
--      {0x00009e00, 0x03721821, 0x03721821},
--      {0x0000a230, 0x0000400b, 0x00004016},
--      {0x0000a254, 0x00000898, 0x00001130},
-+static const u32 ar9485_1_1_radio_core[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00016000, 0x36db6db6},
-+      {0x00016004, 0x6db6db40},
-+      {0x00016008, 0x73800000},
-+      {0x0001600c, 0x00000000},
-+      {0x00016040, 0x7f80fff8},
-+      {0x0001604c, 0x000f0278},
-+      {0x00016050, 0x4db6db8c},
-+      {0x00016054, 0x6db60000},
-+      {0x00016080, 0x00080000},
-+      {0x00016084, 0x0e48048c},
-+      {0x00016088, 0x14214514},
-+      {0x0001608c, 0x119f081e},
-+      {0x00016090, 0x24926490},
-+      {0x00016098, 0xd28b3330},
-+      {0x000160a0, 0xc2108ffe},
-+      {0x000160a4, 0x812fc370},
-+      {0x000160a8, 0x423c8000},
-+      {0x000160b4, 0x92480040},
-+      {0x000160c0, 0x006db6db},
-+      {0x000160c4, 0x0186db60},
-+      {0x000160c8, 0x6db6db6c},
-+      {0x000160cc, 0x6de6fbe0},
-+      {0x000160d0, 0xf7dfcf3c},
-+      {0x00016100, 0x04cb0001},
-+      {0x00016104, 0xfff80015},
-+      {0x00016108, 0x00080010},
-+      {0x00016144, 0x01884080},
-+      {0x00016148, 0x00008040},
-+      {0x00016240, 0x08400000},
-+      {0x00016244, 0x1bf90f00},
-+      {0x00016248, 0x00000000},
-+      {0x0001624c, 0x00000000},
-+      {0x00016280, 0x01000015},
-+      {0x00016284, 0x00d30000},
-+      {0x00016288, 0x00318000},
-+      {0x0001628c, 0x50000000},
-+      {0x00016290, 0x4b96210f},
-+      {0x00016380, 0x00000000},
-+      {0x00016384, 0x00000000},
-+      {0x00016388, 0x00800700},
-+      {0x0001638c, 0x00800700},
-+      {0x00016390, 0x00800700},
-+      {0x00016394, 0x00000000},
-+      {0x00016398, 0x00000000},
-+      {0x0001639c, 0x00000000},
-+      {0x000163a0, 0x00000001},
-+      {0x000163a4, 0x00000001},
-+      {0x000163a8, 0x00000000},
-+      {0x000163ac, 0x00000000},
-+      {0x000163b0, 0x00000000},
-+      {0x000163b4, 0x00000000},
-+      {0x000163b8, 0x00000000},
-+      {0x000163bc, 0x00000000},
-+      {0x000163c0, 0x000000a0},
-+      {0x000163c4, 0x000c0000},
-+      {0x000163c8, 0x14021402},
-+      {0x000163cc, 0x00001402},
-+      {0x000163d0, 0x00000000},
-+      {0x000163d4, 0x00000000},
-+      {0x00016c40, 0x13188278},
-+      {0x00016c44, 0x12000000},
- };
--static const u32 ar9485_1_1_pcie_phy_pll_on_clkreq_disable_L1[][2] = {
--      /* Addr        allmodes  */
--      {0x00018c00, 0x18012e5e},
--      {0x00018c04, 0x000801d8},
--      {0x00018c08, 0x0000080c},
-+static const u32 ar9485_1_1_baseband_core[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00009800, 0xafe68e30},
-+      {0x00009804, 0xfd14e000},
-+      {0x00009808, 0x9c0a8f6b},
-+      {0x0000980c, 0x04800000},
-+      {0x00009814, 0x9280c00a},
-+      {0x00009818, 0x00000000},
-+      {0x0000981c, 0x00020028},
-+      {0x00009834, 0x5f3ca3de},
-+      {0x00009838, 0x0108ecff},
-+      {0x0000983c, 0x14750600},
-+      {0x00009880, 0x201fff00},
-+      {0x00009884, 0x00001042},
-+      {0x000098a4, 0x00200400},
-+      {0x000098b0, 0x52440bbe},
-+      {0x000098d0, 0x004b6a8e},
-+      {0x000098d4, 0x00000820},
-+      {0x000098dc, 0x00000000},
-+      {0x000098f0, 0x00000000},
-+      {0x000098f4, 0x00000000},
-+      {0x00009c04, 0x00000000},
-+      {0x00009c08, 0x03200000},
-+      {0x00009c0c, 0x00000000},
-+      {0x00009c10, 0x00000000},
-+      {0x00009c14, 0x00046384},
-+      {0x00009c18, 0x05b6b440},
-+      {0x00009c1c, 0x00b6b440},
-+      {0x00009d00, 0xc080a333},
-+      {0x00009d04, 0x40206c10},
-+      {0x00009d08, 0x009c4060},
-+      {0x00009d0c, 0x1883800a},
-+      {0x00009d10, 0x01834061},
-+      {0x00009d14, 0x00c00400},
-+      {0x00009d18, 0x00000000},
-+      {0x00009d1c, 0x00000000},
-+      {0x00009e08, 0x0038233c},
-+      {0x00009e24, 0x9927b515},
-+      {0x00009e28, 0x12ef0200},
-+      {0x00009e30, 0x06336f77},
-+      {0x00009e34, 0x6af6532f},
-+      {0x00009e38, 0x0cc80c00},
-+      {0x00009e40, 0x0d261820},
-+      {0x00009e4c, 0x00001004},
-+      {0x00009e50, 0x00ff03f1},
-+      {0x00009fc0, 0x80be4788},
-+      {0x00009fc4, 0x0001efb5},
-+      {0x00009fcc, 0x40000014},
-+      {0x0000a20c, 0x00000000},
-+      {0x0000a210, 0x00000000},
-+      {0x0000a220, 0x00000000},
-+      {0x0000a224, 0x00000000},
-+      {0x0000a228, 0x10002310},
-+      {0x0000a23c, 0x00000000},
-+      {0x0000a244, 0x0c000000},
-+      {0x0000a2a0, 0x00000001},
-+      {0x0000a2c0, 0x00000001},
-+      {0x0000a2c8, 0x00000000},
-+      {0x0000a2cc, 0x18c43433},
-+      {0x0000a2d4, 0x00000000},
-+      {0x0000a2dc, 0x00000000},
-+      {0x0000a2e0, 0x00000000},
-+      {0x0000a2e4, 0x00000000},
-+      {0x0000a2e8, 0x00000000},
-+      {0x0000a2ec, 0x00000000},
-+      {0x0000a2f0, 0x00000000},
-+      {0x0000a2f4, 0x00000000},
-+      {0x0000a2f8, 0x00000000},
-+      {0x0000a344, 0x00000000},
-+      {0x0000a34c, 0x00000000},
-+      {0x0000a350, 0x0000a000},
-+      {0x0000a364, 0x00000000},
-+      {0x0000a370, 0x00000000},
-+      {0x0000a390, 0x00000001},
-+      {0x0000a394, 0x00000444},
-+      {0x0000a398, 0x001f0e0f},
-+      {0x0000a39c, 0x0075393f},
-+      {0x0000a3a0, 0xb79f6427},
-+      {0x0000a3a4, 0x000000ff},
-+      {0x0000a3a8, 0x3b3b3b3b},
-+      {0x0000a3ac, 0x2f2f2f2f},
-+      {0x0000a3c0, 0x20202020},
-+      {0x0000a3c4, 0x22222220},
-+      {0x0000a3c8, 0x20200020},
-+      {0x0000a3cc, 0x20202020},
-+      {0x0000a3d0, 0x20202020},
-+      {0x0000a3d4, 0x20202020},
-+      {0x0000a3d8, 0x20202020},
-+      {0x0000a3dc, 0x20202020},
-+      {0x0000a3e0, 0x20202020},
-+      {0x0000a3e4, 0x20202020},
-+      {0x0000a3e8, 0x20202020},
-+      {0x0000a3ec, 0x20202020},
-+      {0x0000a3f0, 0x00000000},
-+      {0x0000a3f4, 0x00000006},
-+      {0x0000a3f8, 0x0cdbd380},
-+      {0x0000a3fc, 0x000f0f01},
-+      {0x0000a400, 0x8fa91f01},
-+      {0x0000a404, 0x00000000},
-+      {0x0000a408, 0x0e79e5c6},
-+      {0x0000a40c, 0x00820820},
-+      {0x0000a414, 0x1ce739cf},
-+      {0x0000a418, 0x2d0019ce},
-+      {0x0000a41c, 0x1ce739ce},
-+      {0x0000a420, 0x000001ce},
-+      {0x0000a424, 0x1ce739ce},
-+      {0x0000a428, 0x000001ce},
-+      {0x0000a42c, 0x1ce739ce},
-+      {0x0000a430, 0x1ce739ce},
-+      {0x0000a434, 0x00000000},
-+      {0x0000a438, 0x00001801},
-+      {0x0000a43c, 0x00000000},
-+      {0x0000a440, 0x00000000},
-+      {0x0000a444, 0x00000000},
-+      {0x0000a448, 0x04000000},
-+      {0x0000a44c, 0x00000001},
-+      {0x0000a450, 0x00010000},
-+      {0x0000a5c4, 0xbfad9d74},
-+      {0x0000a5c8, 0x0048060a},
-+      {0x0000a5cc, 0x00000637},
-+      {0x0000a760, 0x03020100},
-+      {0x0000a764, 0x09080504},
-+      {0x0000a768, 0x0d0c0b0a},
-+      {0x0000a76c, 0x13121110},
-+      {0x0000a770, 0x31301514},
-+      {0x0000a774, 0x35343332},
-+      {0x0000a778, 0x00000036},
-+      {0x0000a780, 0x00000838},
-+      {0x0000a7c0, 0x00000000},
-+      {0x0000a7c4, 0xfffffffc},
-+      {0x0000a7c8, 0x00000000},
-+      {0x0000a7cc, 0x00000000},
-+      {0x0000a7d0, 0x00000000},
-+      {0x0000a7d4, 0x00000004},
-+      {0x0000a7dc, 0x00000000},
- };
- static const u32 ar9485_common_rx_gain_1_1[][2] = {
--      /* Addr        allmodes */
-+      /* Addr      allmodes  */
-       {0x0000a000, 0x00010000},
-       {0x0000a004, 0x00030002},
-       {0x0000a008, 0x00050004},
-@@ -945,153 +520,14 @@ static const u32 ar9485_common_rx_gain_1
-       {0x0000a0d4, 0x22012202},
-       {0x0000a0d8, 0x221f2200},
-       {0x0000a0dc, 0x221d221e},
--      {0x0000a0e0, 0x33013302},
--      {0x0000a0e4, 0x331f3300},
--      {0x0000a0e8, 0x4402331e},
--      {0x0000a0ec, 0x44004401},
--      {0x0000a0f0, 0x441e441f},
--      {0x0000a0f4, 0x55015502},
--      {0x0000a0f8, 0x551f5500},
--      {0x0000a0fc, 0x6602551e},
--      {0x0000a100, 0x66006601},
--      {0x0000a104, 0x661e661f},
--      {0x0000a108, 0x7703661d},
--      {0x0000a10c, 0x77017702},
--      {0x0000a110, 0x00007700},
--      {0x0000a114, 0x00000000},
--      {0x0000a118, 0x00000000},
--      {0x0000a11c, 0x00000000},
--      {0x0000a120, 0x00000000},
--      {0x0000a124, 0x00000000},
--      {0x0000a128, 0x00000000},
--      {0x0000a12c, 0x00000000},
--      {0x0000a130, 0x00000000},
--      {0x0000a134, 0x00000000},
--      {0x0000a138, 0x00000000},
--      {0x0000a13c, 0x00000000},
--      {0x0000a140, 0x001f0000},
--      {0x0000a144, 0x111f1100},
--      {0x0000a148, 0x111d111e},
--      {0x0000a14c, 0x111b111c},
--      {0x0000a150, 0x22032204},
--      {0x0000a154, 0x22012202},
--      {0x0000a158, 0x221f2200},
--      {0x0000a15c, 0x221d221e},
--      {0x0000a160, 0x33013302},
--      {0x0000a164, 0x331f3300},
--      {0x0000a168, 0x4402331e},
--      {0x0000a16c, 0x44004401},
--      {0x0000a170, 0x441e441f},
--      {0x0000a174, 0x55015502},
--      {0x0000a178, 0x551f5500},
--      {0x0000a17c, 0x6602551e},
--      {0x0000a180, 0x66006601},
--      {0x0000a184, 0x661e661f},
--      {0x0000a188, 0x7703661d},
--      {0x0000a18c, 0x77017702},
--      {0x0000a190, 0x00007700},
--      {0x0000a194, 0x00000000},
--      {0x0000a198, 0x00000000},
--      {0x0000a19c, 0x00000000},
--      {0x0000a1a0, 0x00000000},
--      {0x0000a1a4, 0x00000000},
--      {0x0000a1a8, 0x00000000},
--      {0x0000a1ac, 0x00000000},
--      {0x0000a1b0, 0x00000000},
--      {0x0000a1b4, 0x00000000},
--      {0x0000a1b8, 0x00000000},
--      {0x0000a1bc, 0x00000000},
--      {0x0000a1c0, 0x00000000},
--      {0x0000a1c4, 0x00000000},
--      {0x0000a1c8, 0x00000000},
--      {0x0000a1cc, 0x00000000},
--      {0x0000a1d0, 0x00000000},
--      {0x0000a1d4, 0x00000000},
--      {0x0000a1d8, 0x00000000},
--      {0x0000a1dc, 0x00000000},
--      {0x0000a1e0, 0x00000000},
--      {0x0000a1e4, 0x00000000},
--      {0x0000a1e8, 0x00000000},
--      {0x0000a1ec, 0x00000000},
--      {0x0000a1f0, 0x00000396},
--      {0x0000a1f4, 0x00000396},
--      {0x0000a1f8, 0x00000396},
--      {0x0000a1fc, 0x00000296},
--};
--
--static const u32 ar9485_1_1_pcie_phy_clkreq_enable_L1[][2] = {
--      /* Addr        allmodes */
--      {0x00018c00, 0x18053e5e},
--      {0x00018c04, 0x000801d8},
--      {0x00018c08, 0x0000080c},
--};
--
--static const u32 ar9485Common_wo_xlna_rx_gain_1_1[][2] = {
--      /* Addr        allmodes */
--      {0x0000a000, 0x00060005},
--      {0x0000a004, 0x00810080},
--      {0x0000a008, 0x00830082},
--      {0x0000a00c, 0x00850084},
--      {0x0000a010, 0x01820181},
--      {0x0000a014, 0x01840183},
--      {0x0000a018, 0x01880185},
--      {0x0000a01c, 0x018a0189},
--      {0x0000a020, 0x02850284},
--      {0x0000a024, 0x02890288},
--      {0x0000a028, 0x028b028a},
--      {0x0000a02c, 0x03850384},
--      {0x0000a030, 0x03890388},
--      {0x0000a034, 0x038b038a},
--      {0x0000a038, 0x038d038c},
--      {0x0000a03c, 0x03910390},
--      {0x0000a040, 0x03930392},
--      {0x0000a044, 0x03950394},
--      {0x0000a048, 0x00000396},
--      {0x0000a04c, 0x00000000},
--      {0x0000a050, 0x00000000},
--      {0x0000a054, 0x00000000},
--      {0x0000a058, 0x00000000},
--      {0x0000a05c, 0x00000000},
--      {0x0000a060, 0x00000000},
--      {0x0000a064, 0x00000000},
--      {0x0000a068, 0x00000000},
--      {0x0000a06c, 0x00000000},
--      {0x0000a070, 0x00000000},
--      {0x0000a074, 0x00000000},
--      {0x0000a078, 0x00000000},
--      {0x0000a07c, 0x00000000},
--      {0x0000a080, 0x28282828},
--      {0x0000a084, 0x28282828},
--      {0x0000a088, 0x28282828},
--      {0x0000a08c, 0x28282828},
--      {0x0000a090, 0x28282828},
--      {0x0000a094, 0x24242428},
--      {0x0000a098, 0x171e1e1e},
--      {0x0000a09c, 0x02020b0b},
--      {0x0000a0a0, 0x02020202},
--      {0x0000a0a4, 0x00000000},
--      {0x0000a0a8, 0x00000000},
--      {0x0000a0ac, 0x00000000},
--      {0x0000a0b0, 0x00000000},
--      {0x0000a0b4, 0x00000000},
--      {0x0000a0b8, 0x00000000},
--      {0x0000a0bc, 0x00000000},
--      {0x0000a0c0, 0x22072208},
--      {0x0000a0c4, 0x22052206},
--      {0x0000a0c8, 0x22032204},
--      {0x0000a0cc, 0x22012202},
--      {0x0000a0d0, 0x221f2200},
--      {0x0000a0d4, 0x221d221e},
--      {0x0000a0d8, 0x33023303},
--      {0x0000a0dc, 0x33003301},
--      {0x0000a0e0, 0x331e331f},
--      {0x0000a0e4, 0x4402331d},
--      {0x0000a0e8, 0x44004401},
--      {0x0000a0ec, 0x441e441f},
--      {0x0000a0f0, 0x55025503},
--      {0x0000a0f4, 0x55005501},
--      {0x0000a0f8, 0x551e551f},
--      {0x0000a0fc, 0x6602551d},
-+      {0x0000a0e0, 0x33013302},
-+      {0x0000a0e4, 0x331f3300},
-+      {0x0000a0e8, 0x4402331e},
-+      {0x0000a0ec, 0x44004401},
-+      {0x0000a0f0, 0x441e441f},
-+      {0x0000a0f4, 0x55015502},
-+      {0x0000a0f8, 0x551f5500},
-+      {0x0000a0fc, 0x6602551e},
-       {0x0000a100, 0x66006601},
-       {0x0000a104, 0x661e661f},
-       {0x0000a108, 0x7703661d},
-@@ -1158,4 +594,260 @@ static const u32 ar9485Common_wo_xlna_rx
-       {0x0000a1fc, 0x00000296},
- };
--#endif
-+static const u32 ar9485_1_1_pcie_phy_pll_on_clkreq_enable_L1[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00018c00, 0x18052e5e},
-+      {0x00018c04, 0x000801d8},
-+      {0x00018c08, 0x0000080c},
-+};
-+
-+static const u32 ar9485_1_1_pcie_phy_clkreq_enable_L1[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00018c00, 0x18053e5e},
-+      {0x00018c04, 0x000801d8},
-+      {0x00018c08, 0x0000080c},
-+};
-+
-+static const u32 ar9485_1_1_soc_preamble[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00004014, 0xba280400},
-+      {0x00004090, 0x00aa10aa},
-+      {0x000040a4, 0x00a0c9c9},
-+      {0x00007010, 0x00000022},
-+      {0x00007020, 0x00000000},
-+      {0x00007034, 0x00000002},
-+      {0x00007038, 0x000004c2},
-+      {0x00007048, 0x00000002},
-+};
-+
-+static const u32 ar9485_fast_clock_1_1_baseband_postamble[][3] = {
-+      /* Addr      5G_HT20     5G_HT40   */
-+      {0x00009e00, 0x03721821, 0x03721821},
-+      {0x0000a230, 0x0000400b, 0x00004016},
-+      {0x0000a254, 0x00000898, 0x00001130},
-+};
-+
-+static const u32 ar9485_1_1_baseband_postamble[][5] = {
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
-+      {0x00009820, 0x206a002e, 0x206a002e, 0x206a002e, 0x206a002e},
-+      {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-+      {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
-+      {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-+      {0x00009830, 0x0000059c, 0x0000059c, 0x0000059c, 0x0000059c},
-+      {0x00009c00, 0x00000044, 0x00000044, 0x00000044, 0x00000044},
-+      {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0},
-+      {0x00009e04, 0x00182020, 0x00182020, 0x00182020, 0x00182020},
-+      {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
-+      {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec80d2e, 0x7ec80d2e},
-+      {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e},
-+      {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c},
-+      {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce},
-+      {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021},
-+      {0x00009e3c, 0xcf946220, 0xcf946220, 0xcf946222, 0xcf946222},
-+      {0x00009e44, 0x02321e27, 0x02321e27, 0x02282324, 0x02282324},
-+      {0x00009e48, 0x5030201a, 0x5030201a, 0x50302010, 0x50302010},
-+      {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
-+      {0x0000a204, 0x01303fc0, 0x01303fc4, 0x01303fc4, 0x01303fc0},
-+      {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
-+      {0x0000a230, 0x0000400a, 0x00004014, 0x00004016, 0x0000400b},
-+      {0x0000a234, 0x10000fff, 0x10000fff, 0x10000fff, 0x10000fff},
-+      {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018},
-+      {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108},
-+      {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898},
-+      {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002},
-+      {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
-+      {0x0000a260, 0x3a021501, 0x3a021501, 0x3a021501, 0x3a021501},
-+      {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-+      {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b},
-+      {0x0000a284, 0x00000000, 0x00000000, 0x000002a0, 0x000002a0},
-+      {0x0000a288, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a28c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
-+      {0x0000a2d0, 0x00071981, 0x00071981, 0x00071982, 0x00071982},
-+      {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
-+      {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000be04, 0x00802020, 0x00802020, 0x00802020, 0x00802020},
-+      {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+};
-+
-+static const u32 ar9485_1_1_pcie_phy_clkreq_disable_L1[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00018c00, 0x18013e5e},
-+      {0x00018c04, 0x000801d8},
-+      {0x00018c08, 0x0000080c},
-+};
-+
-+static const u32 ar9485_1_1_radio_postamble[][2] = {
-+      /* Addr      allmodes  */
-+      {0x0001609c, 0x0b283f31},
-+      {0x000160ac, 0x24611800},
-+      {0x000160b0, 0x03284f3e},
-+      {0x0001610c, 0x00170000},
-+      {0x00016140, 0x50804008},
-+};
-+
-+static const u32 ar9485_1_1_mac_core[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00000008, 0x00000000},
-+      {0x00000030, 0x00020085},
-+      {0x00000034, 0x00000005},
-+      {0x00000040, 0x00000000},
-+      {0x00000044, 0x00000000},
-+      {0x00000048, 0x00000008},
-+      {0x0000004c, 0x00000010},
-+      {0x00000050, 0x00000000},
-+      {0x00001040, 0x002ffc0f},
-+      {0x00001044, 0x002ffc0f},
-+      {0x00001048, 0x002ffc0f},
-+      {0x0000104c, 0x002ffc0f},
-+      {0x00001050, 0x002ffc0f},
-+      {0x00001054, 0x002ffc0f},
-+      {0x00001058, 0x002ffc0f},
-+      {0x0000105c, 0x002ffc0f},
-+      {0x00001060, 0x002ffc0f},
-+      {0x00001064, 0x002ffc0f},
-+      {0x000010f0, 0x00000100},
-+      {0x00001270, 0x00000000},
-+      {0x000012b0, 0x00000000},
-+      {0x000012f0, 0x00000000},
-+      {0x0000143c, 0x00000000},
-+      {0x0000147c, 0x00000000},
-+      {0x00008000, 0x00000000},
-+      {0x00008004, 0x00000000},
-+      {0x00008008, 0x00000000},
-+      {0x0000800c, 0x00000000},
-+      {0x00008018, 0x00000000},
-+      {0x00008020, 0x00000000},
-+      {0x00008038, 0x00000000},
-+      {0x0000803c, 0x00000000},
-+      {0x00008040, 0x00000000},
-+      {0x00008044, 0x00000000},
-+      {0x00008048, 0x00000000},
-+      {0x0000804c, 0xffffffff},
-+      {0x00008054, 0x00000000},
-+      {0x00008058, 0x00000000},
-+      {0x0000805c, 0x000fc78f},
-+      {0x00008060, 0x0000000f},
-+      {0x00008064, 0x00000000},
-+      {0x00008070, 0x00000310},
-+      {0x00008074, 0x00000020},
-+      {0x00008078, 0x00000000},
-+      {0x0000809c, 0x0000000f},
-+      {0x000080a0, 0x00000000},
-+      {0x000080a4, 0x02ff0000},
-+      {0x000080a8, 0x0e070605},
-+      {0x000080ac, 0x0000000d},
-+      {0x000080b0, 0x00000000},
-+      {0x000080b4, 0x00000000},
-+      {0x000080b8, 0x00000000},
-+      {0x000080bc, 0x00000000},
-+      {0x000080c0, 0x2a800000},
-+      {0x000080c4, 0x06900168},
-+      {0x000080c8, 0x13881c22},
-+      {0x000080cc, 0x01f40000},
-+      {0x000080d0, 0x00252500},
-+      {0x000080d4, 0x00a00000},
-+      {0x000080d8, 0x00400000},
-+      {0x000080dc, 0x00000000},
-+      {0x000080e0, 0xffffffff},
-+      {0x000080e4, 0x0000ffff},
-+      {0x000080e8, 0x3f3f3f3f},
-+      {0x000080ec, 0x00000000},
-+      {0x000080f0, 0x00000000},
-+      {0x000080f4, 0x00000000},
-+      {0x000080fc, 0x00020000},
-+      {0x00008100, 0x00000000},
-+      {0x00008108, 0x00000052},
-+      {0x0000810c, 0x00000000},
-+      {0x00008110, 0x00000000},
-+      {0x00008114, 0x000007ff},
-+      {0x00008118, 0x000000aa},
-+      {0x0000811c, 0x00003210},
-+      {0x00008124, 0x00000000},
-+      {0x00008128, 0x00000000},
-+      {0x0000812c, 0x00000000},
-+      {0x00008130, 0x00000000},
-+      {0x00008134, 0x00000000},
-+      {0x00008138, 0x00000000},
-+      {0x0000813c, 0x0000ffff},
-+      {0x00008144, 0xffffffff},
-+      {0x00008168, 0x00000000},
-+      {0x0000816c, 0x00000000},
-+      {0x00008170, 0x18486200},
-+      {0x00008174, 0x33332210},
-+      {0x00008178, 0x00000000},
-+      {0x0000817c, 0x00020000},
-+      {0x000081c0, 0x00000000},
-+      {0x000081c4, 0x33332210},
-+      {0x000081d4, 0x00000000},
-+      {0x000081ec, 0x00000000},
-+      {0x000081f0, 0x00000000},
-+      {0x000081f4, 0x00000000},
-+      {0x000081f8, 0x00000000},
-+      {0x000081fc, 0x00000000},
-+      {0x00008240, 0x00100000},
-+      {0x00008244, 0x0010f400},
-+      {0x00008248, 0x00000800},
-+      {0x0000824c, 0x0001e800},
-+      {0x00008250, 0x00000000},
-+      {0x00008254, 0x00000000},
-+      {0x00008258, 0x00000000},
-+      {0x0000825c, 0x40000000},
-+      {0x00008260, 0x00080922},
-+      {0x00008264, 0x9ca00010},
-+      {0x00008268, 0xffffffff},
-+      {0x0000826c, 0x0000ffff},
-+      {0x00008270, 0x00000000},
-+      {0x00008274, 0x40000000},
-+      {0x00008278, 0x003e4180},
-+      {0x0000827c, 0x00000004},
-+      {0x00008284, 0x0000002c},
-+      {0x00008288, 0x0000002c},
-+      {0x0000828c, 0x000000ff},
-+      {0x00008294, 0x00000000},
-+      {0x00008298, 0x00000000},
-+      {0x0000829c, 0x00000000},
-+      {0x00008300, 0x00000140},
-+      {0x00008314, 0x00000000},
-+      {0x0000831c, 0x0000010d},
-+      {0x00008328, 0x00000000},
-+      {0x0000832c, 0x00000007},
-+      {0x00008330, 0x00000302},
-+      {0x00008334, 0x00000700},
-+      {0x00008338, 0x00ff0000},
-+      {0x0000833c, 0x02400000},
-+      {0x00008340, 0x000107ff},
-+      {0x00008344, 0xa248105b},
-+      {0x00008348, 0x008f0000},
-+      {0x0000835c, 0x00000000},
-+      {0x00008360, 0xffffffff},
-+      {0x00008364, 0xffffffff},
-+      {0x00008368, 0x00000000},
-+      {0x00008370, 0x00000000},
-+      {0x00008374, 0x000000ff},
-+      {0x00008378, 0x00000000},
-+      {0x0000837c, 0x00000000},
-+      {0x00008380, 0xffffffff},
-+      {0x00008384, 0xffffffff},
-+      {0x00008390, 0xffffffff},
-+      {0x00008394, 0xffffffff},
-+      {0x00008398, 0x00000000},
-+      {0x0000839c, 0x00000000},
-+      {0x000083a0, 0x00000000},
-+      {0x000083a4, 0x0000fa14},
-+      {0x000083a8, 0x000f0c00},
-+      {0x000083ac, 0x33332210},
-+      {0x000083b0, 0x33332210},
-+      {0x000083b4, 0x33332210},
-+      {0x000083b8, 0x33332210},
-+      {0x000083bc, 0x00000000},
-+      {0x000083c0, 0x00000000},
-+      {0x000083c4, 0x00000000},
-+      {0x000083c8, 0x00000000},
-+      {0x000083cc, 0x00000200},
-+      {0x000083d0, 0x000301ff},
-+};
-+
-+#endif /* INITVALS_9485_H */
---- a/drivers/net/wireless/ath/ath9k/ar9580_1p0_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9580_1p0_initvals.h
-@@ -1,5 +1,6 @@
- /*
-- * Copyright (c) 2010 Atheros Communications Inc.
-+ * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros Inc.
-  *
-  * Permission to use, copy, modify, and/or distribute this software for any
-  * purpose with or without fee is hereby granted, provided that the above
-@@ -19,18 +20,7 @@
- /* AR9580 1.0 */
--static const u32 ar9580_1p0_modes_fast_clock[][3] = {
--      /* Addr      5G_HT20     5G_HT40   */
--      {0x00001030, 0x00000268, 0x000004d0},
--      {0x00001070, 0x0000018c, 0x00000318},
--      {0x000010b0, 0x00000fd0, 0x00001fa0},
--      {0x00008014, 0x044c044c, 0x08980898},
--      {0x0000801c, 0x148ec02b, 0x148ec057},
--      {0x00008318, 0x000044c0, 0x00008980},
--      {0x00009e00, 0x0372131c, 0x0372131c},
--      {0x0000a230, 0x0000000b, 0x00000016},
--      {0x0000a254, 0x00000898, 0x00001130},
--};
-+#define ar9580_1p0_modes_fast_clock ar9300Modes_fast_clock_2p2
- static const u32 ar9580_1p0_radio_postamble[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-@@ -208,17 +198,7 @@ static const u32 ar9580_1p0_baseband_cor
-       {0x0000c420, 0x00000000},
- };
--static const u32 ar9580_1p0_mac_postamble[][5] = {
--      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
--      {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
--      {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
--      {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
--      {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
--      {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
--      {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
--      {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
--      {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
--};
-+#define ar9580_1p0_mac_postamble ar9300_2p2_mac_postamble
- static const u32 ar9580_1p0_low_ob_db_tx_gain_table[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-@@ -326,111 +306,7 @@ static const u32 ar9580_1p0_low_ob_db_tx
-       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- };
--static const u32 ar9580_1p0_high_power_tx_gain_table[][5] = {
--      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
--      {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
--      {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
--      {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
--      {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
--      {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
--      {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
--      {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
--      {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
--      {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
--      {0x0000a518, 0x21002220, 0x21002220, 0x16000402, 0x16000402},
--      {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404},
--      {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
--      {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
--      {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
--      {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20},
--      {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20},
--      {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22},
--      {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24},
--      {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640},
--      {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
--      {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861},
--      {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81},
--      {0x0000a54c, 0x5c02486b, 0x5c02486b, 0x47001a83, 0x47001a83},
--      {0x0000a550, 0x61024a6c, 0x61024a6c, 0x4a001c84, 0x4a001c84},
--      {0x0000a554, 0x66026a6c, 0x66026a6c, 0x4e001ce3, 0x4e001ce3},
--      {0x0000a558, 0x6b026e6c, 0x6b026e6c, 0x52001ce5, 0x52001ce5},
--      {0x0000a55c, 0x7002708c, 0x7002708c, 0x56001ce9, 0x56001ce9},
--      {0x0000a560, 0x7302b08a, 0x7302b08a, 0x5a001ceb, 0x5a001ceb},
--      {0x0000a564, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
--      {0x0000a568, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
--      {0x0000a56c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
--      {0x0000a570, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
--      {0x0000a574, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
--      {0x0000a578, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
--      {0x0000a57c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
--      {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
--      {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
--      {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
--      {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
--      {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202},
--      {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400},
--      {0x0000a598, 0x21802220, 0x21802220, 0x16800402, 0x16800402},
--      {0x0000a59c, 0x27802223, 0x27802223, 0x19800404, 0x19800404},
--      {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603},
--      {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02},
--      {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04},
--      {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20},
--      {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20},
--      {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22},
--      {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24},
--      {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640},
--      {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660},
--      {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861},
--      {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81},
--      {0x0000a5cc, 0x5c82486b, 0x5c82486b, 0x47801a83, 0x47801a83},
--      {0x0000a5d0, 0x61824a6c, 0x61824a6c, 0x4a801c84, 0x4a801c84},
--      {0x0000a5d4, 0x66826a6c, 0x66826a6c, 0x4e801ce3, 0x4e801ce3},
--      {0x0000a5d8, 0x6b826e6c, 0x6b826e6c, 0x52801ce5, 0x52801ce5},
--      {0x0000a5dc, 0x7082708c, 0x7082708c, 0x56801ce9, 0x56801ce9},
--      {0x0000a5e0, 0x7382b08a, 0x7382b08a, 0x5a801ceb, 0x5a801ceb},
--      {0x0000a5e4, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
--      {0x0000a5e8, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
--      {0x0000a5ec, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
--      {0x0000a5f0, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
--      {0x0000a5f4, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
--      {0x0000a5f8, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
--      {0x0000a5fc, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
--      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a614, 0x01404000, 0x01404000, 0x01404000, 0x01404000},
--      {0x0000a618, 0x01404501, 0x01404501, 0x01404501, 0x01404501},
--      {0x0000a61c, 0x02008802, 0x02008802, 0x02008501, 0x02008501},
--      {0x0000a620, 0x0300cc03, 0x0300cc03, 0x0280ca03, 0x0280ca03},
--      {0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04},
--      {0x0000a628, 0x0300cc03, 0x0300cc03, 0x04014c04, 0x04014c04},
--      {0x0000a62c, 0x03810c03, 0x03810c03, 0x04015005, 0x04015005},
--      {0x0000a630, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
--      {0x0000a634, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
--      {0x0000a638, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
--      {0x0000a63c, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
--      {0x0000b2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
--      {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
--      {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
--      {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
--      {0x0000c2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
--      {0x0000c2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
--      {0x0000c2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
--      {0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
--      {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
--      {0x00016048, 0x66480001, 0x66480001, 0x66480001, 0x66480001},
--      {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
--      {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
--      {0x00016448, 0x66480001, 0x66480001, 0x66480001, 0x66480001},
--      {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
--      {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
--      {0x00016848, 0x66480001, 0x66480001, 0x66480001, 0x66480001},
--      {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
--};
-+#define ar9580_1p0_high_power_tx_gain_table ar9580_1p0_low_ob_db_tx_gain_table
- static const u32 ar9580_1p0_lowest_ob_db_tx_gain_table[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-@@ -538,12 +414,7 @@ static const u32 ar9580_1p0_lowest_ob_db
-       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- };
--static const u32 ar9580_1p0_baseband_core_txfir_coeff_japan_2484[][2] = {
--      /* Addr      allmodes  */
--      {0x0000a398, 0x00000000},
--      {0x0000a39c, 0x6f7f0301},
--      {0x0000a3a0, 0xca9228ee},
--};
-+#define ar9580_1p0_baseband_core_txfir_coeff_japan_2484 ar9462_2p0_baseband_core_txfir_coeff_japan_2484
- static const u32 ar9580_1p0_mac_core[][2] = {
-       /* Addr      allmodes  */
-@@ -808,376 +679,11 @@ static const u32 ar9580_1p0_mixed_ob_db_
-       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- };
--static const u32 ar9580_1p0_wo_xlna_rx_gain_table[][2] = {
--      /* Addr      allmodes  */
--      {0x0000a000, 0x00010000},
--      {0x0000a004, 0x00030002},
--      {0x0000a008, 0x00050004},
--      {0x0000a00c, 0x00810080},
--      {0x0000a010, 0x00830082},
--      {0x0000a014, 0x01810180},
--      {0x0000a018, 0x01830182},
--      {0x0000a01c, 0x01850184},
--      {0x0000a020, 0x01890188},
--      {0x0000a024, 0x018b018a},
--      {0x0000a028, 0x018d018c},
--      {0x0000a02c, 0x03820190},
--      {0x0000a030, 0x03840383},
--      {0x0000a034, 0x03880385},
--      {0x0000a038, 0x038a0389},
--      {0x0000a03c, 0x038c038b},
--      {0x0000a040, 0x0390038d},
--      {0x0000a044, 0x03920391},
--      {0x0000a048, 0x03940393},
--      {0x0000a04c, 0x03960395},
--      {0x0000a050, 0x00000000},
--      {0x0000a054, 0x00000000},
--      {0x0000a058, 0x00000000},
--      {0x0000a05c, 0x00000000},
--      {0x0000a060, 0x00000000},
--      {0x0000a064, 0x00000000},
--      {0x0000a068, 0x00000000},
--      {0x0000a06c, 0x00000000},
--      {0x0000a070, 0x00000000},
--      {0x0000a074, 0x00000000},
--      {0x0000a078, 0x00000000},
--      {0x0000a07c, 0x00000000},
--      {0x0000a080, 0x29292929},
--      {0x0000a084, 0x29292929},
--      {0x0000a088, 0x29292929},
--      {0x0000a08c, 0x29292929},
--      {0x0000a090, 0x22292929},
--      {0x0000a094, 0x1d1d2222},
--      {0x0000a098, 0x0c111117},
--      {0x0000a09c, 0x00030303},
--      {0x0000a0a0, 0x00000000},
--      {0x0000a0a4, 0x00000000},
--      {0x0000a0a8, 0x00000000},
--      {0x0000a0ac, 0x00000000},
--      {0x0000a0b0, 0x00000000},
--      {0x0000a0b4, 0x00000000},
--      {0x0000a0b8, 0x00000000},
--      {0x0000a0bc, 0x00000000},
--      {0x0000a0c0, 0x001f0000},
--      {0x0000a0c4, 0x01000101},
--      {0x0000a0c8, 0x011e011f},
--      {0x0000a0cc, 0x011c011d},
--      {0x0000a0d0, 0x02030204},
--      {0x0000a0d4, 0x02010202},
--      {0x0000a0d8, 0x021f0200},
--      {0x0000a0dc, 0x0302021e},
--      {0x0000a0e0, 0x03000301},
--      {0x0000a0e4, 0x031e031f},
--      {0x0000a0e8, 0x0402031d},
--      {0x0000a0ec, 0x04000401},
--      {0x0000a0f0, 0x041e041f},
--      {0x0000a0f4, 0x0502041d},
--      {0x0000a0f8, 0x05000501},
--      {0x0000a0fc, 0x051e051f},
--      {0x0000a100, 0x06010602},
--      {0x0000a104, 0x061f0600},
--      {0x0000a108, 0x061d061e},
--      {0x0000a10c, 0x07020703},
--      {0x0000a110, 0x07000701},
--      {0x0000a114, 0x00000000},
--      {0x0000a118, 0x00000000},
--      {0x0000a11c, 0x00000000},
--      {0x0000a120, 0x00000000},
--      {0x0000a124, 0x00000000},
--      {0x0000a128, 0x00000000},
--      {0x0000a12c, 0x00000000},
--      {0x0000a130, 0x00000000},
--      {0x0000a134, 0x00000000},
--      {0x0000a138, 0x00000000},
--      {0x0000a13c, 0x00000000},
--      {0x0000a140, 0x001f0000},
--      {0x0000a144, 0x01000101},
--      {0x0000a148, 0x011e011f},
--      {0x0000a14c, 0x011c011d},
--      {0x0000a150, 0x02030204},
--      {0x0000a154, 0x02010202},
--      {0x0000a158, 0x021f0200},
--      {0x0000a15c, 0x0302021e},
--      {0x0000a160, 0x03000301},
--      {0x0000a164, 0x031e031f},
--      {0x0000a168, 0x0402031d},
--      {0x0000a16c, 0x04000401},
--      {0x0000a170, 0x041e041f},
--      {0x0000a174, 0x0502041d},
--      {0x0000a178, 0x05000501},
--      {0x0000a17c, 0x051e051f},
--      {0x0000a180, 0x06010602},
--      {0x0000a184, 0x061f0600},
--      {0x0000a188, 0x061d061e},
--      {0x0000a18c, 0x07020703},
--      {0x0000a190, 0x07000701},
--      {0x0000a194, 0x00000000},
--      {0x0000a198, 0x00000000},
--      {0x0000a19c, 0x00000000},
--      {0x0000a1a0, 0x00000000},
--      {0x0000a1a4, 0x00000000},
--      {0x0000a1a8, 0x00000000},
--      {0x0000a1ac, 0x00000000},
--      {0x0000a1b0, 0x00000000},
--      {0x0000a1b4, 0x00000000},
--      {0x0000a1b8, 0x00000000},
--      {0x0000a1bc, 0x00000000},
--      {0x0000a1c0, 0x00000000},
--      {0x0000a1c4, 0x00000000},
--      {0x0000a1c8, 0x00000000},
--      {0x0000a1cc, 0x00000000},
--      {0x0000a1d0, 0x00000000},
--      {0x0000a1d4, 0x00000000},
--      {0x0000a1d8, 0x00000000},
--      {0x0000a1dc, 0x00000000},
--      {0x0000a1e0, 0x00000000},
--      {0x0000a1e4, 0x00000000},
--      {0x0000a1e8, 0x00000000},
--      {0x0000a1ec, 0x00000000},
--      {0x0000a1f0, 0x00000396},
--      {0x0000a1f4, 0x00000396},
--      {0x0000a1f8, 0x00000396},
--      {0x0000a1fc, 0x00000196},
--      {0x0000b000, 0x00010000},
--      {0x0000b004, 0x00030002},
--      {0x0000b008, 0x00050004},
--      {0x0000b00c, 0x00810080},
--      {0x0000b010, 0x00830082},
--      {0x0000b014, 0x01810180},
--      {0x0000b018, 0x01830182},
--      {0x0000b01c, 0x01850184},
--      {0x0000b020, 0x02810280},
--      {0x0000b024, 0x02830282},
--      {0x0000b028, 0x02850284},
--      {0x0000b02c, 0x02890288},
--      {0x0000b030, 0x028b028a},
--      {0x0000b034, 0x0388028c},
--      {0x0000b038, 0x038a0389},
--      {0x0000b03c, 0x038c038b},
--      {0x0000b040, 0x0390038d},
--      {0x0000b044, 0x03920391},
--      {0x0000b048, 0x03940393},
--      {0x0000b04c, 0x03960395},
--      {0x0000b050, 0x00000000},
--      {0x0000b054, 0x00000000},
--      {0x0000b058, 0x00000000},
--      {0x0000b05c, 0x00000000},
--      {0x0000b060, 0x00000000},
--      {0x0000b064, 0x00000000},
--      {0x0000b068, 0x00000000},
--      {0x0000b06c, 0x00000000},
--      {0x0000b070, 0x00000000},
--      {0x0000b074, 0x00000000},
--      {0x0000b078, 0x00000000},
--      {0x0000b07c, 0x00000000},
--      {0x0000b080, 0x32323232},
--      {0x0000b084, 0x2f2f3232},
--      {0x0000b088, 0x23282a2d},
--      {0x0000b08c, 0x1c1e2123},
--      {0x0000b090, 0x14171919},
--      {0x0000b094, 0x0e0e1214},
--      {0x0000b098, 0x03050707},
--      {0x0000b09c, 0x00030303},
--      {0x0000b0a0, 0x00000000},
--      {0x0000b0a4, 0x00000000},
--      {0x0000b0a8, 0x00000000},
--      {0x0000b0ac, 0x00000000},
--      {0x0000b0b0, 0x00000000},
--      {0x0000b0b4, 0x00000000},
--      {0x0000b0b8, 0x00000000},
--      {0x0000b0bc, 0x00000000},
--      {0x0000b0c0, 0x003f0020},
--      {0x0000b0c4, 0x00400041},
--      {0x0000b0c8, 0x0140005f},
--      {0x0000b0cc, 0x0160015f},
--      {0x0000b0d0, 0x017e017f},
--      {0x0000b0d4, 0x02410242},
--      {0x0000b0d8, 0x025f0240},
--      {0x0000b0dc, 0x027f0260},
--      {0x0000b0e0, 0x0341027e},
--      {0x0000b0e4, 0x035f0340},
--      {0x0000b0e8, 0x037f0360},
--      {0x0000b0ec, 0x04400441},
--      {0x0000b0f0, 0x0460045f},
--      {0x0000b0f4, 0x0541047f},
--      {0x0000b0f8, 0x055f0540},
--      {0x0000b0fc, 0x057f0560},
--      {0x0000b100, 0x06400641},
--      {0x0000b104, 0x0660065f},
--      {0x0000b108, 0x067e067f},
--      {0x0000b10c, 0x07410742},
--      {0x0000b110, 0x075f0740},
--      {0x0000b114, 0x077f0760},
--      {0x0000b118, 0x07800781},
--      {0x0000b11c, 0x07a0079f},
--      {0x0000b120, 0x07c107bf},
--      {0x0000b124, 0x000007c0},
--      {0x0000b128, 0x00000000},
--      {0x0000b12c, 0x00000000},
--      {0x0000b130, 0x00000000},
--      {0x0000b134, 0x00000000},
--      {0x0000b138, 0x00000000},
--      {0x0000b13c, 0x00000000},
--      {0x0000b140, 0x003f0020},
--      {0x0000b144, 0x00400041},
--      {0x0000b148, 0x0140005f},
--      {0x0000b14c, 0x0160015f},
--      {0x0000b150, 0x017e017f},
--      {0x0000b154, 0x02410242},
--      {0x0000b158, 0x025f0240},
--      {0x0000b15c, 0x027f0260},
--      {0x0000b160, 0x0341027e},
--      {0x0000b164, 0x035f0340},
--      {0x0000b168, 0x037f0360},
--      {0x0000b16c, 0x04400441},
--      {0x0000b170, 0x0460045f},
--      {0x0000b174, 0x0541047f},
--      {0x0000b178, 0x055f0540},
--      {0x0000b17c, 0x057f0560},
--      {0x0000b180, 0x06400641},
--      {0x0000b184, 0x0660065f},
--      {0x0000b188, 0x067e067f},
--      {0x0000b18c, 0x07410742},
--      {0x0000b190, 0x075f0740},
--      {0x0000b194, 0x077f0760},
--      {0x0000b198, 0x07800781},
--      {0x0000b19c, 0x07a0079f},
--      {0x0000b1a0, 0x07c107bf},
--      {0x0000b1a4, 0x000007c0},
--      {0x0000b1a8, 0x00000000},
--      {0x0000b1ac, 0x00000000},
--      {0x0000b1b0, 0x00000000},
--      {0x0000b1b4, 0x00000000},
--      {0x0000b1b8, 0x00000000},
--      {0x0000b1bc, 0x00000000},
--      {0x0000b1c0, 0x00000000},
--      {0x0000b1c4, 0x00000000},
--      {0x0000b1c8, 0x00000000},
--      {0x0000b1cc, 0x00000000},
--      {0x0000b1d0, 0x00000000},
--      {0x0000b1d4, 0x00000000},
--      {0x0000b1d8, 0x00000000},
--      {0x0000b1dc, 0x00000000},
--      {0x0000b1e0, 0x00000000},
--      {0x0000b1e4, 0x00000000},
--      {0x0000b1e8, 0x00000000},
--      {0x0000b1ec, 0x00000000},
--      {0x0000b1f0, 0x00000396},
--      {0x0000b1f4, 0x00000396},
--      {0x0000b1f8, 0x00000396},
--      {0x0000b1fc, 0x00000196},
--};
-+#define ar9580_1p0_wo_xlna_rx_gain_table ar9300Common_wo_xlna_rx_gain_table_2p2
--static const u32 ar9580_1p0_soc_postamble[][5] = {
--      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
--      {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023},
--};
-+#define ar9580_1p0_soc_postamble ar9300_2p2_soc_postamble
--static const u32 ar9580_1p0_high_ob_db_tx_gain_table[][5] = {
--      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
--      {0x0000a2dc, 0x01feee00, 0x01feee00, 0x03aaa352, 0x03aaa352},
--      {0x0000a2e0, 0x0000f000, 0x0000f000, 0x03ccc584, 0x03ccc584},
--      {0x0000a2e4, 0x01ff0000, 0x01ff0000, 0x03f0f800, 0x03f0f800},
--      {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
--      {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
--      {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
--      {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
--      {0x0000a508, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
--      {0x0000a50c, 0x0d002621, 0x0d002621, 0x0b000200, 0x0b000200},
--      {0x0000a510, 0x13004620, 0x13004620, 0x0f000202, 0x0f000202},
--      {0x0000a514, 0x19004a20, 0x19004a20, 0x11000400, 0x11000400},
--      {0x0000a518, 0x1d004e20, 0x1d004e20, 0x15000402, 0x15000402},
--      {0x0000a51c, 0x21005420, 0x21005420, 0x19000404, 0x19000404},
--      {0x0000a520, 0x26005e20, 0x26005e20, 0x1b000603, 0x1b000603},
--      {0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000a02, 0x1f000a02},
--      {0x0000a528, 0x2f005e42, 0x2f005e42, 0x23000a04, 0x23000a04},
--      {0x0000a52c, 0x33005e44, 0x33005e44, 0x26000a20, 0x26000a20},
--      {0x0000a530, 0x38005e65, 0x38005e65, 0x2a000e20, 0x2a000e20},
--      {0x0000a534, 0x3c005e69, 0x3c005e69, 0x2e000e22, 0x2e000e22},
--      {0x0000a538, 0x40005e6b, 0x40005e6b, 0x31000e24, 0x31000e24},
--      {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x34001640, 0x34001640},
--      {0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
--      {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
--      {0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
--      {0x0000a54c, 0x59025eb2, 0x59025eb2, 0x42001a83, 0x42001a83},
--      {0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
--      {0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
--      {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
--      {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x50001ce9, 0x50001ce9},
--      {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x54001ceb, 0x54001ceb},
--      {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
--      {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000},
--      {0x0000a584, 0x04802222, 0x04802222, 0x04800002, 0x04800002},
--      {0x0000a588, 0x09802421, 0x09802421, 0x08800004, 0x08800004},
--      {0x0000a58c, 0x0d802621, 0x0d802621, 0x0b800200, 0x0b800200},
--      {0x0000a590, 0x13804620, 0x13804620, 0x0f800202, 0x0f800202},
--      {0x0000a594, 0x19804a20, 0x19804a20, 0x11800400, 0x11800400},
--      {0x0000a598, 0x1d804e20, 0x1d804e20, 0x15800402, 0x15800402},
--      {0x0000a59c, 0x21805420, 0x21805420, 0x19800404, 0x19800404},
--      {0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800603, 0x1b800603},
--      {0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800a02, 0x1f800a02},
--      {0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x23800a04, 0x23800a04},
--      {0x0000a5ac, 0x33805e44, 0x33805e44, 0x26800a20, 0x26800a20},
--      {0x0000a5b0, 0x38805e65, 0x38805e65, 0x2a800e20, 0x2a800e20},
--      {0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2e800e22, 0x2e800e22},
--      {0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x31800e24, 0x31800e24},
--      {0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x34801640, 0x34801640},
--      {0x0000a5c0, 0x49805e72, 0x49805e72, 0x38801660, 0x38801660},
--      {0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b801861, 0x3b801861},
--      {0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e801a81, 0x3e801a81},
--      {0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42801a83, 0x42801a83},
--      {0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x44801c84, 0x44801c84},
--      {0x0000a5d4, 0x61827f12, 0x61827f12, 0x48801ce3, 0x48801ce3},
--      {0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c801ce5, 0x4c801ce5},
--      {0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x50801ce9, 0x50801ce9},
--      {0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x54801ceb, 0x54801ceb},
--      {0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
--      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--      {0x0000a610, 0x00804000, 0x00804000, 0x00000000, 0x00000000},
--      {0x0000a614, 0x00804201, 0x00804201, 0x01404000, 0x01404000},
--      {0x0000a618, 0x0280c802, 0x0280c802, 0x01404501, 0x01404501},
--      {0x0000a61c, 0x0280ca03, 0x0280ca03, 0x02008501, 0x02008501},
--      {0x0000a620, 0x04c15104, 0x04c15104, 0x0280ca03, 0x0280ca03},
--      {0x0000a624, 0x04c15305, 0x04c15305, 0x03010c04, 0x03010c04},
--      {0x0000a628, 0x04c15305, 0x04c15305, 0x04014c04, 0x04014c04},
--      {0x0000a62c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
--      {0x0000a630, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
--      {0x0000a634, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
--      {0x0000a638, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
--      {0x0000a63c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
--      {0x0000b2dc, 0x01feee00, 0x01feee00, 0x03aaa352, 0x03aaa352},
--      {0x0000b2e0, 0x0000f000, 0x0000f000, 0x03ccc584, 0x03ccc584},
--      {0x0000b2e4, 0x01ff0000, 0x01ff0000, 0x03f0f800, 0x03f0f800},
--      {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
--      {0x0000c2dc, 0x01feee00, 0x01feee00, 0x03aaa352, 0x03aaa352},
--      {0x0000c2e0, 0x0000f000, 0x0000f000, 0x03ccc584, 0x03ccc584},
--      {0x0000c2e4, 0x01ff0000, 0x01ff0000, 0x03f0f800, 0x03f0f800},
--      {0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
--      {0x00016044, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
--      {0x00016048, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001},
--      {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
--      {0x00016444, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
--      {0x00016448, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001},
--      {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
--      {0x00016844, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
--      {0x00016848, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001},
--      {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
--};
-+#define ar9580_1p0_high_ob_db_tx_gain_table ar9300Modes_high_ob_db_tx_gain_table_2p2
- static const u32 ar9580_1p0_soc_preamble[][2] = {
-       /* Addr      allmodes  */
-@@ -1189,265 +695,7 @@ static const u32 ar9580_1p0_soc_preamble
-       {0x00007048, 0x00000008},
- };
--static const u32 ar9580_1p0_rx_gain_table[][2] = {
--      /* Addr      allmodes  */
--      {0x0000a000, 0x00010000},
--      {0x0000a004, 0x00030002},
--      {0x0000a008, 0x00050004},
--      {0x0000a00c, 0x00810080},
--      {0x0000a010, 0x00830082},
--      {0x0000a014, 0x01810180},
--      {0x0000a018, 0x01830182},
--      {0x0000a01c, 0x01850184},
--      {0x0000a020, 0x01890188},
--      {0x0000a024, 0x018b018a},
--      {0x0000a028, 0x018d018c},
--      {0x0000a02c, 0x01910190},
--      {0x0000a030, 0x01930192},
--      {0x0000a034, 0x01950194},
--      {0x0000a038, 0x038a0196},
--      {0x0000a03c, 0x038c038b},
--      {0x0000a040, 0x0390038d},
--      {0x0000a044, 0x03920391},
--      {0x0000a048, 0x03940393},
--      {0x0000a04c, 0x03960395},
--      {0x0000a050, 0x00000000},
--      {0x0000a054, 0x00000000},
--      {0x0000a058, 0x00000000},
--      {0x0000a05c, 0x00000000},
--      {0x0000a060, 0x00000000},
--      {0x0000a064, 0x00000000},
--      {0x0000a068, 0x00000000},
--      {0x0000a06c, 0x00000000},
--      {0x0000a070, 0x00000000},
--      {0x0000a074, 0x00000000},
--      {0x0000a078, 0x00000000},
--      {0x0000a07c, 0x00000000},
--      {0x0000a080, 0x22222229},
--      {0x0000a084, 0x1d1d1d1d},
--      {0x0000a088, 0x1d1d1d1d},
--      {0x0000a08c, 0x1d1d1d1d},
--      {0x0000a090, 0x171d1d1d},
--      {0x0000a094, 0x11111717},
--      {0x0000a098, 0x00030311},
--      {0x0000a09c, 0x00000000},
--      {0x0000a0a0, 0x00000000},
--      {0x0000a0a4, 0x00000000},
--      {0x0000a0a8, 0x00000000},
--      {0x0000a0ac, 0x00000000},
--      {0x0000a0b0, 0x00000000},
--      {0x0000a0b4, 0x00000000},
--      {0x0000a0b8, 0x00000000},
--      {0x0000a0bc, 0x00000000},
--      {0x0000a0c0, 0x001f0000},
--      {0x0000a0c4, 0x01000101},
--      {0x0000a0c8, 0x011e011f},
--      {0x0000a0cc, 0x011c011d},
--      {0x0000a0d0, 0x02030204},
--      {0x0000a0d4, 0x02010202},
--      {0x0000a0d8, 0x021f0200},
--      {0x0000a0dc, 0x0302021e},
--      {0x0000a0e0, 0x03000301},
--      {0x0000a0e4, 0x031e031f},
--      {0x0000a0e8, 0x0402031d},
--      {0x0000a0ec, 0x04000401},
--      {0x0000a0f0, 0x041e041f},
--      {0x0000a0f4, 0x0502041d},
--      {0x0000a0f8, 0x05000501},
--      {0x0000a0fc, 0x051e051f},
--      {0x0000a100, 0x06010602},
--      {0x0000a104, 0x061f0600},
--      {0x0000a108, 0x061d061e},
--      {0x0000a10c, 0x07020703},
--      {0x0000a110, 0x07000701},
--      {0x0000a114, 0x00000000},
--      {0x0000a118, 0x00000000},
--      {0x0000a11c, 0x00000000},
--      {0x0000a120, 0x00000000},
--      {0x0000a124, 0x00000000},
--      {0x0000a128, 0x00000000},
--      {0x0000a12c, 0x00000000},
--      {0x0000a130, 0x00000000},
--      {0x0000a134, 0x00000000},
--      {0x0000a138, 0x00000000},
--      {0x0000a13c, 0x00000000},
--      {0x0000a140, 0x001f0000},
--      {0x0000a144, 0x01000101},
--      {0x0000a148, 0x011e011f},
--      {0x0000a14c, 0x011c011d},
--      {0x0000a150, 0x02030204},
--      {0x0000a154, 0x02010202},
--      {0x0000a158, 0x021f0200},
--      {0x0000a15c, 0x0302021e},
--      {0x0000a160, 0x03000301},
--      {0x0000a164, 0x031e031f},
--      {0x0000a168, 0x0402031d},
--      {0x0000a16c, 0x04000401},
--      {0x0000a170, 0x041e041f},
--      {0x0000a174, 0x0502041d},
--      {0x0000a178, 0x05000501},
--      {0x0000a17c, 0x051e051f},
--      {0x0000a180, 0x06010602},
--      {0x0000a184, 0x061f0600},
--      {0x0000a188, 0x061d061e},
--      {0x0000a18c, 0x07020703},
--      {0x0000a190, 0x07000701},
--      {0x0000a194, 0x00000000},
--      {0x0000a198, 0x00000000},
--      {0x0000a19c, 0x00000000},
--      {0x0000a1a0, 0x00000000},
--      {0x0000a1a4, 0x00000000},
--      {0x0000a1a8, 0x00000000},
--      {0x0000a1ac, 0x00000000},
--      {0x0000a1b0, 0x00000000},
--      {0x0000a1b4, 0x00000000},
--      {0x0000a1b8, 0x00000000},
--      {0x0000a1bc, 0x00000000},
--      {0x0000a1c0, 0x00000000},
--      {0x0000a1c4, 0x00000000},
--      {0x0000a1c8, 0x00000000},
--      {0x0000a1cc, 0x00000000},
--      {0x0000a1d0, 0x00000000},
--      {0x0000a1d4, 0x00000000},
--      {0x0000a1d8, 0x00000000},
--      {0x0000a1dc, 0x00000000},
--      {0x0000a1e0, 0x00000000},
--      {0x0000a1e4, 0x00000000},
--      {0x0000a1e8, 0x00000000},
--      {0x0000a1ec, 0x00000000},
--      {0x0000a1f0, 0x00000396},
--      {0x0000a1f4, 0x00000396},
--      {0x0000a1f8, 0x00000396},
--      {0x0000a1fc, 0x00000196},
--      {0x0000b000, 0x00010000},
--      {0x0000b004, 0x00030002},
--      {0x0000b008, 0x00050004},
--      {0x0000b00c, 0x00810080},
--      {0x0000b010, 0x00830082},
--      {0x0000b014, 0x01810180},
--      {0x0000b018, 0x01830182},
--      {0x0000b01c, 0x01850184},
--      {0x0000b020, 0x02810280},
--      {0x0000b024, 0x02830282},
--      {0x0000b028, 0x02850284},
--      {0x0000b02c, 0x02890288},
--      {0x0000b030, 0x028b028a},
--      {0x0000b034, 0x0388028c},
--      {0x0000b038, 0x038a0389},
--      {0x0000b03c, 0x038c038b},
--      {0x0000b040, 0x0390038d},
--      {0x0000b044, 0x03920391},
--      {0x0000b048, 0x03940393},
--      {0x0000b04c, 0x03960395},
--      {0x0000b050, 0x00000000},
--      {0x0000b054, 0x00000000},
--      {0x0000b058, 0x00000000},
--      {0x0000b05c, 0x00000000},
--      {0x0000b060, 0x00000000},
--      {0x0000b064, 0x00000000},
--      {0x0000b068, 0x00000000},
--      {0x0000b06c, 0x00000000},
--      {0x0000b070, 0x00000000},
--      {0x0000b074, 0x00000000},
--      {0x0000b078, 0x00000000},
--      {0x0000b07c, 0x00000000},
--      {0x0000b080, 0x2a2d2f32},
--      {0x0000b084, 0x21232328},
--      {0x0000b088, 0x19191c1e},
--      {0x0000b08c, 0x12141417},
--      {0x0000b090, 0x07070e0e},
--      {0x0000b094, 0x03030305},
--      {0x0000b098, 0x00000003},
--      {0x0000b09c, 0x00000000},
--      {0x0000b0a0, 0x00000000},
--      {0x0000b0a4, 0x00000000},
--      {0x0000b0a8, 0x00000000},
--      {0x0000b0ac, 0x00000000},
--      {0x0000b0b0, 0x00000000},
--      {0x0000b0b4, 0x00000000},
--      {0x0000b0b8, 0x00000000},
--      {0x0000b0bc, 0x00000000},
--      {0x0000b0c0, 0x003f0020},
--      {0x0000b0c4, 0x00400041},
--      {0x0000b0c8, 0x0140005f},
--      {0x0000b0cc, 0x0160015f},
--      {0x0000b0d0, 0x017e017f},
--      {0x0000b0d4, 0x02410242},
--      {0x0000b0d8, 0x025f0240},
--      {0x0000b0dc, 0x027f0260},
--      {0x0000b0e0, 0x0341027e},
--      {0x0000b0e4, 0x035f0340},
--      {0x0000b0e8, 0x037f0360},
--      {0x0000b0ec, 0x04400441},
--      {0x0000b0f0, 0x0460045f},
--      {0x0000b0f4, 0x0541047f},
--      {0x0000b0f8, 0x055f0540},
--      {0x0000b0fc, 0x057f0560},
--      {0x0000b100, 0x06400641},
--      {0x0000b104, 0x0660065f},
--      {0x0000b108, 0x067e067f},
--      {0x0000b10c, 0x07410742},
--      {0x0000b110, 0x075f0740},
--      {0x0000b114, 0x077f0760},
--      {0x0000b118, 0x07800781},
--      {0x0000b11c, 0x07a0079f},
--      {0x0000b120, 0x07c107bf},
--      {0x0000b124, 0x000007c0},
--      {0x0000b128, 0x00000000},
--      {0x0000b12c, 0x00000000},
--      {0x0000b130, 0x00000000},
--      {0x0000b134, 0x00000000},
--      {0x0000b138, 0x00000000},
--      {0x0000b13c, 0x00000000},
--      {0x0000b140, 0x003f0020},
--      {0x0000b144, 0x00400041},
--      {0x0000b148, 0x0140005f},
--      {0x0000b14c, 0x0160015f},
--      {0x0000b150, 0x017e017f},
--      {0x0000b154, 0x02410242},
--      {0x0000b158, 0x025f0240},
--      {0x0000b15c, 0x027f0260},
--      {0x0000b160, 0x0341027e},
--      {0x0000b164, 0x035f0340},
--      {0x0000b168, 0x037f0360},
--      {0x0000b16c, 0x04400441},
--      {0x0000b170, 0x0460045f},
--      {0x0000b174, 0x0541047f},
--      {0x0000b178, 0x055f0540},
--      {0x0000b17c, 0x057f0560},
--      {0x0000b180, 0x06400641},
--      {0x0000b184, 0x0660065f},
--      {0x0000b188, 0x067e067f},
--      {0x0000b18c, 0x07410742},
--      {0x0000b190, 0x075f0740},
--      {0x0000b194, 0x077f0760},
--      {0x0000b198, 0x07800781},
--      {0x0000b19c, 0x07a0079f},
--      {0x0000b1a0, 0x07c107bf},
--      {0x0000b1a4, 0x000007c0},
--      {0x0000b1a8, 0x00000000},
--      {0x0000b1ac, 0x00000000},
--      {0x0000b1b0, 0x00000000},
--      {0x0000b1b4, 0x00000000},
--      {0x0000b1b8, 0x00000000},
--      {0x0000b1bc, 0x00000000},
--      {0x0000b1c0, 0x00000000},
--      {0x0000b1c4, 0x00000000},
--      {0x0000b1c8, 0x00000000},
--      {0x0000b1cc, 0x00000000},
--      {0x0000b1d0, 0x00000000},
--      {0x0000b1d4, 0x00000000},
--      {0x0000b1d8, 0x00000000},
--      {0x0000b1dc, 0x00000000},
--      {0x0000b1e0, 0x00000000},
--      {0x0000b1e4, 0x00000000},
--      {0x0000b1e8, 0x00000000},
--      {0x0000b1ec, 0x00000000},
--      {0x0000b1f0, 0x00000396},
--      {0x0000b1f4, 0x00000396},
--      {0x0000b1f8, 0x00000396},
--      {0x0000b1fc, 0x00000196},
--};
-+#define ar9580_1p0_rx_gain_table ar9462_common_rx_gain_table_2p0
- static const u32 ar9580_1p0_radio_core[][2] = {
-       /* Addr      allmodes  */
diff --git a/package/mac80211/patches/567-ath9k_revert_initval_change.patch b/package/mac80211/patches/567-ath9k_revert_initval_change.patch
deleted file mode 100644 (file)
index 49aea35..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-@@ -778,11 +778,11 @@ static const u32 ar9300Common_rx_gain_ta
-       {0x0000a074, 0x00000000},
-       {0x0000a078, 0x00000000},
-       {0x0000a07c, 0x00000000},
--      {0x0000a080, 0x1a1a1a1a},
--      {0x0000a084, 0x1a1a1a1a},
--      {0x0000a088, 0x1a1a1a1a},
--      {0x0000a08c, 0x1a1a1a1a},
--      {0x0000a090, 0x171a1a1a},
-+      {0x0000a080, 0x22222229},
-+      {0x0000a084, 0x1d1d1d1d},
-+      {0x0000a088, 0x1d1d1d1d},
-+      {0x0000a08c, 0x1d1d1d1d},
-+      {0x0000a090, 0x171d1d1d},
-       {0x0000a094, 0x11111717},
-       {0x0000a098, 0x00030311},
-       {0x0000a09c, 0x00000000},
diff --git a/package/mac80211/patches/568-ath9k_fix_ar9340_tx_gain.patch b/package/mac80211/patches/568-ath9k_fix_ar9340_tx_gain.patch
deleted file mode 100644 (file)
index edde8fa..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-@@ -501,7 +501,7 @@ static void ar9003_tx_gain_table_mode1(s
-                       5);
-       else if (AR_SREV_9340(ah))
-               INIT_INI_ARRAY(&ah->iniModesTxGain,
--                      ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
-+                      ar9340Modes_high_ob_db_tx_gain_table_1p0,
-                       ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
-                       5);
-       else if (AR_SREV_9485_11(ah))
-@@ -540,7 +540,7 @@ static void ar9003_tx_gain_table_mode2(s
-                       5);
-       else if (AR_SREV_9340(ah))
-               INIT_INI_ARRAY(&ah->iniModesTxGain,
--                      ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
-+                      ar9340Modes_low_ob_db_tx_gain_table_1p0,
-                       ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
-                       5);
-       else if (AR_SREV_9485_11(ah))
-@@ -574,7 +574,7 @@ static void ar9003_tx_gain_table_mode3(s
-                       5);
-       else if (AR_SREV_9340(ah))
-               INIT_INI_ARRAY(&ah->iniModesTxGain,
--                      ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
-+                      ar9340Modes_high_power_tx_gain_table_1p0,
-                       ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
-                       5);
-       else if (AR_SREV_9485_11(ah))
diff --git a/package/mac80211/patches/570-ath9k-define-DEVID-for-QCA955x.patch b/package/mac80211/patches/570-ath9k-define-DEVID-for-QCA955x.patch
deleted file mode 100644 (file)
index 8713db1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-From ba1e32844fcd396d90b357d3a620ffc1abcde614 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:13 +0200
-Subject: [PATCH 01/20] ath9k: define DEVID for QCA955x
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.h |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -48,6 +48,7 @@
- #define AR9300_DEVID_AR9580   0x0033
- #define AR9300_DEVID_AR9462   0x0034
- #define AR9300_DEVID_AR9330   0x0035
-+#define AR9300_DEVID_QCA955X  0x0038
- #define AR5416_AR9100_DEVID   0x000b
index b0c573d31a3d39c06af2879d1871e7a78734992b..fcdcec665c81e22e0161030a71176d5012105b5d 100644 (file)
@@ -20,7 +20,7 @@
  }
 --- a/drivers/net/wireless/ath/ath9k/xmit.c
 +++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -1988,7 +1988,8 @@ int ath_tx_start(struct ieee80211_hw *hw
+@@ -1987,7 +1987,8 @@ int ath_tx_start(struct ieee80211_hw *hw
  
        ath_txq_lock(sc, txq);
        if (txq == sc->tx.txq_map[q] &&
@@ -30,7 +30,7 @@
                ieee80211_stop_queue(sc->hw, q);
                txq->stopped = true;
        }
-@@ -2047,7 +2048,8 @@ static void ath_tx_complete(struct ath_s
+@@ -2046,7 +2047,8 @@ static void ath_tx_complete(struct ath_s
                if (WARN_ON(--txq->pending_frames < 0))
                        txq->pending_frames = 0;
  
@@ -42,7 +42,7 @@
                }
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1702,6 +1702,14 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1701,6 +1701,14 @@ int ath9k_init_debug(struct ath_hw *ah)
                            &fops_interrupt);
        debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc,
                            &fops_xmit);
diff --git a/package/mac80211/patches/571-ath9k-define-MAC-version-for-AR9550.patch b/package/mac80211/patches/571-ath9k-define-MAC-version-for-AR9550.patch
deleted file mode 100644 (file)
index 8e5a794..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-From b8122a3554e574b154cdf09ae843e6464d8ad1cc Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:13 +0200
-Subject: [PATCH 02/20] ath9k: define MAC version for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/reg.h |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/reg.h
-+++ b/drivers/net/wireless/ath/ath9k/reg.h
-@@ -798,6 +798,7 @@
- #define AR_SREV_REVISION_9580_10      4 /* AR9580 1.0 */
- #define AR_SREV_VERSION_9462          0x280
- #define AR_SREV_REVISION_9462_20      2
-+#define AR_SREV_VERSION_9550          0x400
- #define AR_SREV_5416(_ah) \
-       (((_ah)->hw_version.macVersion == AR_SREV_VERSION_5416_PCI) || \
-@@ -905,6 +906,9 @@
-       (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9462) && \
-       ((_ah)->hw_version.macRev >= AR_SREV_REVISION_9462_20))
-+#define AR_SREV_9550(_ah) \
-+      (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9550))
-+
- #define AR_SREV_9580(_ah) \
-       (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9580) && \
-       ((_ah)->hw_version.macRev >= AR_SREV_REVISION_9580_10))
diff --git a/package/mac80211/patches/572-ath9k-set-MAC-version-for-AR9550.patch b/package/mac80211/patches/572-ath9k-set-MAC-version-for-AR9550.patch
deleted file mode 100644 (file)
index 866ff5f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-From 9bd8677ad5f1814e0f784f92d07ba8bd38c6bc13 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:14 +0200
-Subject: [PATCH 03/20] ath9k: set MAC version for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -343,6 +343,9 @@ static void ath9k_hw_read_revisions(stru
-               val = REG_READ(ah, AR_SREV);
-               ah->hw_version.macRev = MS(val, AR_SREV_REVISION2);
-               return;
-+      case AR9300_DEVID_QCA955X:
-+              ah->hw_version.macVersion = AR_SREV_VERSION_9550;
-+              return;
-       }
-       val = REG_READ(ah, AR_SREV) & AR_SREV_ID;
diff --git a/package/mac80211/patches/573-ath9k-add-platform_device_id-for-AR9550.patch b/package/mac80211/patches/573-ath9k-add-platform_device_id-for-AR9550.patch
deleted file mode 100644 (file)
index 15ea82c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-From 6583f34718e322373130daaca42660c669079384 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:59 +0200
-Subject: [PATCH 04/20] ath9k: add platform_device_id for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ahb.c |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ahb.c
-+++ b/drivers/net/wireless/ath/ath9k/ahb.c
-@@ -35,6 +35,10 @@ static const struct platform_device_id a
-               .name = "ar934x_wmac",
-               .driver_data = AR9300_DEVID_AR9340,
-       },
-+      {
-+              .name = "qca955x_wmac",
-+              .driver_data = AR9300_DEVID_QCA955X,
-+      },
-       {},
- };
diff --git a/package/mac80211/patches/574-ath9k-add-BB-name-string-for-AR9550.patch b/package/mac80211/patches/574-ath9k-add-BB-name-string-for-AR9550.patch
deleted file mode 100644 (file)
index b27efb9..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-From 7ea9d187a4334e35d9ed1a3cbeb85d0b1275b24c Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:14 +0200
-Subject: [PATCH 05/20] ath9k: add BB name string for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -3135,6 +3135,7 @@ static struct {
-       { AR_SREV_VERSION_9340,         "9340" },
-       { AR_SREV_VERSION_9485,         "9485" },
-       { AR_SREV_VERSION_9462,         "9462" },
-+      { AR_SREV_VERSION_9550,         "9550" },
- };
- /* For devices with external radios */
diff --git a/package/mac80211/patches/575-ath9k-clear-pciexpress-flag-for-AR9550.patch b/package/mac80211/patches/575-ath9k-clear-pciexpress-flag-for-AR9550.patch
deleted file mode 100644 (file)
index 8cb4826..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-From 68e9cddb98d5a7de130b064ec301e2370679160a Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:15 +0200
-Subject: [PATCH 06/20] ath9k: clear pciexpress flag for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -667,7 +667,7 @@ static int __ath9k_hw_init(struct ath_hw
-       }
-       if (AR_SREV_9271(ah) || AR_SREV_9100(ah) || AR_SREV_9340(ah) ||
--          AR_SREV_9330(ah))
-+          AR_SREV_9330(ah) || AR_SREV_9550(ah))
-               ah->is_pciexpress = false;
-       ah->hw_version.phyRev = REG_READ(ah, AR_PHY_CHIP_ID);
diff --git a/package/mac80211/patches/576-ath9k-enable-TX-RX-data-byte-swap-for-AR9550.patch b/package/mac80211/patches/576-ath9k-enable-TX-RX-data-byte-swap-for-AR9550.patch
deleted file mode 100644 (file)
index f5b1cac..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-From 3fa372b3d51c310023a20432ebc8f718c31feff0 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:15 +0200
-Subject: [PATCH 07/20] ath9k: enable TX/RX data byte swap for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1985,7 +1985,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
-                               REG_WRITE(ah, AR_CFG, AR_CFG_SWTD | AR_CFG_SWRD);
-               }
- #ifdef __BIG_ENDIAN
--              else if (AR_SREV_9330(ah) || AR_SREV_9340(ah))
-+              else if (AR_SREV_9330(ah) || AR_SREV_9340(ah) ||
-+                       AR_SREV_9550(ah))
-                       REG_RMW(ah, AR_CFG, AR_CFG_SWRB | AR_CFG_SWTB, 0);
-               else
-                       REG_WRITE(ah, AR_CFG, AR_CFG_SWTD | AR_CFG_SWRD);
diff --git a/package/mac80211/patches/577-ath9k-add-initvals-for-AR9550.patch b/package/mac80211/patches/577-ath9k-add-initvals-for-AR9550.patch
deleted file mode 100644 (file)
index a2d60f9..0000000
+++ /dev/null
@@ -1,1317 +0,0 @@
-From 33b61be1c9174ed3f779a1d05aee0e4753eb4068 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:16 +0200
-Subject: [PATCH 08/20] ath9k: add initvals for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
-Note: Some lines are longer than the 80 character limit,
-and checkpatch.pl complains about those. However I would like
-to keep the existing format because the initval arrays are
-more readable in this form.
-
-Gabor
-
- drivers/net/wireless/ath/ath9k/ar9003_hw.c         |    1 +
- .../net/wireless/ath/ath9k/ar955x_1p0_initvals.h   | 1284 ++++++++++++++++++++
- 2 files changed, 1285 insertions(+), 0 deletions(-)
- create mode 100644 drivers/net/wireless/ath/ath9k/ar955x_1p0_initvals.h
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-@@ -21,6 +21,7 @@
- #include "ar9340_initvals.h"
- #include "ar9330_1p1_initvals.h"
- #include "ar9330_1p2_initvals.h"
-+#include "ar955x_1p0_initvals.h"
- #include "ar9580_1p0_initvals.h"
- #include "ar9462_2p0_initvals.h"
---- /dev/null
-+++ b/drivers/net/wireless/ath/ath9k/ar955x_1p0_initvals.h
-@@ -0,0 +1,1284 @@
-+/*
-+ * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros Inc.
-+ *
-+ * Permission to use, copy, modify, and/or distribute this software for any
-+ * purpose with or without fee is hereby granted, provided that the above
-+ * copyright notice and this permission notice appear in all copies.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+ */
-+
-+#ifndef INITVALS_955X_1P0_H
-+#define INITVALS_955X_1P0_H
-+
-+/* AR955X 1.0 */
-+
-+static const u32 ar955x_1p0_radio_postamble[][5] = {
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x00016098, 0xd2dd5554, 0xd2dd5554, 0xd28b3330, 0xd28b3330},
-+      {0x0001609c, 0x0a566f3a, 0x0a566f3a, 0x06345f2a, 0x06345f2a},
-+      {0x000160ac, 0xa4647c00, 0xa4647c00, 0xa4646800, 0xa4646800},
-+      {0x000160b0, 0x01885f52, 0x01885f52, 0x04accf3a, 0x04accf3a},
-+      {0x00016104, 0xb7a00001, 0xb7a00001, 0xb7a00001, 0xb7a00001},
-+      {0x0001610c, 0xc0000000, 0xc0000000, 0xc0000000, 0xc0000000},
-+      {0x00016140, 0x10804008, 0x10804008, 0x10804008, 0x10804008},
-+      {0x00016504, 0xb7a00001, 0xb7a00001, 0xb7a00001, 0xb7a00001},
-+      {0x0001650c, 0xc0000000, 0xc0000000, 0xc0000000, 0xc0000000},
-+      {0x00016540, 0x10804008, 0x10804008, 0x10804008, 0x10804008},
-+      {0x00016904, 0xb7a00001, 0xb7a00001, 0xb7a00001, 0xb7a00001},
-+      {0x0001690c, 0xc0000000, 0xc0000000, 0xc0000000, 0xc0000000},
-+      {0x00016940, 0x10804008, 0x10804008, 0x10804008, 0x10804008},
-+};
-+
-+static const u32 ar955x_1p0_baseband_core_txfir_coeff_japan_2484[][2] = {
-+      /* Addr      allmodes  */
-+      {0x0000a398, 0x00000000},
-+      {0x0000a39c, 0x6f7f0301},
-+      {0x0000a3a0, 0xca9228ee},
-+};
-+
-+static const u32 ar955x_1p0_baseband_postamble[][5] = {
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8011, 0xd00a8011},
-+      {0x00009820, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e},
-+      {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-+      {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
-+      {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-+      {0x00009830, 0x0000059c, 0x0000059c, 0x0000119c, 0x0000119c},
-+      {0x00009c00, 0x000000c4, 0x000000c4, 0x000000c4, 0x000000c4},
-+      {0x00009e00, 0x0372111a, 0x0372111a, 0x037216a0, 0x037216a0},
-+      {0x00009e04, 0x001c2020, 0x001c2020, 0x001c2020, 0x001c2020},
-+      {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
-+      {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e},
-+      {0x00009e14, 0x37b95d5e, 0x37b9605e, 0x3379605e, 0x33795d5e},
-+      {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c},
-+      {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce},
-+      {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021},
-+      {0x00009e3c, 0xcfa10820, 0xcfa10820, 0xcfa10822, 0xcfa10822},
-+      {0x00009e44, 0xfe321e27, 0xfe321e27, 0xfe291e27, 0xfe291e27},
-+      {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012},
-+      {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
-+      {0x0000a204, 0x005c0ec0, 0x005c0ec4, 0x005c0ec4, 0x005c0ec0},
-+      {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
-+      {0x0000a22c, 0x07e26a2f, 0x07e26a2f, 0x01026a2f, 0x01026a2f},
-+      {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b},
-+      {0x0000a234, 0x00000fff, 0x10000fff, 0x10000fff, 0x00000fff},
-+      {0x0000a238, 0xffb01018, 0xffb01018, 0xffb01018, 0xffb01018},
-+      {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108},
-+      {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898},
-+      {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002},
-+      {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
-+      {0x0000a260, 0x0a021501, 0x0a021501, 0x3a021501, 0x3a021501},
-+      {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-+      {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b},
-+      {0x0000a284, 0x00000000, 0x00000000, 0x00000010, 0x00000010},
-+      {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110},
-+      {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222},
-+      {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
-+      {0x0000a2cc, 0x18c50033, 0x18c43433, 0x18c41033, 0x18c44c33},
-+      {0x0000a2d0, 0x00041982, 0x00041982, 0x00041982, 0x00041982},
-+      {0x0000a2d8, 0x7999a83b, 0x7999a83b, 0x7999a83b, 0x7999a83b},
-+      {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-+      {0x0000ae04, 0x001c0000, 0x001c0000, 0x001c0000, 0x001c0000},
-+      {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000ae1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-+      {0x0000ae20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
-+      {0x0000b284, 0x00000000, 0x00000000, 0x00000010, 0x00000010},
-+      {0x0000b830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-+      {0x0000be04, 0x001c0000, 0x001c0000, 0x001c0000, 0x001c0000},
-+      {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000be1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-+      {0x0000be20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
-+      {0x0000c284, 0x00000000, 0x00000000, 0x00000010, 0x00000010},
-+};
-+
-+static const u32 ar955x_1p0_radio_core[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00016000, 0x36db6db6},
-+      {0x00016004, 0x6db6db40},
-+      {0x00016008, 0x73f00000},
-+      {0x0001600c, 0x00000000},
-+      {0x00016040, 0x7f80fff8},
-+      {0x0001604c, 0x76d005b5},
-+      {0x00016050, 0x557cf031},
-+      {0x00016054, 0x13449440},
-+      {0x00016058, 0x0c51c92c},
-+      {0x0001605c, 0x3db7fffc},
-+      {0x00016060, 0xfffffffc},
-+      {0x00016064, 0x000f0278},
-+      {0x00016068, 0x6db6db6c},
-+      {0x0001606c, 0x6db60000},
-+      {0x00016080, 0x00080000},
-+      {0x00016084, 0x0e48048c},
-+      {0x00016088, 0x14214514},
-+      {0x0001608c, 0x119f101e},
-+      {0x00016090, 0x24926490},
-+      {0x00016094, 0x00000000},
-+      {0x000160a0, 0x0a108ffe},
-+      {0x000160a4, 0x812fc370},
-+      {0x000160a8, 0x423c8000},
-+      {0x000160b4, 0x92480080},
-+      {0x000160c0, 0x006db6d0},
-+      {0x000160c4, 0x6db6db60},
-+      {0x000160c8, 0x6db6db6c},
-+      {0x000160cc, 0x01e6c000},
-+      {0x00016100, 0x11999601},
-+      {0x00016108, 0x00080010},
-+      {0x00016144, 0x02084080},
-+      {0x00016148, 0x000080c0},
-+      {0x00016280, 0x01800804},
-+      {0x00016284, 0x00038dc5},
-+      {0x00016288, 0x00000000},
-+      {0x0001628c, 0x00000040},
-+      {0x00016380, 0x00000000},
-+      {0x00016384, 0x00000000},
-+      {0x00016388, 0x00400705},
-+      {0x0001638c, 0x00800700},
-+      {0x00016390, 0x00800700},
-+      {0x00016394, 0x00000000},
-+      {0x00016398, 0x00000000},
-+      {0x0001639c, 0x00000000},
-+      {0x000163a0, 0x00000001},
-+      {0x000163a4, 0x00000001},
-+      {0x000163a8, 0x00000000},
-+      {0x000163ac, 0x00000000},
-+      {0x000163b0, 0x00000000},
-+      {0x000163b4, 0x00000000},
-+      {0x000163b8, 0x00000000},
-+      {0x000163bc, 0x00000000},
-+      {0x000163c0, 0x000000a0},
-+      {0x000163c4, 0x000c0000},
-+      {0x000163c8, 0x14021402},
-+      {0x000163cc, 0x00001402},
-+      {0x000163d0, 0x00000000},
-+      {0x000163d4, 0x00000000},
-+      {0x00016400, 0x36db6db6},
-+      {0x00016404, 0x6db6db40},
-+      {0x00016408, 0x73f00000},
-+      {0x0001640c, 0x00000000},
-+      {0x00016440, 0x7f80fff8},
-+      {0x0001644c, 0x76d005b5},
-+      {0x00016450, 0x557cf031},
-+      {0x00016454, 0x13449440},
-+      {0x00016458, 0x0c51c92c},
-+      {0x0001645c, 0x3db7fffc},
-+      {0x00016460, 0xfffffffc},
-+      {0x00016464, 0x000f0278},
-+      {0x00016468, 0x6db6db6c},
-+      {0x0001646c, 0x6db60000},
-+      {0x00016500, 0x11999601},
-+      {0x00016508, 0x00080010},
-+      {0x00016544, 0x02084080},
-+      {0x00016548, 0x000080c0},
-+      {0x00016780, 0x00000000},
-+      {0x00016784, 0x00000000},
-+      {0x00016788, 0x00400705},
-+      {0x0001678c, 0x00800700},
-+      {0x00016790, 0x00800700},
-+      {0x00016794, 0x00000000},
-+      {0x00016798, 0x00000000},
-+      {0x0001679c, 0x00000000},
-+      {0x000167a0, 0x00000001},
-+      {0x000167a4, 0x00000001},
-+      {0x000167a8, 0x00000000},
-+      {0x000167ac, 0x00000000},
-+      {0x000167b0, 0x00000000},
-+      {0x000167b4, 0x00000000},
-+      {0x000167b8, 0x00000000},
-+      {0x000167bc, 0x00000000},
-+      {0x000167c0, 0x000000a0},
-+      {0x000167c4, 0x000c0000},
-+      {0x000167c8, 0x14021402},
-+      {0x000167cc, 0x00001402},
-+      {0x000167d0, 0x00000000},
-+      {0x000167d4, 0x00000000},
-+      {0x00016800, 0x36db6db6},
-+      {0x00016804, 0x6db6db40},
-+      {0x00016808, 0x73f00000},
-+      {0x0001680c, 0x00000000},
-+      {0x00016840, 0x7f80fff8},
-+      {0x0001684c, 0x76d005b5},
-+      {0x00016850, 0x557cf031},
-+      {0x00016854, 0x13449440},
-+      {0x00016858, 0x0c51c92c},
-+      {0x0001685c, 0x3db7fffc},
-+      {0x00016860, 0xfffffffc},
-+      {0x00016864, 0x000f0278},
-+      {0x00016868, 0x6db6db6c},
-+      {0x0001686c, 0x6db60000},
-+      {0x00016900, 0x11999601},
-+      {0x00016908, 0x00080010},
-+      {0x00016944, 0x02084080},
-+      {0x00016948, 0x000080c0},
-+      {0x00016b80, 0x00000000},
-+      {0x00016b84, 0x00000000},
-+      {0x00016b88, 0x00400705},
-+      {0x00016b8c, 0x00800700},
-+      {0x00016b90, 0x00800700},
-+      {0x00016b94, 0x00000000},
-+      {0x00016b98, 0x00000000},
-+      {0x00016b9c, 0x00000000},
-+      {0x00016ba0, 0x00000001},
-+      {0x00016ba4, 0x00000001},
-+      {0x00016ba8, 0x00000000},
-+      {0x00016bac, 0x00000000},
-+      {0x00016bb0, 0x00000000},
-+      {0x00016bb4, 0x00000000},
-+      {0x00016bb8, 0x00000000},
-+      {0x00016bbc, 0x00000000},
-+      {0x00016bc0, 0x000000a0},
-+      {0x00016bc4, 0x000c0000},
-+      {0x00016bc8, 0x14021402},
-+      {0x00016bcc, 0x00001402},
-+      {0x00016bd0, 0x00000000},
-+      {0x00016bd4, 0x00000000},
-+};
-+
-+static const u32 ar955x_1p0_modes_xpa_tx_gain_table[][9] = {
-+      /* Addr      5G_HT20_L   5G_HT40_L   5G_HT20_M   5G_HT40_M   5G_HT20_H   5G_HT40_H   2G_HT40     2G_HT20  */
-+      {0x0000a2dc, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xfffd5aaa, 0xfffd5aaa},
-+      {0x0000a2e0, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xfffe9ccc, 0xfffe9ccc},
-+      {0x0000a2e4, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xffffe0f0, 0xffffe0f0},
-+      {0x0000a2e8, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xfffcff00, 0xfffcff00},
-+      {0x0000a410, 0x000050de, 0x000050de, 0x000050de, 0x000050de, 0x000050de, 0x000050de, 0x000050da, 0x000050da},
-+      {0x0000a500, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000000, 0x00000000},
-+      {0x0000a504, 0x04000005, 0x04000005, 0x04000005, 0x04000005, 0x04000005, 0x04000005, 0x04000002, 0x04000002},
-+      {0x0000a508, 0x08000009, 0x08000009, 0x08000009, 0x08000009, 0x08000009, 0x08000009, 0x08000004, 0x08000004},
-+      {0x0000a50c, 0x0c00000b, 0x0c00000b, 0x0c00000b, 0x0c00000b, 0x0c00000b, 0x0c00000b, 0x0c000006, 0x0c000006},
-+      {0x0000a510, 0x1000000d, 0x1000000d, 0x1000000d, 0x1000000d, 0x1000000d, 0x1000000d, 0x0f00000a, 0x0f00000a},
-+      {0x0000a514, 0x14000011, 0x14000011, 0x14000011, 0x14000011, 0x14000011, 0x14000011, 0x1300000c, 0x1300000c},
-+      {0x0000a518, 0x19004008, 0x19004008, 0x19004008, 0x19004008, 0x18004008, 0x18004008, 0x1700000e, 0x1700000e},
-+      {0x0000a51c, 0x1d00400a, 0x1d00400a, 0x1d00400a, 0x1d00400a, 0x1c00400a, 0x1c00400a, 0x1b000064, 0x1b000064},
-+      {0x0000a520, 0x230020a2, 0x230020a2, 0x210020a2, 0x210020a2, 0x200020a2, 0x200020a2, 0x1f000242, 0x1f000242},
-+      {0x0000a524, 0x2500006e, 0x2500006e, 0x2500006e, 0x2500006e, 0x2400006e, 0x2400006e, 0x23000229, 0x23000229},
-+      {0x0000a528, 0x29022221, 0x29022221, 0x28022221, 0x28022221, 0x27022221, 0x27022221, 0x270002a2, 0x270002a2},
-+      {0x0000a52c, 0x2d00062a, 0x2d00062a, 0x2c00062a, 0x2c00062a, 0x2a00062a, 0x2a00062a, 0x2c001203, 0x2c001203},
-+      {0x0000a530, 0x340220a5, 0x340220a5, 0x320220a5, 0x320220a5, 0x2f0220a5, 0x2f0220a5, 0x30001803, 0x30001803},
-+      {0x0000a534, 0x380022c5, 0x380022c5, 0x350022c5, 0x350022c5, 0x320022c5, 0x320022c5, 0x33000881, 0x33000881},
-+      {0x0000a538, 0x3b002486, 0x3b002486, 0x39002486, 0x39002486, 0x36002486, 0x36002486, 0x38001809, 0x38001809},
-+      {0x0000a53c, 0x3f00248a, 0x3f00248a, 0x3d00248a, 0x3d00248a, 0x3a00248a, 0x3a00248a, 0x3a000814, 0x3a000814},
-+      {0x0000a540, 0x4202242c, 0x4202242c, 0x4102242c, 0x4102242c, 0x3f02242c, 0x3f02242c, 0x3f001a0c, 0x3f001a0c},
-+      {0x0000a544, 0x490044c6, 0x490044c6, 0x460044c6, 0x460044c6, 0x420044c6, 0x420044c6, 0x43001a0e, 0x43001a0e},
-+      {0x0000a548, 0x4d024485, 0x4d024485, 0x4a024485, 0x4a024485, 0x46024485, 0x46024485, 0x46001812, 0x46001812},
-+      {0x0000a54c, 0x51044483, 0x51044483, 0x4e044483, 0x4e044483, 0x4a044483, 0x4a044483, 0x49001884, 0x49001884},
-+      {0x0000a550, 0x5404a40c, 0x5404a40c, 0x5204a40c, 0x5204a40c, 0x4d04a40c, 0x4d04a40c, 0x4d001e84, 0x4d001e84},
-+      {0x0000a554, 0x57024632, 0x57024632, 0x55024632, 0x55024632, 0x52024632, 0x52024632, 0x50001e69, 0x50001e69},
-+      {0x0000a558, 0x5c00a634, 0x5c00a634, 0x5900a634, 0x5900a634, 0x5600a634, 0x5600a634, 0x550006f4, 0x550006f4},
-+      {0x0000a55c, 0x5f026832, 0x5f026832, 0x5d026832, 0x5d026832, 0x5a026832, 0x5a026832, 0x59000ad3, 0x59000ad3},
-+      {0x0000a560, 0x6602b012, 0x6602b012, 0x6202b012, 0x6202b012, 0x5d02b012, 0x5d02b012, 0x5e000ad5, 0x5e000ad5},
-+      {0x0000a564, 0x6e02d0e1, 0x6e02d0e1, 0x6802d0e1, 0x6802d0e1, 0x6002d0e1, 0x6002d0e1, 0x61001ced, 0x61001ced},
-+      {0x0000a568, 0x7202b4c4, 0x7202b4c4, 0x6c02b4c4, 0x6c02b4c4, 0x6502b4c4, 0x6502b4c4, 0x660018d4, 0x660018d4},
-+      {0x0000a56c, 0x75007894, 0x75007894, 0x70007894, 0x70007894, 0x6b007894, 0x6b007894, 0x660018d4, 0x660018d4},
-+      {0x0000a570, 0x7b025c74, 0x7b025c74, 0x75025c74, 0x75025c74, 0x70025c74, 0x70025c74, 0x660018d4, 0x660018d4},
-+      {0x0000a574, 0x8300bcb5, 0x8300bcb5, 0x7a00bcb5, 0x7a00bcb5, 0x7600bcb5, 0x7600bcb5, 0x660018d4, 0x660018d4},
-+      {0x0000a578, 0x8a04dc74, 0x8a04dc74, 0x7f04dc74, 0x7f04dc74, 0x7c04dc74, 0x7c04dc74, 0x660018d4, 0x660018d4},
-+      {0x0000a57c, 0x8a04dc74, 0x8a04dc74, 0x7f04dc74, 0x7f04dc74, 0x7c04dc74, 0x7c04dc74, 0x660018d4, 0x660018d4},
-+      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03804000, 0x03804000},
-+      {0x0000a610, 0x04c08c01, 0x04c08c01, 0x04808b01, 0x04808b01, 0x04808a01, 0x04808a01, 0x0300ca02, 0x0300ca02},
-+      {0x0000a614, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00000e04, 0x00000e04},
-+      {0x0000a618, 0x04010c01, 0x04010c01, 0x03c10b01, 0x03c10b01, 0x03810a01, 0x03810a01, 0x03014000, 0x03014000},
-+      {0x0000a61c, 0x03814e05, 0x03814e05, 0x03414d05, 0x03414d05, 0x03414d05, 0x03414d05, 0x00000000, 0x00000000},
-+      {0x0000a620, 0x04010303, 0x04010303, 0x03c10303, 0x03c10303, 0x03810303, 0x03810303, 0x00000000, 0x00000000},
-+      {0x0000a624, 0x03814e05, 0x03814e05, 0x03414d05, 0x03414d05, 0x03414d05, 0x03414d05, 0x03014000, 0x03014000},
-+      {0x0000a628, 0x00c0c000, 0x00c0c000, 0x00c0c000, 0x00c0c000, 0x00c0c000, 0x00c0c000, 0x03804c05, 0x03804c05},
-+      {0x0000a62c, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x0701de06, 0x0701de06},
-+      {0x0000a630, 0x03418000, 0x03418000, 0x03018000, 0x03018000, 0x02c18000, 0x02c18000, 0x07819c07, 0x07819c07},
-+      {0x0000a634, 0x03815004, 0x03815004, 0x03414f04, 0x03414f04, 0x03414e04, 0x03414e04, 0x0701dc07, 0x0701dc07},
-+      {0x0000a638, 0x03005302, 0x03005302, 0x02c05202, 0x02c05202, 0x02805202, 0x02805202, 0x0701dc07, 0x0701dc07},
-+      {0x0000a63c, 0x04c09302, 0x04c09302, 0x04809202, 0x04809202, 0x04809202, 0x04809202, 0x0701dc07, 0x0701dc07},
-+      {0x0000b2dc, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xfffd5aaa, 0xfffd5aaa},
-+      {0x0000b2e0, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xfffe9ccc, 0xfffe9ccc},
-+      {0x0000b2e4, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xffffe0f0, 0xffffe0f0},
-+      {0x0000b2e8, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xfffcff00, 0xfffcff00},
-+      {0x0000c2dc, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xfffd5aaa, 0xfffd5aaa},
-+      {0x0000c2e0, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xfffe9ccc, 0xfffe9ccc},
-+      {0x0000c2e4, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xffffe0f0, 0xffffe0f0},
-+      {0x0000c2e8, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xfffcff00, 0xfffcff00},
-+      {0x00016044, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x010002d4, 0x010002d4},
-+      {0x00016048, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x66482401, 0x66482401},
-+      {0x00016280, 0x01801e84, 0x01801e84, 0x01801e84, 0x01801e84, 0x01801e84, 0x01801e84, 0x01808e84, 0x01808e84},
-+      {0x00016444, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x010002d4, 0x010002d4},
-+      {0x00016448, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x66482401, 0x66482401},
-+      {0x00016844, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x010002d4, 0x010002d4},
-+      {0x00016848, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x66482401, 0x66482401},
-+};
-+
-+static const u32 ar955x_1p0_mac_core[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00000008, 0x00000000},
-+      {0x00000030, 0x00020085},
-+      {0x00000034, 0x00000005},
-+      {0x00000040, 0x00000000},
-+      {0x00000044, 0x00000000},
-+      {0x00000048, 0x00000008},
-+      {0x0000004c, 0x00000010},
-+      {0x00000050, 0x00000000},
-+      {0x00001040, 0x002ffc0f},
-+      {0x00001044, 0x002ffc0f},
-+      {0x00001048, 0x002ffc0f},
-+      {0x0000104c, 0x002ffc0f},
-+      {0x00001050, 0x002ffc0f},
-+      {0x00001054, 0x002ffc0f},
-+      {0x00001058, 0x002ffc0f},
-+      {0x0000105c, 0x002ffc0f},
-+      {0x00001060, 0x002ffc0f},
-+      {0x00001064, 0x002ffc0f},
-+      {0x000010f0, 0x00000100},
-+      {0x00001270, 0x00000000},
-+      {0x000012b0, 0x00000000},
-+      {0x000012f0, 0x00000000},
-+      {0x0000143c, 0x00000000},
-+      {0x0000147c, 0x00000000},
-+      {0x00008000, 0x00000000},
-+      {0x00008004, 0x00000000},
-+      {0x00008008, 0x00000000},
-+      {0x0000800c, 0x00000000},
-+      {0x00008018, 0x00000000},
-+      {0x00008020, 0x00000000},
-+      {0x00008038, 0x00000000},
-+      {0x0000803c, 0x00000000},
-+      {0x00008040, 0x00000000},
-+      {0x00008044, 0x00000000},
-+      {0x00008048, 0x00000000},
-+      {0x0000804c, 0xffffffff},
-+      {0x00008054, 0x00000000},
-+      {0x00008058, 0x00000000},
-+      {0x0000805c, 0x000fc78f},
-+      {0x00008060, 0x0000000f},
-+      {0x00008064, 0x00000000},
-+      {0x00008070, 0x00000310},
-+      {0x00008074, 0x00000020},
-+      {0x00008078, 0x00000000},
-+      {0x0000809c, 0x0000000f},
-+      {0x000080a0, 0x00000000},
-+      {0x000080a4, 0x02ff0000},
-+      {0x000080a8, 0x0e070605},
-+      {0x000080ac, 0x0000000d},
-+      {0x000080b0, 0x00000000},
-+      {0x000080b4, 0x00000000},
-+      {0x000080b8, 0x00000000},
-+      {0x000080bc, 0x00000000},
-+      {0x000080c0, 0x2a800000},
-+      {0x000080c4, 0x06900168},
-+      {0x000080c8, 0x13881c22},
-+      {0x000080cc, 0x01f40000},
-+      {0x000080d0, 0x00252500},
-+      {0x000080d4, 0x00a00000},
-+      {0x000080d8, 0x00400000},
-+      {0x000080dc, 0x00000000},
-+      {0x000080e0, 0xffffffff},
-+      {0x000080e4, 0x0000ffff},
-+      {0x000080e8, 0x3f3f3f3f},
-+      {0x000080ec, 0x00000000},
-+      {0x000080f0, 0x00000000},
-+      {0x000080f4, 0x00000000},
-+      {0x000080fc, 0x00020000},
-+      {0x00008100, 0x00000000},
-+      {0x00008108, 0x00000052},
-+      {0x0000810c, 0x00000000},
-+      {0x00008110, 0x00000000},
-+      {0x00008114, 0x000007ff},
-+      {0x00008118, 0x000000aa},
-+      {0x0000811c, 0x00003210},
-+      {0x00008124, 0x00000000},
-+      {0x00008128, 0x00000000},
-+      {0x0000812c, 0x00000000},
-+      {0x00008130, 0x00000000},
-+      {0x00008134, 0x00000000},
-+      {0x00008138, 0x00000000},
-+      {0x0000813c, 0x0000ffff},
-+      {0x00008140, 0x000000fe},
-+      {0x00008144, 0xffffffff},
-+      {0x00008168, 0x00000000},
-+      {0x0000816c, 0x00000000},
-+      {0x000081c0, 0x00000000},
-+      {0x000081c4, 0x33332210},
-+      {0x000081ec, 0x00000000},
-+      {0x000081f0, 0x00000000},
-+      {0x000081f4, 0x00000000},
-+      {0x000081f8, 0x00000000},
-+      {0x000081fc, 0x00000000},
-+      {0x00008240, 0x00100000},
-+      {0x00008244, 0x0010f400},
-+      {0x00008248, 0x00000800},
-+      {0x0000824c, 0x0001e800},
-+      {0x00008250, 0x00000000},
-+      {0x00008254, 0x00000000},
-+      {0x00008258, 0x00000000},
-+      {0x0000825c, 0x40000000},
-+      {0x00008260, 0x00080922},
-+      {0x00008264, 0x9d400010},
-+      {0x00008268, 0xffffffff},
-+      {0x0000826c, 0x0000ffff},
-+      {0x00008270, 0x00000000},
-+      {0x00008274, 0x40000000},
-+      {0x00008278, 0x003e4180},
-+      {0x0000827c, 0x00000004},
-+      {0x00008284, 0x0000002c},
-+      {0x00008288, 0x0000002c},
-+      {0x0000828c, 0x000000ff},
-+      {0x00008294, 0x00000000},
-+      {0x00008298, 0x00000000},
-+      {0x0000829c, 0x00000000},
-+      {0x00008300, 0x00001d40},
-+      {0x00008314, 0x00000000},
-+      {0x0000831c, 0x0000010d},
-+      {0x00008328, 0x00000000},
-+      {0x0000832c, 0x0000001f},
-+      {0x00008330, 0x00000302},
-+      {0x00008334, 0x00000700},
-+      {0x00008338, 0xffff0000},
-+      {0x0000833c, 0x02400000},
-+      {0x00008340, 0x000107ff},
-+      {0x00008344, 0xaa48107b},
-+      {0x00008348, 0x008f0000},
-+      {0x0000835c, 0x00000000},
-+      {0x00008360, 0xffffffff},
-+      {0x00008364, 0xffffffff},
-+      {0x00008368, 0x00000000},
-+      {0x00008370, 0x00000000},
-+      {0x00008374, 0x000000ff},
-+      {0x00008378, 0x00000000},
-+      {0x0000837c, 0x00000000},
-+      {0x00008380, 0xffffffff},
-+      {0x00008384, 0xffffffff},
-+      {0x00008390, 0xffffffff},
-+      {0x00008394, 0xffffffff},
-+      {0x00008398, 0x00000000},
-+      {0x0000839c, 0x00000000},
-+      {0x000083a0, 0x00000000},
-+      {0x000083a4, 0x0000fa14},
-+      {0x000083a8, 0x000f0c00},
-+      {0x000083ac, 0x33332210},
-+      {0x000083b0, 0x33332210},
-+      {0x000083b4, 0x33332210},
-+      {0x000083b8, 0x33332210},
-+      {0x000083bc, 0x00000000},
-+      {0x000083c0, 0x00000000},
-+      {0x000083c4, 0x00000000},
-+      {0x000083c8, 0x00000000},
-+      {0x000083cc, 0x00000200},
-+      {0x000083d0, 0x8c7901ff},
-+};
-+
-+static const u32 ar955x_1p0_common_rx_gain_table[][2] = {
-+      /* Addr      allmodes  */
-+      {0x0000a000, 0x00010000},
-+      {0x0000a004, 0x00030002},
-+      {0x0000a008, 0x00050004},
-+      {0x0000a00c, 0x00810080},
-+      {0x0000a010, 0x00830082},
-+      {0x0000a014, 0x01810180},
-+      {0x0000a018, 0x01830182},
-+      {0x0000a01c, 0x01850184},
-+      {0x0000a020, 0x01890188},
-+      {0x0000a024, 0x018b018a},
-+      {0x0000a028, 0x018d018c},
-+      {0x0000a02c, 0x01910190},
-+      {0x0000a030, 0x01930192},
-+      {0x0000a034, 0x01950194},
-+      {0x0000a038, 0x038a0196},
-+      {0x0000a03c, 0x038c038b},
-+      {0x0000a040, 0x0390038d},
-+      {0x0000a044, 0x03920391},
-+      {0x0000a048, 0x03940393},
-+      {0x0000a04c, 0x03960395},
-+      {0x0000a050, 0x00000000},
-+      {0x0000a054, 0x00000000},
-+      {0x0000a058, 0x00000000},
-+      {0x0000a05c, 0x00000000},
-+      {0x0000a060, 0x00000000},
-+      {0x0000a064, 0x00000000},
-+      {0x0000a068, 0x00000000},
-+      {0x0000a06c, 0x00000000},
-+      {0x0000a070, 0x00000000},
-+      {0x0000a074, 0x00000000},
-+      {0x0000a078, 0x00000000},
-+      {0x0000a07c, 0x00000000},
-+      {0x0000a080, 0x22222229},
-+      {0x0000a084, 0x1d1d1d1d},
-+      {0x0000a088, 0x1d1d1d1d},
-+      {0x0000a08c, 0x1d1d1d1d},
-+      {0x0000a090, 0x171d1d1d},
-+      {0x0000a094, 0x11111717},
-+      {0x0000a098, 0x00030311},
-+      {0x0000a09c, 0x00000000},
-+      {0x0000a0a0, 0x00000000},
-+      {0x0000a0a4, 0x00000000},
-+      {0x0000a0a8, 0x00000000},
-+      {0x0000a0ac, 0x00000000},
-+      {0x0000a0b0, 0x00000000},
-+      {0x0000a0b4, 0x00000000},
-+      {0x0000a0b8, 0x00000000},
-+      {0x0000a0bc, 0x00000000},
-+      {0x0000a0c0, 0x001f0000},
-+      {0x0000a0c4, 0x01000101},
-+      {0x0000a0c8, 0x011e011f},
-+      {0x0000a0cc, 0x011c011d},
-+      {0x0000a0d0, 0x02030204},
-+      {0x0000a0d4, 0x02010202},
-+      {0x0000a0d8, 0x021f0200},
-+      {0x0000a0dc, 0x0302021e},
-+      {0x0000a0e0, 0x03000301},
-+      {0x0000a0e4, 0x031e031f},
-+      {0x0000a0e8, 0x0402031d},
-+      {0x0000a0ec, 0x04000401},
-+      {0x0000a0f0, 0x041e041f},
-+      {0x0000a0f4, 0x0502041d},
-+      {0x0000a0f8, 0x05000501},
-+      {0x0000a0fc, 0x051e051f},
-+      {0x0000a100, 0x06010602},
-+      {0x0000a104, 0x061f0600},
-+      {0x0000a108, 0x061d061e},
-+      {0x0000a10c, 0x07020703},
-+      {0x0000a110, 0x07000701},
-+      {0x0000a114, 0x00000000},
-+      {0x0000a118, 0x00000000},
-+      {0x0000a11c, 0x00000000},
-+      {0x0000a120, 0x00000000},
-+      {0x0000a124, 0x00000000},
-+      {0x0000a128, 0x00000000},
-+      {0x0000a12c, 0x00000000},
-+      {0x0000a130, 0x00000000},
-+      {0x0000a134, 0x00000000},
-+      {0x0000a138, 0x00000000},
-+      {0x0000a13c, 0x00000000},
-+      {0x0000a140, 0x001f0000},
-+      {0x0000a144, 0x01000101},
-+      {0x0000a148, 0x011e011f},
-+      {0x0000a14c, 0x011c011d},
-+      {0x0000a150, 0x02030204},
-+      {0x0000a154, 0x02010202},
-+      {0x0000a158, 0x021f0200},
-+      {0x0000a15c, 0x0302021e},
-+      {0x0000a160, 0x03000301},
-+      {0x0000a164, 0x031e031f},
-+      {0x0000a168, 0x0402031d},
-+      {0x0000a16c, 0x04000401},
-+      {0x0000a170, 0x041e041f},
-+      {0x0000a174, 0x0502041d},
-+      {0x0000a178, 0x05000501},
-+      {0x0000a17c, 0x051e051f},
-+      {0x0000a180, 0x06010602},
-+      {0x0000a184, 0x061f0600},
-+      {0x0000a188, 0x061d061e},
-+      {0x0000a18c, 0x07020703},
-+      {0x0000a190, 0x07000701},
-+      {0x0000a194, 0x00000000},
-+      {0x0000a198, 0x00000000},
-+      {0x0000a19c, 0x00000000},
-+      {0x0000a1a0, 0x00000000},
-+      {0x0000a1a4, 0x00000000},
-+      {0x0000a1a8, 0x00000000},
-+      {0x0000a1ac, 0x00000000},
-+      {0x0000a1b0, 0x00000000},
-+      {0x0000a1b4, 0x00000000},
-+      {0x0000a1b8, 0x00000000},
-+      {0x0000a1bc, 0x00000000},
-+      {0x0000a1c0, 0x00000000},
-+      {0x0000a1c4, 0x00000000},
-+      {0x0000a1c8, 0x00000000},
-+      {0x0000a1cc, 0x00000000},
-+      {0x0000a1d0, 0x00000000},
-+      {0x0000a1d4, 0x00000000},
-+      {0x0000a1d8, 0x00000000},
-+      {0x0000a1dc, 0x00000000},
-+      {0x0000a1e0, 0x00000000},
-+      {0x0000a1e4, 0x00000000},
-+      {0x0000a1e8, 0x00000000},
-+      {0x0000a1ec, 0x00000000},
-+      {0x0000a1f0, 0x00000396},
-+      {0x0000a1f4, 0x00000396},
-+      {0x0000a1f8, 0x00000396},
-+      {0x0000a1fc, 0x00000196},
-+      {0x0000b000, 0x00010000},
-+      {0x0000b004, 0x00030002},
-+      {0x0000b008, 0x00050004},
-+      {0x0000b00c, 0x00810080},
-+      {0x0000b010, 0x00830082},
-+      {0x0000b014, 0x01810180},
-+      {0x0000b018, 0x01830182},
-+      {0x0000b01c, 0x01850184},
-+      {0x0000b020, 0x02810280},
-+      {0x0000b024, 0x02830282},
-+      {0x0000b028, 0x02850284},
-+      {0x0000b02c, 0x02890288},
-+      {0x0000b030, 0x028b028a},
-+      {0x0000b034, 0x0388028c},
-+      {0x0000b038, 0x038a0389},
-+      {0x0000b03c, 0x038c038b},
-+      {0x0000b040, 0x0390038d},
-+      {0x0000b044, 0x03920391},
-+      {0x0000b048, 0x03940393},
-+      {0x0000b04c, 0x03960395},
-+      {0x0000b050, 0x00000000},
-+      {0x0000b054, 0x00000000},
-+      {0x0000b058, 0x00000000},
-+      {0x0000b05c, 0x00000000},
-+      {0x0000b060, 0x00000000},
-+      {0x0000b064, 0x00000000},
-+      {0x0000b068, 0x00000000},
-+      {0x0000b06c, 0x00000000},
-+      {0x0000b070, 0x00000000},
-+      {0x0000b074, 0x00000000},
-+      {0x0000b078, 0x00000000},
-+      {0x0000b07c, 0x00000000},
-+      {0x0000b080, 0x23232323},
-+      {0x0000b084, 0x21232323},
-+      {0x0000b088, 0x19191c1e},
-+      {0x0000b08c, 0x12141417},
-+      {0x0000b090, 0x07070e0e},
-+      {0x0000b094, 0x03030305},
-+      {0x0000b098, 0x00000003},
-+      {0x0000b09c, 0x00000000},
-+      {0x0000b0a0, 0x00000000},
-+      {0x0000b0a4, 0x00000000},
-+      {0x0000b0a8, 0x00000000},
-+      {0x0000b0ac, 0x00000000},
-+      {0x0000b0b0, 0x00000000},
-+      {0x0000b0b4, 0x00000000},
-+      {0x0000b0b8, 0x00000000},
-+      {0x0000b0bc, 0x00000000},
-+      {0x0000b0c0, 0x003f0020},
-+      {0x0000b0c4, 0x00400041},
-+      {0x0000b0c8, 0x0140005f},
-+      {0x0000b0cc, 0x0160015f},
-+      {0x0000b0d0, 0x017e017f},
-+      {0x0000b0d4, 0x02410242},
-+      {0x0000b0d8, 0x025f0240},
-+      {0x0000b0dc, 0x027f0260},
-+      {0x0000b0e0, 0x0341027e},
-+      {0x0000b0e4, 0x035f0340},
-+      {0x0000b0e8, 0x037f0360},
-+      {0x0000b0ec, 0x04400441},
-+      {0x0000b0f0, 0x0460045f},
-+      {0x0000b0f4, 0x0541047f},
-+      {0x0000b0f8, 0x055f0540},
-+      {0x0000b0fc, 0x057f0560},
-+      {0x0000b100, 0x06400641},
-+      {0x0000b104, 0x0660065f},
-+      {0x0000b108, 0x067e067f},
-+      {0x0000b10c, 0x07410742},
-+      {0x0000b110, 0x075f0740},
-+      {0x0000b114, 0x077f0760},
-+      {0x0000b118, 0x07800781},
-+      {0x0000b11c, 0x07a0079f},
-+      {0x0000b120, 0x07c107bf},
-+      {0x0000b124, 0x000007c0},
-+      {0x0000b128, 0x00000000},
-+      {0x0000b12c, 0x00000000},
-+      {0x0000b130, 0x00000000},
-+      {0x0000b134, 0x00000000},
-+      {0x0000b138, 0x00000000},
-+      {0x0000b13c, 0x00000000},
-+      {0x0000b140, 0x003f0020},
-+      {0x0000b144, 0x00400041},
-+      {0x0000b148, 0x0140005f},
-+      {0x0000b14c, 0x0160015f},
-+      {0x0000b150, 0x017e017f},
-+      {0x0000b154, 0x02410242},
-+      {0x0000b158, 0x025f0240},
-+      {0x0000b15c, 0x027f0260},
-+      {0x0000b160, 0x0341027e},
-+      {0x0000b164, 0x035f0340},
-+      {0x0000b168, 0x037f0360},
-+      {0x0000b16c, 0x04400441},
-+      {0x0000b170, 0x0460045f},
-+      {0x0000b174, 0x0541047f},
-+      {0x0000b178, 0x055f0540},
-+      {0x0000b17c, 0x057f0560},
-+      {0x0000b180, 0x06400641},
-+      {0x0000b184, 0x0660065f},
-+      {0x0000b188, 0x067e067f},
-+      {0x0000b18c, 0x07410742},
-+      {0x0000b190, 0x075f0740},
-+      {0x0000b194, 0x077f0760},
-+      {0x0000b198, 0x07800781},
-+      {0x0000b19c, 0x07a0079f},
-+      {0x0000b1a0, 0x07c107bf},
-+      {0x0000b1a4, 0x000007c0},
-+      {0x0000b1a8, 0x00000000},
-+      {0x0000b1ac, 0x00000000},
-+      {0x0000b1b0, 0x00000000},
-+      {0x0000b1b4, 0x00000000},
-+      {0x0000b1b8, 0x00000000},
-+      {0x0000b1bc, 0x00000000},
-+      {0x0000b1c0, 0x00000000},
-+      {0x0000b1c4, 0x00000000},
-+      {0x0000b1c8, 0x00000000},
-+      {0x0000b1cc, 0x00000000},
-+      {0x0000b1d0, 0x00000000},
-+      {0x0000b1d4, 0x00000000},
-+      {0x0000b1d8, 0x00000000},
-+      {0x0000b1dc, 0x00000000},
-+      {0x0000b1e0, 0x00000000},
-+      {0x0000b1e4, 0x00000000},
-+      {0x0000b1e8, 0x00000000},
-+      {0x0000b1ec, 0x00000000},
-+      {0x0000b1f0, 0x00000396},
-+      {0x0000b1f4, 0x00000396},
-+      {0x0000b1f8, 0x00000396},
-+      {0x0000b1fc, 0x00000196},
-+};
-+
-+static const u32 ar955x_1p0_baseband_core[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00009800, 0xafe68e30},
-+      {0x00009804, 0xfd14e000},
-+      {0x00009808, 0x9c0a9f6b},
-+      {0x0000980c, 0x04900000},
-+      {0x00009814, 0x0280c00a},
-+      {0x00009818, 0x00000000},
-+      {0x0000981c, 0x00020028},
-+      {0x00009834, 0x6400a190},
-+      {0x00009838, 0x0108ecff},
-+      {0x0000983c, 0x14000600},
-+      {0x00009880, 0x201fff00},
-+      {0x00009884, 0x00001042},
-+      {0x000098a4, 0x00200400},
-+      {0x000098b0, 0x32840bbe},
-+      {0x000098bc, 0x00000002},
-+      {0x000098d0, 0x004b6a8e},
-+      {0x000098d4, 0x00000820},
-+      {0x000098dc, 0x00000000},
-+      {0x000098f0, 0x00000000},
-+      {0x000098f4, 0x00000000},
-+      {0x00009c04, 0xff55ff55},
-+      {0x00009c08, 0x0320ff55},
-+      {0x00009c0c, 0x00000000},
-+      {0x00009c10, 0x00000000},
-+      {0x00009c14, 0x00046384},
-+      {0x00009c18, 0x05b6b440},
-+      {0x00009c1c, 0x00b6b440},
-+      {0x00009d00, 0xc080a333},
-+      {0x00009d04, 0x40206c10},
-+      {0x00009d08, 0x009c4060},
-+      {0x00009d0c, 0x9883800a},
-+      {0x00009d10, 0x01834061},
-+      {0x00009d14, 0x00c0040b},
-+      {0x00009d18, 0x00000000},
-+      {0x00009e08, 0x0038230c},
-+      {0x00009e24, 0x990bb515},
-+      {0x00009e28, 0x0c6f0000},
-+      {0x00009e30, 0x06336f77},
-+      {0x00009e34, 0x6af6532f},
-+      {0x00009e38, 0x0cc80c00},
-+      {0x00009e40, 0x0d261820},
-+      {0x00009e4c, 0x00001004},
-+      {0x00009e50, 0x00ff03f1},
-+      {0x00009fc0, 0x813e4788},
-+      {0x00009fc4, 0x0001efb5},
-+      {0x00009fcc, 0x40000014},
-+      {0x00009fd0, 0x01193b93},
-+      {0x0000a20c, 0x00000000},
-+      {0x0000a220, 0x00000000},
-+      {0x0000a224, 0x00000000},
-+      {0x0000a228, 0x10002310},
-+      {0x0000a23c, 0x00000000},
-+      {0x0000a244, 0x0c000000},
-+      {0x0000a248, 0x00000140},
-+      {0x0000a2a0, 0x00000007},
-+      {0x0000a2c0, 0x00000007},
-+      {0x0000a2c8, 0x00000000},
-+      {0x0000a2d4, 0x00000000},
-+      {0x0000a2ec, 0x00000000},
-+      {0x0000a2f0, 0x00000000},
-+      {0x0000a2f4, 0x00000000},
-+      {0x0000a2f8, 0x00000000},
-+      {0x0000a344, 0x00000000},
-+      {0x0000a34c, 0x00000000},
-+      {0x0000a350, 0x0000a000},
-+      {0x0000a364, 0x00000000},
-+      {0x0000a370, 0x00000000},
-+      {0x0000a390, 0x00000001},
-+      {0x0000a394, 0x00000444},
-+      {0x0000a398, 0x1f020503},
-+      {0x0000a39c, 0x29180c03},
-+      {0x0000a3a0, 0x9a8b6844},
-+      {0x0000a3a4, 0x00000000},
-+      {0x0000a3a8, 0xaaaaaaaa},
-+      {0x0000a3ac, 0x3c466478},
-+      {0x0000a3c0, 0x20202020},
-+      {0x0000a3c4, 0x22222220},
-+      {0x0000a3c8, 0x20200020},
-+      {0x0000a3cc, 0x20202020},
-+      {0x0000a3d0, 0x20202020},
-+      {0x0000a3d4, 0x20202020},
-+      {0x0000a3d8, 0x20202020},
-+      {0x0000a3dc, 0x20202020},
-+      {0x0000a3e0, 0x20202020},
-+      {0x0000a3e4, 0x20202020},
-+      {0x0000a3e8, 0x20202020},
-+      {0x0000a3ec, 0x20202020},
-+      {0x0000a3f0, 0x00000000},
-+      {0x0000a3f4, 0x00000000},
-+      {0x0000a3f8, 0x0c9bd380},
-+      {0x0000a3fc, 0x000f0f01},
-+      {0x0000a400, 0x8fa91f01},
-+      {0x0000a404, 0x00000000},
-+      {0x0000a408, 0x0e79e5c6},
-+      {0x0000a40c, 0x00820820},
-+      {0x0000a414, 0x1ce739ce},
-+      {0x0000a418, 0x2d001dce},
-+      {0x0000a41c, 0x1ce739ce},
-+      {0x0000a420, 0x000001ce},
-+      {0x0000a424, 0x1ce739ce},
-+      {0x0000a428, 0x000001ce},
-+      {0x0000a42c, 0x1ce739ce},
-+      {0x0000a430, 0x1ce739ce},
-+      {0x0000a434, 0x00000000},
-+      {0x0000a438, 0x00001801},
-+      {0x0000a43c, 0x00100000},
-+      {0x0000a444, 0x00000000},
-+      {0x0000a448, 0x05000080},
-+      {0x0000a44c, 0x00000001},
-+      {0x0000a450, 0x00010000},
-+      {0x0000a458, 0x00000000},
-+      {0x0000a644, 0x3fad9d74},
-+      {0x0000a648, 0x0048060a},
-+      {0x0000a64c, 0x00003c37},
-+      {0x0000a670, 0x03020100},
-+      {0x0000a674, 0x09080504},
-+      {0x0000a678, 0x0d0c0b0a},
-+      {0x0000a67c, 0x13121110},
-+      {0x0000a680, 0x31301514},
-+      {0x0000a684, 0x35343332},
-+      {0x0000a688, 0x00000036},
-+      {0x0000a690, 0x00000838},
-+      {0x0000a7cc, 0x00000000},
-+      {0x0000a7d0, 0x00000000},
-+      {0x0000a7d4, 0x00000004},
-+      {0x0000a7dc, 0x00000000},
-+      {0x0000a8d0, 0x004b6a8e},
-+      {0x0000a8d4, 0x00000820},
-+      {0x0000a8dc, 0x00000000},
-+      {0x0000a8f0, 0x00000000},
-+      {0x0000a8f4, 0x00000000},
-+      {0x0000b2d0, 0x00000080},
-+      {0x0000b2d4, 0x00000000},
-+      {0x0000b2ec, 0x00000000},
-+      {0x0000b2f0, 0x00000000},
-+      {0x0000b2f4, 0x00000000},
-+      {0x0000b2f8, 0x00000000},
-+      {0x0000b408, 0x0e79e5c0},
-+      {0x0000b40c, 0x00820820},
-+      {0x0000b420, 0x00000000},
-+      {0x0000b8d0, 0x004b6a8e},
-+      {0x0000b8d4, 0x00000820},
-+      {0x0000b8dc, 0x00000000},
-+      {0x0000b8f0, 0x00000000},
-+      {0x0000b8f4, 0x00000000},
-+      {0x0000c2d0, 0x00000080},
-+      {0x0000c2d4, 0x00000000},
-+      {0x0000c2ec, 0x00000000},
-+      {0x0000c2f0, 0x00000000},
-+      {0x0000c2f4, 0x00000000},
-+      {0x0000c2f8, 0x00000000},
-+      {0x0000c408, 0x0e79e5c0},
-+      {0x0000c40c, 0x00820820},
-+      {0x0000c420, 0x00000000},
-+};
-+
-+static const u32 ar955x_1p0_common_wo_xlna_rx_gain_table[][2] = {
-+      /* Addr      allmodes  */
-+      {0x0000a000, 0x00010000},
-+      {0x0000a004, 0x00030002},
-+      {0x0000a008, 0x00050004},
-+      {0x0000a00c, 0x00810080},
-+      {0x0000a010, 0x00830082},
-+      {0x0000a014, 0x01810180},
-+      {0x0000a018, 0x01830182},
-+      {0x0000a01c, 0x01850184},
-+      {0x0000a020, 0x01890188},
-+      {0x0000a024, 0x018b018a},
-+      {0x0000a028, 0x018d018c},
-+      {0x0000a02c, 0x03820190},
-+      {0x0000a030, 0x03840383},
-+      {0x0000a034, 0x03880385},
-+      {0x0000a038, 0x038a0389},
-+      {0x0000a03c, 0x038c038b},
-+      {0x0000a040, 0x0390038d},
-+      {0x0000a044, 0x03920391},
-+      {0x0000a048, 0x03940393},
-+      {0x0000a04c, 0x03960395},
-+      {0x0000a050, 0x00000000},
-+      {0x0000a054, 0x00000000},
-+      {0x0000a058, 0x00000000},
-+      {0x0000a05c, 0x00000000},
-+      {0x0000a060, 0x00000000},
-+      {0x0000a064, 0x00000000},
-+      {0x0000a068, 0x00000000},
-+      {0x0000a06c, 0x00000000},
-+      {0x0000a070, 0x00000000},
-+      {0x0000a074, 0x00000000},
-+      {0x0000a078, 0x00000000},
-+      {0x0000a07c, 0x00000000},
-+      {0x0000a080, 0x29292929},
-+      {0x0000a084, 0x29292929},
-+      {0x0000a088, 0x29292929},
-+      {0x0000a08c, 0x29292929},
-+      {0x0000a090, 0x22292929},
-+      {0x0000a094, 0x1d1d2222},
-+      {0x0000a098, 0x0c111117},
-+      {0x0000a09c, 0x00030303},
-+      {0x0000a0a0, 0x00000000},
-+      {0x0000a0a4, 0x00000000},
-+      {0x0000a0a8, 0x00000000},
-+      {0x0000a0ac, 0x00000000},
-+      {0x0000a0b0, 0x00000000},
-+      {0x0000a0b4, 0x00000000},
-+      {0x0000a0b8, 0x00000000},
-+      {0x0000a0bc, 0x00000000},
-+      {0x0000a0c0, 0x001f0000},
-+      {0x0000a0c4, 0x01000101},
-+      {0x0000a0c8, 0x011e011f},
-+      {0x0000a0cc, 0x011c011d},
-+      {0x0000a0d0, 0x02030204},
-+      {0x0000a0d4, 0x02010202},
-+      {0x0000a0d8, 0x021f0200},
-+      {0x0000a0dc, 0x0302021e},
-+      {0x0000a0e0, 0x03000301},
-+      {0x0000a0e4, 0x031e031f},
-+      {0x0000a0e8, 0x0402031d},
-+      {0x0000a0ec, 0x04000401},
-+      {0x0000a0f0, 0x041e041f},
-+      {0x0000a0f4, 0x0502041d},
-+      {0x0000a0f8, 0x05000501},
-+      {0x0000a0fc, 0x051e051f},
-+      {0x0000a100, 0x06010602},
-+      {0x0000a104, 0x061f0600},
-+      {0x0000a108, 0x061d061e},
-+      {0x0000a10c, 0x07020703},
-+      {0x0000a110, 0x07000701},
-+      {0x0000a114, 0x00000000},
-+      {0x0000a118, 0x00000000},
-+      {0x0000a11c, 0x00000000},
-+      {0x0000a120, 0x00000000},
-+      {0x0000a124, 0x00000000},
-+      {0x0000a128, 0x00000000},
-+      {0x0000a12c, 0x00000000},
-+      {0x0000a130, 0x00000000},
-+      {0x0000a134, 0x00000000},
-+      {0x0000a138, 0x00000000},
-+      {0x0000a13c, 0x00000000},
-+      {0x0000a140, 0x001f0000},
-+      {0x0000a144, 0x01000101},
-+      {0x0000a148, 0x011e011f},
-+      {0x0000a14c, 0x011c011d},
-+      {0x0000a150, 0x02030204},
-+      {0x0000a154, 0x02010202},
-+      {0x0000a158, 0x021f0200},
-+      {0x0000a15c, 0x0302021e},
-+      {0x0000a160, 0x03000301},
-+      {0x0000a164, 0x031e031f},
-+      {0x0000a168, 0x0402031d},
-+      {0x0000a16c, 0x04000401},
-+      {0x0000a170, 0x041e041f},
-+      {0x0000a174, 0x0502041d},
-+      {0x0000a178, 0x05000501},
-+      {0x0000a17c, 0x051e051f},
-+      {0x0000a180, 0x06010602},
-+      {0x0000a184, 0x061f0600},
-+      {0x0000a188, 0x061d061e},
-+      {0x0000a18c, 0x07020703},
-+      {0x0000a190, 0x07000701},
-+      {0x0000a194, 0x00000000},
-+      {0x0000a198, 0x00000000},
-+      {0x0000a19c, 0x00000000},
-+      {0x0000a1a0, 0x00000000},
-+      {0x0000a1a4, 0x00000000},
-+      {0x0000a1a8, 0x00000000},
-+      {0x0000a1ac, 0x00000000},
-+      {0x0000a1b0, 0x00000000},
-+      {0x0000a1b4, 0x00000000},
-+      {0x0000a1b8, 0x00000000},
-+      {0x0000a1bc, 0x00000000},
-+      {0x0000a1c0, 0x00000000},
-+      {0x0000a1c4, 0x00000000},
-+      {0x0000a1c8, 0x00000000},
-+      {0x0000a1cc, 0x00000000},
-+      {0x0000a1d0, 0x00000000},
-+      {0x0000a1d4, 0x00000000},
-+      {0x0000a1d8, 0x00000000},
-+      {0x0000a1dc, 0x00000000},
-+      {0x0000a1e0, 0x00000000},
-+      {0x0000a1e4, 0x00000000},
-+      {0x0000a1e8, 0x00000000},
-+      {0x0000a1ec, 0x00000000},
-+      {0x0000a1f0, 0x00000396},
-+      {0x0000a1f4, 0x00000396},
-+      {0x0000a1f8, 0x00000396},
-+      {0x0000a1fc, 0x00000196},
-+      {0x0000b000, 0x00010000},
-+      {0x0000b004, 0x00030002},
-+      {0x0000b008, 0x00050004},
-+      {0x0000b00c, 0x00810080},
-+      {0x0000b010, 0x00830082},
-+      {0x0000b014, 0x01810180},
-+      {0x0000b018, 0x01830182},
-+      {0x0000b01c, 0x01850184},
-+      {0x0000b020, 0x02810280},
-+      {0x0000b024, 0x02830282},
-+      {0x0000b028, 0x02850284},
-+      {0x0000b02c, 0x02890288},
-+      {0x0000b030, 0x028b028a},
-+      {0x0000b034, 0x0388028c},
-+      {0x0000b038, 0x038a0389},
-+      {0x0000b03c, 0x038c038b},
-+      {0x0000b040, 0x0390038d},
-+      {0x0000b044, 0x03920391},
-+      {0x0000b048, 0x03940393},
-+      {0x0000b04c, 0x03960395},
-+      {0x0000b050, 0x00000000},
-+      {0x0000b054, 0x00000000},
-+      {0x0000b058, 0x00000000},
-+      {0x0000b05c, 0x00000000},
-+      {0x0000b060, 0x00000000},
-+      {0x0000b064, 0x00000000},
-+      {0x0000b068, 0x00000000},
-+      {0x0000b06c, 0x00000000},
-+      {0x0000b070, 0x00000000},
-+      {0x0000b074, 0x00000000},
-+      {0x0000b078, 0x00000000},
-+      {0x0000b07c, 0x00000000},
-+      {0x0000b080, 0x32323232},
-+      {0x0000b084, 0x2f2f3232},
-+      {0x0000b088, 0x23282a2d},
-+      {0x0000b08c, 0x1c1e2123},
-+      {0x0000b090, 0x14171919},
-+      {0x0000b094, 0x0e0e1214},
-+      {0x0000b098, 0x03050707},
-+      {0x0000b09c, 0x00030303},
-+      {0x0000b0a0, 0x00000000},
-+      {0x0000b0a4, 0x00000000},
-+      {0x0000b0a8, 0x00000000},
-+      {0x0000b0ac, 0x00000000},
-+      {0x0000b0b0, 0x00000000},
-+      {0x0000b0b4, 0x00000000},
-+      {0x0000b0b8, 0x00000000},
-+      {0x0000b0bc, 0x00000000},
-+      {0x0000b0c0, 0x003f0020},
-+      {0x0000b0c4, 0x00400041},
-+      {0x0000b0c8, 0x0140005f},
-+      {0x0000b0cc, 0x0160015f},
-+      {0x0000b0d0, 0x017e017f},
-+      {0x0000b0d4, 0x02410242},
-+      {0x0000b0d8, 0x025f0240},
-+      {0x0000b0dc, 0x027f0260},
-+      {0x0000b0e0, 0x0341027e},
-+      {0x0000b0e4, 0x035f0340},
-+      {0x0000b0e8, 0x037f0360},
-+      {0x0000b0ec, 0x04400441},
-+      {0x0000b0f0, 0x0460045f},
-+      {0x0000b0f4, 0x0541047f},
-+      {0x0000b0f8, 0x055f0540},
-+      {0x0000b0fc, 0x057f0560},
-+      {0x0000b100, 0x06400641},
-+      {0x0000b104, 0x0660065f},
-+      {0x0000b108, 0x067e067f},
-+      {0x0000b10c, 0x07410742},
-+      {0x0000b110, 0x075f0740},
-+      {0x0000b114, 0x077f0760},
-+      {0x0000b118, 0x07800781},
-+      {0x0000b11c, 0x07a0079f},
-+      {0x0000b120, 0x07c107bf},
-+      {0x0000b124, 0x000007c0},
-+      {0x0000b128, 0x00000000},
-+      {0x0000b12c, 0x00000000},
-+      {0x0000b130, 0x00000000},
-+      {0x0000b134, 0x00000000},
-+      {0x0000b138, 0x00000000},
-+      {0x0000b13c, 0x00000000},
-+      {0x0000b140, 0x003f0020},
-+      {0x0000b144, 0x00400041},
-+      {0x0000b148, 0x0140005f},
-+      {0x0000b14c, 0x0160015f},
-+      {0x0000b150, 0x017e017f},
-+      {0x0000b154, 0x02410242},
-+      {0x0000b158, 0x025f0240},
-+      {0x0000b15c, 0x027f0260},
-+      {0x0000b160, 0x0341027e},
-+      {0x0000b164, 0x035f0340},
-+      {0x0000b168, 0x037f0360},
-+      {0x0000b16c, 0x04400441},
-+      {0x0000b170, 0x0460045f},
-+      {0x0000b174, 0x0541047f},
-+      {0x0000b178, 0x055f0540},
-+      {0x0000b17c, 0x057f0560},
-+      {0x0000b180, 0x06400641},
-+      {0x0000b184, 0x0660065f},
-+      {0x0000b188, 0x067e067f},
-+      {0x0000b18c, 0x07410742},
-+      {0x0000b190, 0x075f0740},
-+      {0x0000b194, 0x077f0760},
-+      {0x0000b198, 0x07800781},
-+      {0x0000b19c, 0x07a0079f},
-+      {0x0000b1a0, 0x07c107bf},
-+      {0x0000b1a4, 0x000007c0},
-+      {0x0000b1a8, 0x00000000},
-+      {0x0000b1ac, 0x00000000},
-+      {0x0000b1b0, 0x00000000},
-+      {0x0000b1b4, 0x00000000},
-+      {0x0000b1b8, 0x00000000},
-+      {0x0000b1bc, 0x00000000},
-+      {0x0000b1c0, 0x00000000},
-+      {0x0000b1c4, 0x00000000},
-+      {0x0000b1c8, 0x00000000},
-+      {0x0000b1cc, 0x00000000},
-+      {0x0000b1d0, 0x00000000},
-+      {0x0000b1d4, 0x00000000},
-+      {0x0000b1d8, 0x00000000},
-+      {0x0000b1dc, 0x00000000},
-+      {0x0000b1e0, 0x00000000},
-+      {0x0000b1e4, 0x00000000},
-+      {0x0000b1e8, 0x00000000},
-+      {0x0000b1ec, 0x00000000},
-+      {0x0000b1f0, 0x00000396},
-+      {0x0000b1f4, 0x00000396},
-+      {0x0000b1f8, 0x00000396},
-+      {0x0000b1fc, 0x00000196},
-+};
-+
-+static const u32 ar955x_1p0_soc_preamble[][2] = {
-+      /* Addr      allmodes  */
-+      {0x00007000, 0x00000000},
-+      {0x00007004, 0x00000000},
-+      {0x00007008, 0x00000000},
-+      {0x0000700c, 0x00000000},
-+      {0x0000701c, 0x00000000},
-+      {0x00007020, 0x00000000},
-+      {0x00007024, 0x00000000},
-+      {0x00007028, 0x00000000},
-+      {0x0000702c, 0x00000000},
-+      {0x00007030, 0x00000000},
-+      {0x00007034, 0x00000002},
-+      {0x00007038, 0x000004c2},
-+      {0x00007048, 0x00000000},
-+};
-+
-+static const u32 ar955x_1p0_common_wo_xlna_rx_gain_bounds[][5] = {
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x00009e44, 0xfe321e27, 0xfe321e27, 0xfe291e27, 0xfe291e27},
-+      {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012},
-+};
-+
-+static const u32 ar955x_1p0_mac_postamble[][5] = {
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
-+      {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
-+      {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
-+      {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
-+      {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
-+      {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
-+      {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
-+      {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
-+};
-+
-+static const u32 ar955x_1p0_common_rx_gain_bounds[][5] = {
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x00009e44, 0xfe321e27, 0xfe321e27, 0xfe291e27, 0xfe291e27},
-+      {0x00009e48, 0x5030201a, 0x5030201a, 0x50302018, 0x50302018},
-+};
-+
-+static const u32 ar955x_1p0_modes_no_xpa_tx_gain_table[][9] = {
-+      /* Addr      5G_HT20_L   5G_HT40_L   5G_HT20_M   5G_HT40_M   5G_HT20_H   5G_HT40_H   2G_HT40     2G_HT20  */
-+      {0x0000a2dc, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0xfffe5aaa, 0xfffe5aaa},
-+      {0x0000a2e0, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0xfffe9ccc, 0xfffe9ccc},
-+      {0x0000a2e4, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0xffffe0f0, 0xffffe0f0},
-+      {0x0000a2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffef00, 0xffffef00},
-+      {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d8, 0x000050d8, 0x000050d8, 0x000050d8, 0x000050d7, 0x000050d7},
-+      {0x0000a500, 0x00002220, 0x00002220, 0x00002220, 0x00002220, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
-+      {0x0000a504, 0x04002222, 0x04002222, 0x04002222, 0x04002222, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-+      {0x0000a508, 0x09002421, 0x09002421, 0x09002421, 0x09002421, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
-+      {0x0000a50c, 0x0d002621, 0x0d002621, 0x0d002621, 0x0d002621, 0x0d002621, 0x0d002621, 0x0b000006, 0x0b000006},
-+      {0x0000a510, 0x13004620, 0x13004620, 0x13004620, 0x13004620, 0x13004620, 0x13004620, 0x0f00000a, 0x0f00000a},
-+      {0x0000a514, 0x19004a20, 0x19004a20, 0x19004a20, 0x19004a20, 0x19004a20, 0x19004a20, 0x1300000c, 0x1300000c},
-+      {0x0000a518, 0x1d004e20, 0x1d004e20, 0x1d004e20, 0x1d004e20, 0x1d004e20, 0x1d004e20, 0x1700000e, 0x1700000e},
-+      {0x0000a51c, 0x21005420, 0x21005420, 0x21005420, 0x21005420, 0x21005420, 0x21005420, 0x1b000012, 0x1b000012},
-+      {0x0000a520, 0x26005e20, 0x26005e20, 0x26005e20, 0x26005e20, 0x26005e20, 0x26005e20, 0x1f00004a, 0x1f00004a},
-+      {0x0000a524, 0x2b005e40, 0x2b005e40, 0x2b005e40, 0x2b005e40, 0x2b005e40, 0x2b005e40, 0x23000244, 0x23000244},
-+      {0x0000a528, 0x2f005e42, 0x2f005e42, 0x2f005e42, 0x2f005e42, 0x2f005e42, 0x2f005e42, 0x2700022b, 0x2700022b},
-+      {0x0000a52c, 0x33005e44, 0x33005e44, 0x33005e44, 0x33005e44, 0x33005e44, 0x33005e44, 0x2b000625, 0x2b000625},
-+      {0x0000a530, 0x38005e65, 0x38005e65, 0x38005e65, 0x38005e65, 0x38005e65, 0x38005e65, 0x2f001006, 0x2f001006},
-+      {0x0000a534, 0x3c005e69, 0x3c005e69, 0x3c005e69, 0x3c005e69, 0x3c005e69, 0x3c005e69, 0x330008a0, 0x330008a0},
-+      {0x0000a538, 0x40005e6b, 0x40005e6b, 0x40005e6b, 0x40005e6b, 0x40005e6b, 0x40005e6b, 0x37000a2a, 0x37000a2a},
-+      {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x44005e6d, 0x44005e6d, 0x44005e6d, 0x44005e6d, 0x3b001c23, 0x3b001c23},
-+      {0x0000a540, 0x49005e72, 0x49005e72, 0x49005e72, 0x49005e72, 0x49005e72, 0x49005e72, 0x3f0014a0, 0x3f0014a0},
-+      {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x4e005eb2, 0x4e005eb2, 0x4e005eb2, 0x4e005eb2, 0x43001882, 0x43001882},
-+      {0x0000a548, 0x53005f12, 0x53005f12, 0x53005f12, 0x53005f12, 0x53005f12, 0x53005f12, 0x47001ca2, 0x47001ca2},
-+      {0x0000a54c, 0x59025eb2, 0x59025eb2, 0x59025eb2, 0x59025eb2, 0x59025eb2, 0x59025eb2, 0x4b001ec3, 0x4b001ec3},
-+      {0x0000a550, 0x5e025f12, 0x5e025f12, 0x5e025f12, 0x5e025f12, 0x5e025f12, 0x5e025f12, 0x4f00148c, 0x4f00148c},
-+      {0x0000a554, 0x61027f12, 0x61027f12, 0x61027f12, 0x61027f12, 0x61027f12, 0x61027f12, 0x53001c6e, 0x53001c6e},
-+      {0x0000a558, 0x6702bf12, 0x6702bf12, 0x6702bf12, 0x6702bf12, 0x6702bf12, 0x6702bf12, 0x57001c92, 0x57001c92},
-+      {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x6b02bf14, 0x6b02bf14, 0x6b02bf14, 0x6b02bf14, 0x5c001af6, 0x5c001af6},
-+      {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+      {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+      {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+      {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+      {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+      {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+      {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+      {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+      {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+      {0x0000a610, 0x00804000, 0x00804000, 0x00804000, 0x00804000, 0x00804000, 0x00804000, 0x04005001, 0x04005001},
-+      {0x0000a614, 0x00804201, 0x00804201, 0x00804201, 0x00804201, 0x00804201, 0x00804201, 0x03808e02, 0x03808e02},
-+      {0x0000a618, 0x0280c802, 0x0280c802, 0x0280c802, 0x0280c802, 0x0280c802, 0x0280c802, 0x0300c000, 0x0300c000},
-+      {0x0000a61c, 0x0280ca03, 0x0280ca03, 0x0280ca03, 0x0280ca03, 0x0280ca03, 0x0280ca03, 0x03808e02, 0x03808e02},
-+      {0x0000a620, 0x04c15104, 0x04c15104, 0x04c15104, 0x04c15104, 0x04c15104, 0x04c15104, 0x03410c03, 0x03410c03},
-+      {0x0000a624, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04014c03, 0x04014c03},
-+      {0x0000a628, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x05818d04, 0x05818d04},
-+      {0x0000a62c, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x0801cd04, 0x0801cd04},
-+      {0x0000a630, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x0801e007, 0x0801e007},
-+      {0x0000a634, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x0801e007, 0x0801e007},
-+      {0x0000a638, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x0801e007, 0x0801e007},
-+      {0x0000a63c, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x0801e007, 0x0801e007},
-+      {0x0000b2dc, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0xfffe5aaa, 0xfffe5aaa},
-+      {0x0000b2e0, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0xfffe9ccc, 0xfffe9ccc},
-+      {0x0000b2e4, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0xffffe0f0, 0xffffe0f0},
-+      {0x0000b2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffef00, 0xffffef00},
-+      {0x0000c2dc, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0xfffe5aaa, 0xfffe5aaa},
-+      {0x0000c2e0, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0xfffe9ccc, 0xfffe9ccc},
-+      {0x0000c2e4, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0xffffe0f0, 0xffffe0f0},
-+      {0x0000c2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffef00, 0xffffef00},
-+      {0x00016044, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x054922d4, 0x054922d4},
-+      {0x00016048, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401},
-+      {0x00016444, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x054922d4, 0x054922d4},
-+      {0x00016448, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401},
-+      {0x00016844, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x054922d4, 0x054922d4},
-+      {0x00016848, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401},
-+};
-+
-+static const u32 ar955x_1p0_soc_postamble[][5] = {
-+      /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-+      {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023},
-+};
-+
-+static const u32 ar955x_1p0_modes_fast_clock[][3] = {
-+      /* Addr      5G_HT20     5G_HT40   */
-+      {0x00001030, 0x00000268, 0x000004d0},
-+      {0x00001070, 0x0000018c, 0x00000318},
-+      {0x000010b0, 0x00000fd0, 0x00001fa0},
-+      {0x00008014, 0x044c044c, 0x08980898},
-+      {0x0000801c, 0x148ec02b, 0x148ec057},
-+      {0x00008318, 0x000044c0, 0x00008980},
-+      {0x00009e00, 0x0372131c, 0x0372131c},
-+      {0x0000a230, 0x0000000b, 0x00000016},
-+      {0x0000a254, 0x00000898, 0x00001130},
-+};
-+
-+#endif /* INITVALS_955X_1P0_H */
diff --git a/package/mac80211/patches/578-ath9k-add-mode-register-initialization-code-for-AR95.patch b/package/mac80211/patches/578-ath9k-add-mode-register-initialization-code-for-AR95.patch
deleted file mode 100644 (file)
index 8a05012..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-From 2b4e3da2e595e1c76f65f7da752ec1f037446bd2 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:16 +0200
-Subject: [PATCH 09/20] ath9k: add mode register initialization code for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_hw.c  |   86 ++++++++++++++++++++++++++-
- drivers/net/wireless/ath/ath9k/ar9003_phy.c |   61 +++++++++++++++++++-
- drivers/net/wireless/ath/ath9k/hw.h         |    1 +
- 3 files changed, 145 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-@@ -328,7 +328,61 @@ static void ar9003_hw_init_mode_regs(str
-               INIT_INI_ARRAY(&ah->ini_japan2484, AR9462_BBC_TXIFR_COEFFJ,
-                               ARRAY_SIZE(AR9462_BBC_TXIFR_COEFFJ), 2);
-+      } else if (AR_SREV_9550(ah)) {
-+              /* mac */
-+              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
-+              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
-+                              ar955x_1p0_mac_core,
-+                              ARRAY_SIZE(ar955x_1p0_mac_core), 2);
-+              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
-+                              ar955x_1p0_mac_postamble,
-+                              ARRAY_SIZE(ar955x_1p0_mac_postamble), 5);
-+
-+              /* bb */
-+              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
-+              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
-+                              ar955x_1p0_baseband_core,
-+                              ARRAY_SIZE(ar955x_1p0_baseband_core), 2);
-+              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
-+                              ar955x_1p0_baseband_postamble,
-+                              ARRAY_SIZE(ar955x_1p0_baseband_postamble), 5);
-+
-+              /* radio */
-+              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
-+              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
-+                              ar955x_1p0_radio_core,
-+                              ARRAY_SIZE(ar955x_1p0_radio_core), 2);
-+              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
-+                              ar955x_1p0_radio_postamble,
-+                              ARRAY_SIZE(ar955x_1p0_radio_postamble), 5);
-+
-+              /* soc */
-+              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
-+                              ar955x_1p0_soc_preamble,
-+                              ARRAY_SIZE(ar955x_1p0_soc_preamble), 2);
-+              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
-+              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
-+                              ar955x_1p0_soc_postamble,
-+                              ARRAY_SIZE(ar955x_1p0_soc_postamble), 5);
-+              /* rx/tx gain */
-+              INIT_INI_ARRAY(&ah->iniModesRxGain,
-+                      ar955x_1p0_common_wo_xlna_rx_gain_table,
-+                      ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_table),
-+                      2);
-+              INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
-+                      ar955x_1p0_common_wo_xlna_rx_gain_bounds,
-+                      ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_bounds),
-+                      5);
-+              INIT_INI_ARRAY(&ah->iniModesTxGain,
-+                              ar955x_1p0_modes_xpa_tx_gain_table,
-+                              ARRAY_SIZE(ar955x_1p0_modes_xpa_tx_gain_table),
-+                              9);
-+
-+              /* Fast clock modal settings */
-+              INIT_INI_ARRAY(&ah->iniModesFastClock,
-+                              ar955x_1p0_modes_fast_clock,
-+                              ARRAY_SIZE(ar955x_1p0_modes_fast_clock), 3);
-       } else if (AR_SREV_9580(ah)) {
-               /* mac */
-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
-@@ -471,6 +525,11 @@ static void ar9003_tx_gain_table_mode0(s
-                       ar9485_modes_lowest_ob_db_tx_gain_1_1,
-                       ARRAY_SIZE(ar9485_modes_lowest_ob_db_tx_gain_1_1),
-                       5);
-+      else if (AR_SREV_9550(ah))
-+              INIT_INI_ARRAY(&ah->iniModesTxGain,
-+                      ar955x_1p0_modes_xpa_tx_gain_table,
-+                      ARRAY_SIZE(ar955x_1p0_modes_xpa_tx_gain_table),
-+                      9);
-       else if (AR_SREV_9580(ah))
-               INIT_INI_ARRAY(&ah->iniModesTxGain,
-                       ar9580_1p0_lowest_ob_db_tx_gain_table,
-@@ -515,6 +574,11 @@ static void ar9003_tx_gain_table_mode1(s
-                       ar9580_1p0_high_ob_db_tx_gain_table,
-                       ARRAY_SIZE(ar9580_1p0_high_ob_db_tx_gain_table),
-                       5);
-+      else if (AR_SREV_9550(ah))
-+              INIT_INI_ARRAY(&ah->iniModesTxGain,
-+                      ar955x_1p0_modes_no_xpa_tx_gain_table,
-+                      ARRAY_SIZE(ar955x_1p0_modes_no_xpa_tx_gain_table),
-+                      9);
-       else if (AR_SREV_9462_20(ah))
-               INIT_INI_ARRAY(&ah->iniModesTxGain,
-                       ar9462_modes_high_ob_db_tx_gain_table_2p0,
-@@ -636,7 +700,16 @@ static void ar9003_rx_gain_table_mode0(s
-                               ar9485Common_wo_xlna_rx_gain_1_1,
-                               ARRAY_SIZE(ar9485Common_wo_xlna_rx_gain_1_1),
-                               2);
--      else if (AR_SREV_9580(ah))
-+      else if (AR_SREV_9550(ah)) {
-+              INIT_INI_ARRAY(&ah->iniModesRxGain,
-+                              ar955x_1p0_common_rx_gain_table,
-+                              ARRAY_SIZE(ar955x_1p0_common_rx_gain_table),
-+                              2);
-+              INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
-+                              ar955x_1p0_common_rx_gain_bounds,
-+                              ARRAY_SIZE(ar955x_1p0_common_rx_gain_bounds),
-+                              5);
-+      } else if (AR_SREV_9580(ah))
-               INIT_INI_ARRAY(&ah->iniModesRxGain,
-                               ar9580_1p0_rx_gain_table,
-                               ARRAY_SIZE(ar9580_1p0_rx_gain_table),
-@@ -680,7 +753,16 @@ static void ar9003_rx_gain_table_mode1(s
-                       ar9462_common_wo_xlna_rx_gain_table_2p0,
-                       ARRAY_SIZE(ar9462_common_wo_xlna_rx_gain_table_2p0),
-                       2);
--      else if (AR_SREV_9580(ah))
-+      else if (AR_SREV_9550(ah)) {
-+              INIT_INI_ARRAY(&ah->iniModesRxGain,
-+                      ar955x_1p0_common_wo_xlna_rx_gain_table,
-+                      ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_table),
-+                      2);
-+              INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
-+                      ar955x_1p0_common_wo_xlna_rx_gain_bounds,
-+                      ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_bounds),
-+                      5);
-+      } else if (AR_SREV_9580(ah))
-               INIT_INI_ARRAY(&ah->iniModesRxGain,
-                       ar9580_1p0_wo_xlna_rx_gain_table,
-                       ARRAY_SIZE(ar9580_1p0_wo_xlna_rx_gain_table),
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -620,6 +620,50 @@ static void ar9003_hw_prog_ini(struct at
-       }
- }
-+static int ar9550_hw_get_modes_txgain_index(struct ath_hw *ah,
-+                                          struct ath9k_channel *chan)
-+{
-+      int ret;
-+
-+      switch (chan->chanmode) {
-+      case CHANNEL_A:
-+      case CHANNEL_A_HT20:
-+              if (chan->channel <= 5350)
-+                      ret = 1;
-+              else if ((chan->channel > 5350) && (chan->channel <= 5600))
-+                      ret = 3;
-+              else
-+                      ret = 5;
-+              break;
-+
-+      case CHANNEL_A_HT40PLUS:
-+      case CHANNEL_A_HT40MINUS:
-+              if (chan->channel <= 5350)
-+                      ret = 2;
-+              else if ((chan->channel > 5350) && (chan->channel <= 5600))
-+                      ret = 4;
-+              else
-+                      ret = 6;
-+              break;
-+
-+      case CHANNEL_G:
-+      case CHANNEL_G_HT20:
-+      case CHANNEL_B:
-+              ret = 8;
-+              break;
-+
-+      case CHANNEL_G_HT40PLUS:
-+      case CHANNEL_G_HT40MINUS:
-+              ret = 7;
-+              break;
-+
-+      default:
-+              ret = -EINVAL;
-+      }
-+
-+      return ret;
-+}
-+
- static int ar9003_hw_process_ini(struct ath_hw *ah,
-                                struct ath9k_channel *chan)
- {
-@@ -661,7 +705,22 @@ static int ar9003_hw_process_ini(struct
-       }
-       REG_WRITE_ARRAY(&ah->iniModesRxGain, 1, regWrites);
--      REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
-+      if (AR_SREV_9550(ah))
-+              REG_WRITE_ARRAY(&ah->ini_modes_rx_gain_bounds, modesIndex,
-+                              regWrites);
-+
-+      if (AR_SREV_9550(ah)) {
-+              int modes_txgain_index;
-+
-+              modes_txgain_index = ar9550_hw_get_modes_txgain_index(ah, chan);
-+              if (modes_txgain_index < 0)
-+                      return -EINVAL;
-+
-+              REG_WRITE_ARRAY(&ah->iniModesTxGain, modes_txgain_index,
-+                              regWrites);
-+      } else {
-+              REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
-+      }
-       /*
-        * For 5GHz channels requiring Fast Clock, apply
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -820,6 +820,7 @@ struct ath_hw {
-       struct ar5416IniArray iniModesFastClock;
-       struct ar5416IniArray iniAdditional;
-       struct ar5416IniArray iniModesRxGain;
-+      struct ar5416IniArray ini_modes_rx_gain_bounds;
-       struct ar5416IniArray iniModesTxGain;
-       struct ar5416IniArray iniCckfirNormal;
-       struct ar5416IniArray iniCckfirJapan2484;
diff --git a/package/mac80211/patches/579-ath9k-read-spur-frequency-information-from-eeprom-fo.patch b/package/mac80211/patches/579-ath9k-read-spur-frequency-information-from-eeprom-fo.patch
deleted file mode 100644 (file)
index fe2f818..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-From 987807e9e1a0ec0767635d0bd63003766fb527ad Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:16:06 +0200
-Subject: [PATCH 10/20] ath9k: read spur frequency information from eeprom for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_phy.c |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -180,7 +180,8 @@ static void ar9003_hw_spur_mitigate_mrc_
-        * is out-of-band and can be ignored.
-        */
--      if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah)) {
-+      if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah) ||
-+          AR_SREV_9550(ah)) {
-               spur_fbin_ptr = ar9003_get_spur_chan_ptr(ah,
-                                                        IS_CHAN_2GHZ(chan));
-               if (spur_fbin_ptr[0] == 0) /* No spur */
-@@ -207,7 +208,8 @@ static void ar9003_hw_spur_mitigate_mrc_
-               if (AR_SREV_9462(ah) && (i == 0 || i == 3))
-                       continue;
-               negative = 0;
--              if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah))
-+              if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah) ||
-+                  AR_SREV_9550(ah))
-                       cur_bb_spur = ath9k_hw_fbin2freq(spur_fbin_ptr[i],
-                                                        IS_CHAN_2GHZ(chan));
-               else
diff --git a/package/mac80211/patches/580-ath9k-fix-XPABIASLEVEL-settings-for-AR9550.patch b/package/mac80211/patches/580-ath9k-fix-XPABIASLEVEL-settings-for-AR9550.patch
deleted file mode 100644 (file)
index 5fc02f9..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-From a317eaa189d885e53400dc86c131390be17fd760 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 11/20] ath9k: fix XPABIASLEVEL settings for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_eeprom.c |    2 +-
- drivers/net/wireless/ath/ath9k/ar9003_phy.h    |    4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-@@ -3519,7 +3519,7 @@ static void ar9003_hw_xpa_bias_level_app
-       if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
-               REG_RMW_FIELD(ah, AR_CH0_TOP2, AR_CH0_TOP2_XPABIASLVL, bias);
--      else if (AR_SREV_9462(ah))
-+      else if (AR_SREV_9462(ah) || AR_SREV_9550(ah))
-               REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
-       else {
-               REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
-@@ -636,8 +636,8 @@
- #define AR_CH0_TOP    (AR_SREV_9300(ah) ? 0x16288 : \
-                               ((AR_SREV_9462(ah) ? 0x1628c : 0x16280)))
--#define AR_CH0_TOP_XPABIASLVL (0x300)
--#define AR_CH0_TOP_XPABIASLVL_S (8)
-+#define AR_CH0_TOP_XPABIASLVL (AR_SREV_9550(ah) ? 0x3c0 : 0x300)
-+#define AR_CH0_TOP_XPABIASLVL_S (AR_SREV_9550(ah) ? 6 : 8)
- #define AR_CH0_THERM  (AR_SREV_9300(ah) ? 0x16290 : \
-                               ((AR_SREV_9485(ah) ? 0x1628c : 0x16294)))
diff --git a/package/mac80211/patches/581-ath9k-fix-antenna-control-configuration-for-AR9550.patch b/package/mac80211/patches/581-ath9k-fix-antenna-control-configuration-for-AR9550.patch
deleted file mode 100644 (file)
index 324e3a0..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-From 48032d5c88c936fc84a2d676474c5fe714d8ef94 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 12/20] ath9k: fix antenna control configuration for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_eeprom.c |    3 +++
- drivers/net/wireless/ath/ath9k/ar9003_phy.h    |    2 ++
- 2 files changed, 5 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-@@ -3601,6 +3601,9 @@ static void ar9003_hw_ant_ctrl_apply(str
-       if (AR_SREV_9462(ah)) {
-               REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM,
-                               AR_SWITCH_TABLE_COM_AR9462_ALL, value);
-+      } else if (AR_SREV_9550(ah)) {
-+              REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM,
-+                              AR_SWITCH_TABLE_COM_AR9550_ALL, value);
-       } else
-               REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM,
-                             AR_SWITCH_TABLE_COM_ALL, value);
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
-@@ -650,6 +650,8 @@
- #define AR_SWITCH_TABLE_COM_ALL_S (0)
- #define AR_SWITCH_TABLE_COM_AR9462_ALL (0xffffff)
- #define AR_SWITCH_TABLE_COM_AR9462_ALL_S (0)
-+#define AR_SWITCH_TABLE_COM_AR9550_ALL (0xffffff)
-+#define AR_SWITCH_TABLE_COM_AR9550_ALL_S (0)
- #define AR_SWITCH_TABLE_COM_SPDT (0x00f00000)
- #define AR_SWITCH_TABLE_COM_SPDT_ALL (0x0000fff0)
- #define AR_SWITCH_TABLE_COM_SPDT_ALL_S (4)
diff --git a/package/mac80211/patches/582-ath9k-fix-PAPRD-settings-for-AR9550.patch b/package/mac80211/patches/582-ath9k-fix-PAPRD-settings-for-AR9550.patch
deleted file mode 100644 (file)
index 11188bc..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-From 76ea066dcf42308aec8d20ef75170c1ecae82e60 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 13/20] ath9k: fix PAPRD settings for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_paprd.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
-@@ -211,7 +211,7 @@ static int ar9003_paprd_setup_single_tab
-                     AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_NUM_CORR_STAGES, 7);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
-                     AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_MIN_LOOPBACK_DEL, 1);
--      if (AR_SREV_9485(ah) || AR_SREV_9462(ah))
-+      if (AR_SREV_9485(ah) || AR_SREV_9462(ah) || AR_SREV_9550(ah))
-               REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
-                             AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_QUICK_DROP,
-                             -3);
diff --git a/package/mac80211/patches/583-ath9k-fix-RF-channel-frequency-configuration-for-AR9.patch b/package/mac80211/patches/583-ath9k-fix-RF-channel-frequency-configuration-for-AR9.patch
deleted file mode 100644 (file)
index b191bfd..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-From 5e08c36e3ef57712fee83248d0db3d2837e13f5f Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 14/20] ath9k: fix RF channel frequency configuration for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_phy.c |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -99,7 +99,7 @@ static int ar9003_hw_set_channel(struct
-                       channelSel = (freq * 4) / 120;
-                       chan_frac = (((freq * 4) % 120) * 0x20000) / 120;
-                       channelSel = (channelSel << 17) | chan_frac;
--              } else if (AR_SREV_9340(ah)) {
-+              } else if (AR_SREV_9340(ah) || AR_SREV_9550(ah)) {
-                       if (ah->is_clk_25mhz) {
-                               u32 chan_frac;
-@@ -113,7 +113,8 @@ static int ar9003_hw_set_channel(struct
-               /* Set to 2G mode */
-               bMode = 1;
-       } else {
--              if (AR_SREV_9340(ah) && ah->is_clk_25mhz) {
-+              if ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) &&
-+                  ah->is_clk_25mhz) {
-                       u32 chan_frac;
-                       channelSel = (freq * 2) / 75;
diff --git a/package/mac80211/patches/584-ath9k-disable-SYNC_HOST1_FATAL-interrupts-for-AR9550.patch b/package/mac80211/patches/584-ath9k-disable-SYNC_HOST1_FATAL-interrupts-for-AR9550.patch
deleted file mode 100644 (file)
index 9846fcf..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-From 70a436c98a8479f15fe6ba7f894f88eede238dfa Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 15/20] ath9k: disable SYNC_HOST1_FATAL interrupts for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c  |    2 +-
- drivers/net/wireless/ath/ath9k/mac.c |    2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -939,7 +939,7 @@ static void ath9k_hw_init_interrupt_mask
-               AR_IMR_RXORN |
-               AR_IMR_BCNMISC;
--      if (AR_SREV_9340(ah))
-+      if (AR_SREV_9340(ah) || AR_SREV_9550(ah))
-               sync_default &= ~AR_INTR_SYNC_HOST1_FATAL;
-       if (AR_SREV_9300_20_OR_LATER(ah)) {
---- a/drivers/net/wireless/ath/ath9k/mac.c
-+++ b/drivers/net/wireless/ath/ath9k/mac.c
-@@ -810,7 +810,7 @@ void ath9k_hw_enable_interrupts(struct a
-               return;
-       }
--      if (AR_SREV_9340(ah))
-+      if (AR_SREV_9340(ah) || AR_SREV_9550(ah))
-               sync_default &= ~AR_INTR_SYNC_HOST1_FATAL;
-       async_mask = AR_INTR_MAC_IRQ;
diff --git a/package/mac80211/patches/585-ath9k-skip-internal-regulator-configuration-for-AR95.patch b/package/mac80211/patches/585-ath9k-skip-internal-regulator-configuration-for-AR95.patch
deleted file mode 100644 (file)
index 9e91f8d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-From 9c598271929ea9a54f57e82af15260dc4afea590 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 16/20] ath9k: skip internal regulator configuration for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_eeprom.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-@@ -3970,7 +3970,7 @@ static void ath9k_hw_ar9300_set_board_va
-       ar9003_hw_drive_strength_apply(ah);
-       ar9003_hw_atten_apply(ah, chan);
-       ar9003_hw_quick_drop_apply(ah, chan->channel);
--      if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah))
-+      if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah) && !AR_SREV_9550(ah))
-               ar9003_hw_internal_regulator_apply(ah);
-       if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
-               ar9003_hw_apply_tuning_caps(ah);
diff --git a/package/mac80211/patches/586-ath9k-fix-PLL-initialization-for-AR9550.patch b/package/mac80211/patches/586-ath9k-fix-PLL-initialization-for-AR9550.patch
deleted file mode 100644 (file)
index 1023630..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-From d211df2956ae9d696bb0cab985426e0d236544b8 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:16:00 +0200
-Subject: [PATCH 17/20] ath9k: fix PLL initialization for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c |   27 +++++++++++++++++++--------
- 1 files changed, 19 insertions(+), 8 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -861,7 +861,7 @@ static void ath9k_hw_init_pll(struct ath
-               /* program BB PLL phase_shift */
-               REG_RMW_FIELD(ah, AR_CH0_BB_DPLL3,
-                             AR_CH0_BB_DPLL3_PHASE_SHIFT, 0x1);
--      } else if (AR_SREV_9340(ah)) {
-+      } else if (AR_SREV_9340(ah) || AR_SREV_9550(ah)) {
-               u32 regval, pll2_divint, pll2_divfrac, refdiv;
-               REG_WRITE(ah, AR_RTC_PLL_CONTROL, 0x1142c);
-@@ -875,9 +875,15 @@ static void ath9k_hw_init_pll(struct ath
-                       pll2_divfrac = 0x1eb85;
-                       refdiv = 3;
-               } else {
--                      pll2_divint = 88;
--                      pll2_divfrac = 0;
--                      refdiv = 5;
-+                      if (AR_SREV_9340(ah)) {
-+                              pll2_divint = 88;
-+                              pll2_divfrac = 0;
-+                              refdiv = 5;
-+                      } else {
-+                              pll2_divint = 0x11;
-+                              pll2_divfrac = 0x26666;
-+                              refdiv = 1;
-+                      }
-               }
-               regval = REG_READ(ah, AR_PHY_PLL_MODE);
-@@ -890,8 +896,12 @@ static void ath9k_hw_init_pll(struct ath
-               udelay(100);
-               regval = REG_READ(ah, AR_PHY_PLL_MODE);
--              regval = (regval & 0x80071fff) | (0x1 << 30) | (0x1 << 13) |
--                       (0x4 << 26) | (0x18 << 19);
-+              if (AR_SREV_9340(ah))
-+                      regval = (regval & 0x80071fff) | (0x1 << 30) |
-+                               (0x1 << 13) | (0x4 << 26) | (0x18 << 19);
-+              else
-+                      regval = (regval & 0x80071fff) | (0x3 << 30) |
-+                               (0x1 << 13) | (0x4 << 26) | (0x60 << 19);
-               REG_WRITE(ah, AR_PHY_PLL_MODE, regval);
-               REG_WRITE(ah, AR_PHY_PLL_MODE,
-                         REG_READ(ah, AR_PHY_PLL_MODE) & 0xfffeffff);
-@@ -902,7 +912,8 @@ static void ath9k_hw_init_pll(struct ath
-       REG_WRITE(ah, AR_RTC_PLL_CONTROL, pll);
--      if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah))
-+      if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah) ||
-+          AR_SREV_9550(ah))
-               udelay(1000);
-       /* Switch the core clock for ar9271 to 117Mhz */
-@@ -915,7 +926,7 @@ static void ath9k_hw_init_pll(struct ath
-       REG_WRITE(ah, AR_RTC_SLEEP_CLK, AR_RTC_FORCE_DERIVED_CLK);
--      if (AR_SREV_9340(ah)) {
-+      if (AR_SREV_9340(ah) || AR_SREV_9550(ah)) {
-               if (ah->is_clk_25mhz) {
-                       REG_WRITE(ah, AR_RTC_DERIVED_CLK, 0x17c << 1);
-                       REG_WRITE(ah, AR_SLP32_MODE, 0x0010f3d7);
diff --git a/package/mac80211/patches/587-ath9k-enable-PLL-workaround-for-AR9550.patch b/package/mac80211/patches/587-ath9k-enable-PLL-workaround-for-AR9550.patch
deleted file mode 100644 (file)
index af03ecd..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-From 29fe3ae617d86bf1b39d15e43cee29b723118648 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:59 +0200
-Subject: [PATCH 18/20] ath9k: enable PLL workaround for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/main.c |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -167,7 +167,8 @@ static void ath_restart_work(struct ath_
-       ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
--      if (AR_SREV_9485(sc->sc_ah) || AR_SREV_9340(sc->sc_ah))
-+      if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9485(sc->sc_ah) ||
-+          AR_SREV_9550(sc->sc_ah))
-               ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work,
-                                    msecs_to_jiffies(ATH_PLL_WORK_INTERVAL));
diff --git a/package/mac80211/patches/588-ath9k-set-4ADDRESS-bit-in-RX-filter-for-AR9550.patch b/package/mac80211/patches/588-ath9k-set-4ADDRESS-bit-in-RX-filter-for-AR9550.patch
deleted file mode 100644 (file)
index aba87db..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-From f8e7d8fcb297db362c9288ef5f1cd778e7ddd1a9 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:59 +0200
-Subject: [PATCH 19/20] ath9k: set 4ADDRESS bit in RX filter for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/mac.h  |    1 +
- drivers/net/wireless/ath/ath9k/recv.c |    3 +++
- 2 files changed, 4 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/mac.h
-+++ b/drivers/net/wireless/ath/ath9k/mac.h
-@@ -642,6 +642,7 @@ enum ath9k_rx_filter {
-       ATH9K_RX_FILTER_PHYRADAR = 0x00002000,
-       ATH9K_RX_FILTER_MCAST_BCAST_ALL = 0x00008000,
-       ATH9K_RX_FILTER_CONTROL_WRAPPER = 0x00080000,
-+      ATH9K_RX_FILTER_4ADDRESS = 0x00100000,
- };
- #define ATH9K_RATESERIES_RTS_CTS  0x0001
---- a/drivers/net/wireless/ath/ath9k/recv.c
-+++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -430,6 +430,9 @@ u32 ath_calcrxfilter(struct ath_softc *s
-               rfilt |= ATH9K_RX_FILTER_MCAST_BCAST_ALL;
-       }
-+      if (AR_SREV_9550(sc->sc_ah))
-+              rfilt |= ATH9K_RX_FILTER_4ADDRESS;
-+
-       return rfilt;
- }
diff --git a/package/mac80211/patches/589-ath9k-enable-support-for-AR9550.patch b/package/mac80211/patches/589-ath9k-enable-support-for-AR9550.patch
deleted file mode 100644 (file)
index 5574941..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-From 23693513280521914ceb6d92c1bd7613e7b19c58 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:16:00 +0200
-Subject: [PATCH 20/20] ath9k: enable support for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -658,6 +658,7 @@ static int __ath9k_hw_init(struct ath_hw
-       case AR_SREV_VERSION_9485:
-       case AR_SREV_VERSION_9340:
-       case AR_SREV_VERSION_9462:
-+      case AR_SREV_VERSION_9550:
-               break;
-       default:
-               ath_err(common,
-@@ -735,6 +736,7 @@ int ath9k_hw_init(struct ath_hw *ah)
-       case AR9300_DEVID_AR9485_PCIE:
-       case AR9300_DEVID_AR9330:
-       case AR9300_DEVID_AR9340:
-+      case AR9300_DEVID_QCA955X:
-       case AR9300_DEVID_AR9580:
-       case AR9300_DEVID_AR9462:
-               break;
index 22d7dca6f98da6f9fb041b1a42c5fc1f4f0e3851..a7609ede47c461c9c8862edb8696b5b9aaab9697 100644 (file)
@@ -8,7 +8,7 @@
  /*
   * PCI driver handlers.
   */
-@@ -383,6 +384,7 @@ int rt2x00pci_resume(struct pci_dev *pci
+@@ -392,6 +393,7 @@ int rt2x00pci_resume(struct pci_dev *pci
  }
  EXPORT_SYMBOL_GPL(rt2x00pci_resume);
  #endif /* CONFIG_PM */
index 6651a6f9db4dd0cc369686ac1446d8ca5db1b51b..9ff50b7bfed52082a902f4edd973fc475574d2f0 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/rt2x00/rt2x00pci.c
 +++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
-@@ -272,8 +272,10 @@ int rt2x00pci_probe(struct pci_dev *pci_
+@@ -273,8 +273,10 @@ int rt2x00pci_probe(struct pci_dev *pci_
  
        pci_set_master(pci_dev);
  
index abfd41b64094f2117ed1de21b777ddfa5a694977..0c979ec9c1720ed3676d606dec75447b0112be77 100644 (file)
 +}
 --- a/drivers/net/wireless/rt2x00/rt2x00.h
 +++ b/drivers/net/wireless/rt2x00/rt2x00.h
-@@ -559,6 +559,7 @@ struct rt2x00lib_ops {
+@@ -560,6 +560,7 @@ struct rt2x00lib_ops {
                               const u8 *data, const size_t len);
        int (*load_firmware) (struct rt2x00_dev *rt2x00dev,
                              const u8 *data, const size_t len);
  
        /*
         * Device initialization/deinitialization handlers.
-@@ -720,6 +721,7 @@ enum rt2x00_capability_flags {
+@@ -721,6 +722,7 @@ enum rt2x00_capability_flags {
        REQUIRE_SW_SEQNO,
        REQUIRE_HT_TX_DESC,
        REQUIRE_PS_AUTOWAKE,
  
        /*
         * Capabilities
-@@ -975,6 +977,11 @@ struct rt2x00_dev {
+@@ -976,6 +978,11 @@ struct rt2x00_dev {
        const struct firmware *fw;
  
        /*
        select RT2X00_LIB_CRYPTO
        select CRC_CCITT
        select EEPROM_93CX6
-@@ -204,6 +205,9 @@ config RT2X00_LIB_FIRMWARE
+@@ -212,6 +213,9 @@ config RT2X00_LIB_FIRMWARE
  config RT2X00_LIB_CRYPTO
        boolean
  
  
  #ifdef CONFIG_PCI
  static void rt2800pci_eepromregister_read(struct eeprom_93cx6 *eeprom)
-@@ -311,6 +301,20 @@ static int rt2800pci_write_firmware(stru
+@@ -317,6 +307,20 @@ static int rt2800pci_write_firmware(stru
  }
  
  /*
   * Initialization functions.
   */
  static bool rt2800pci_get_entry_state(struct queue_entry *entry)
-@@ -1082,6 +1086,7 @@ static const struct rt2x00lib_ops rt2800
+@@ -1159,6 +1163,7 @@ static const struct rt2x00lib_ops rt2800
        .get_firmware_name      = rt2800pci_get_firmware_name,
        .check_firmware         = rt2800_check_firmware,
        .load_firmware          = rt2800_load_firmware,
index d310f33bc8736996e9aee64f217843bc230a2436..5331b2678d55b9b708f54f1efd240748a8b6dd62 100644 (file)
@@ -1,6 +1,6 @@
 --- a/config.mk
 +++ b/config.mk
-@@ -619,6 +619,7 @@ export CONFIG_RT2X00=y
+@@ -624,6 +624,7 @@ export CONFIG_RT2X00=y
  export CONFIG_RT2X00_LIB=m
  export CONFIG_RT2800_LIB=m
  export CONFIG_RT2X00_LIB_FIRMWARE=y
index 4630ae57bfbc91df4b113db8eca021d604126181..c2b46fd966d80122222be51566715f8028024d36 100644 (file)
@@ -9,7 +9,7 @@
  {
        memcpy(rt2x00dev->eeprom, rt2x00dev->eeprom_file->data, EEPROM_SIZE);
  }
-@@ -968,8 +968,9 @@ static int rt2800pci_validate_eeprom(str
+@@ -974,8 +974,9 @@ static int rt2800pci_validate_eeprom(str
        /*
         * Read EEPROM into buffer
         */
@@ -30,8 +30,8 @@
 +      struct rt2x00_platform_data *pdata;
        struct rt2x00_dev *rt2x00dev;
        int retval;
-@@ -299,6 +300,12 @@ int rt2x00pci_probe(struct pci_dev *pci_
+       u16 chip;
+@@ -300,6 +301,12 @@ int rt2x00pci_probe(struct pci_dev *pci_
        rt2x00dev->irq = pci_dev->irq;
        rt2x00dev->name = pci_name(pci_dev);
  
index 3fc1b3f09706637b43b5c86f2ba37a452d49ecbd..57abb07ab669b3d1ed823b31f4ed31d265c3bfe7 100644 (file)
@@ -37,7 +37,7 @@
                num_rates += 4;
 --- a/drivers/net/wireless/rt2x00/rt2x00.h
 +++ b/drivers/net/wireless/rt2x00/rt2x00.h
-@@ -424,6 +424,7 @@ struct hw_mode_spec {
+@@ -425,6 +425,7 @@ struct hw_mode_spec {
        unsigned int supported_bands;
  #define SUPPORT_BAND_2GHZ     0x00000001
  #define SUPPORT_BAND_5GHZ     0x00000002
index 17ca7381cc52d9e75ab5398f19f83af47d375927..5008180f7d94066f0e49035ea3760bc7e387eac2 100644 (file)
@@ -31,7 +31,7 @@
  {
 --- a/drivers/net/wireless/rt2x00/rt2x00.h
 +++ b/drivers/net/wireless/rt2x00/rt2x00.h
-@@ -1279,6 +1279,7 @@ static inline void rt2x00debug_dump_fram
+@@ -1280,6 +1280,7 @@ static inline void rt2x00debug_dump_fram
   */
  u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev,
                         struct ieee80211_vif *vif);
index 6fe763647cc93ccd01d2056f661afc360048834f..776d44e7996a111cb84b4bd0054a10ca2d556b6d 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/mwl8k.c
 +++ b/drivers/net/wireless/mwl8k.c
-@@ -5296,6 +5296,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
+@@ -5297,6 +5297,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
  MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API));
  
  static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = {
index d3131d40767dceccb2b3e2d71e42e6fcb717ebb4..98153f01b723db9b5d494c5a0a35555af8bae819 100644 (file)
@@ -88,7 +88,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
                dev->phy.writes_counter = 0;
 --- a/drivers/net/wireless/b43/phy_n.c
 +++ b/drivers/net/wireless/b43/phy_n.c
-@@ -4837,14 +4837,14 @@ static inline void check_phyreg(struct b
+@@ -4838,14 +4838,14 @@ static inline void check_phyreg(struct b
  static u16 b43_nphy_op_read(struct b43_wldev *dev, u16 reg)
  {
        check_phyreg(dev, reg);
@@ -105,7 +105,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
        b43_write16(dev, B43_MMIO_PHY_DATA, value);
  }
  
-@@ -4852,7 +4852,7 @@ static void b43_nphy_op_maskset(struct b
+@@ -4853,7 +4853,7 @@ static void b43_nphy_op_maskset(struct b
                                 u16 set)
  {
        check_phyreg(dev, reg);
@@ -114,7 +114,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
        b43_maskset16(dev, B43_MMIO_PHY_DATA, mask, set);
  }
  
-@@ -4863,7 +4863,7 @@ static u16 b43_nphy_op_radio_read(struct
+@@ -4864,7 +4864,7 @@ static u16 b43_nphy_op_radio_read(struct
        /* N-PHY needs 0x100 for read access */
        reg |= 0x100;
  
@@ -123,7 +123,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
        return b43_read16(dev, B43_MMIO_RADIO_DATA_LOW);
  }
  
-@@ -4872,7 +4872,7 @@ static void b43_nphy_op_radio_write(stru
+@@ -4873,7 +4873,7 @@ static void b43_nphy_op_radio_write(stru
        /* Register 1 is a 32-bit register. */
        B43_WARN_ON(reg == 1);
  
index 24c3e2356f42d69fe30b56df24e1da1733ddf59a..dacc2d230d0438502a16e472d0b4bcdbdd4dec23 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
 +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -4233,9 +4233,8 @@ static void brcms_c_radio_timer(void *ar
+@@ -4220,9 +4220,8 @@ static void brcms_c_radio_timer(void *ar
  }
  
  /* common low-level watchdog code */
@@ -11,7 +11,7 @@
        struct brcms_hardware *wlc_hw = wlc->hw;
  
        BCMMSG(wlc->wiphy, "wl%d\n", wlc_hw->unit);
-@@ -4256,10 +4255,8 @@ static void brcms_b_watchdog(void *arg)
+@@ -4243,10 +4242,8 @@ static void brcms_b_watchdog(void *arg)
  }
  
  /* common watchdog code */
@@ -23,7 +23,7 @@
        BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit);
  
        if (!wlc->pub->up)
-@@ -4299,7 +4296,9 @@ static void brcms_c_watchdog(void *arg)
+@@ -4286,7 +4283,9 @@ static void brcms_c_watchdog(void *arg)
  
  static void brcms_c_watchdog_by_timer(void *arg)
  {
index 40ccde90b528d0f725aae88fc0b24c6d442ad97b..9da72691100b88caa935ca81a1f51123771886e6 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
 +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -1943,7 +1943,8 @@ static bool brcms_b_radio_read_hwdisable
+@@ -1944,7 +1944,8 @@ static bool brcms_b_radio_read_hwdisable
                 * accesses phyreg throughput mac. This can be skipped since
                 * only mac reg is accessed below
                 */
@@ -10,7 +10,7 @@
  
                /*
                 * TODO: test suspend/resume
-@@ -2024,7 +2025,8 @@ void brcms_b_corereset(struct brcms_hard
+@@ -2025,7 +2026,8 @@ void brcms_b_corereset(struct brcms_hard
         * phyreg throughput mac, AND phy_reset is skipped at early stage when
         * band->pi is invalid. need to enable PHY CLK
         */
index c5cf2fd67f5e8c2ff66861201db8a8de23f4c579..f6efb714bdee23f035e4a630a8e042a9b561e598 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
 +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -270,7 +270,7 @@ struct brcms_c_bit_desc {
+@@ -271,7 +271,7 @@ struct brcms_c_bit_desc {
   */
  
  /* Starting corerev for the fifo size table */
@@ -9,7 +9,7 @@
  
  struct d11init {
        __le16 addr;
-@@ -334,6 +334,26 @@ const u8 wlc_prio2prec_map[] = {
+@@ -335,6 +335,26 @@ const u8 wlc_prio2prec_map[] = {
  };
  
  static const u16 xmtfifo_sz[][NFIFO] = {
@@ -36,7 +36,7 @@
        /* corerev 20: 5120, 49152, 49152, 5376, 4352, 1280 */
        {20, 192, 192, 21, 17, 5},
        /* corerev 21: 2304, 14848, 5632, 3584, 3584, 1280 */
-@@ -344,6 +364,18 @@ static const u16 xmtfifo_sz[][NFIFO] = {
+@@ -345,6 +365,18 @@ static const u16 xmtfifo_sz[][NFIFO] = {
        {20, 192, 192, 21, 17, 5},
        /* corerev 24: 2304, 14848, 5632, 3584, 3584, 1280 */
        {9, 58, 22, 14, 14, 5},
@@ -55,7 +55,7 @@
  };
  
  #ifdef DEBUG
-@@ -4611,8 +4643,15 @@ static int brcms_b_attach(struct brcms_c
+@@ -4598,8 +4630,15 @@ static int brcms_b_attach(struct brcms_c
                wlc_hw->machwcap_backup = wlc_hw->machwcap;
  
                /* init tx fifo size */
index 2d09dff1cfe46e63cf5a5e0853bbb30aca695e96..e7bf689ade04f2aea31305dcf5119f70a1d3fe84 100644 (file)
@@ -10,7 +10,7 @@
        BCMA_CORETABLE_END
 --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
 +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -751,7 +751,7 @@ static void brcms_c_ucode_bsinit(struct 
+@@ -752,7 +752,7 @@ static void brcms_c_ucode_bsinit(struct 
        brcms_c_write_mhf(wlc_hw, wlc_hw->band->mhfs);
  
        /* do band-specific ucode IHR, SHM, and SCR inits */
@@ -19,7 +19,7 @@
                if (BRCMS_ISNPHY(wlc_hw->band))
                        brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16);
                else
-@@ -2276,7 +2276,7 @@ static void brcms_ucode_download(struct 
+@@ -2277,7 +2277,7 @@ static void brcms_ucode_download(struct 
        if (wlc_hw->ucode_loaded)
                return;
  
@@ -28,7 +28,7 @@
                if (BRCMS_ISNPHY(wlc_hw->band)) {
                        brcms_ucode_write(wlc_hw, ucode->bcm43xx_16_mimo,
                                          ucode->bcm43xx_16_mimosz);
-@@ -3252,7 +3252,7 @@ static void brcms_b_coreinit(struct brcm
+@@ -3239,7 +3239,7 @@ static void brcms_b_coreinit(struct brcm
  
        sflags = bcma_aread32(core, BCMA_IOST);
  
index df53b00f494609e02f55af8ff671b07675fa5a45..161da8c6c596da4e8d03d0b85249553817ebe86c 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
 +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -4166,6 +4166,7 @@ void brcms_c_wme_setparams(struct brcms_
+@@ -4153,6 +4153,7 @@ void brcms_c_wme_setparams(struct brcms_
                                          M_EDCF_QINFO +
                                          wme_ac2fifo[aci] * M_EDCF_QLEN + i,
                                          *shm_entry++);
@@ -8,7 +8,7 @@
        }
  
        if (suspend) {
-@@ -4570,7 +4571,8 @@ static int brcms_b_attach(struct brcms_c
+@@ -4557,7 +4558,8 @@ static int brcms_b_attach(struct brcms_c
  
        /* check device id(srom, nvram etc.) to set bands */
        if (wlc_hw->deviceid == BCM43224_D11N_ID ||
@@ -18,7 +18,7 @@
                /* Dualband boards */
                wlc_hw->_nbands = 2;
        else
-@@ -5831,7 +5833,7 @@ bool brcms_c_chipmatch(u16 vendor, u16 d
+@@ -5816,7 +5818,7 @@ bool brcms_c_chipmatch(u16 vendor, u16 d
                return false;
        }
  
index dd50eb294109901db051aabe84d2f068b0ccef7e..4cb089a2545e6287e2de1ec7eae71e7e5c0627e9 100644 (file)
@@ -10,7 +10,7 @@
  MODULE_DEVICE_TABLE(bcma, brcms_coreid_table);
 --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
 +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -751,7 +751,7 @@ static void brcms_c_ucode_bsinit(struct 
+@@ -752,7 +752,7 @@ static void brcms_c_ucode_bsinit(struct 
        brcms_c_write_mhf(wlc_hw, wlc_hw->band->mhfs);
  
        /* do band-specific ucode IHR, SHM, and SCR inits */
@@ -19,7 +19,7 @@
                if (BRCMS_ISNPHY(wlc_hw->band))
                        brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16);
                else
-@@ -2276,7 +2276,7 @@ static void brcms_ucode_download(struct 
+@@ -2277,7 +2277,7 @@ static void brcms_ucode_download(struct 
        if (wlc_hw->ucode_loaded)
                return;
  
@@ -28,7 +28,7 @@
                if (BRCMS_ISNPHY(wlc_hw->band)) {
                        brcms_ucode_write(wlc_hw, ucode->bcm43xx_16_mimo,
                                          ucode->bcm43xx_16_mimosz);
-@@ -3252,7 +3252,7 @@ static void brcms_b_coreinit(struct brcm
+@@ -3239,7 +3239,7 @@ static void brcms_b_coreinit(struct brcm
  
        sflags = bcma_aread32(core, BCMA_IOST);