mac80211: add initial support for AR9330
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 1 Jun 2011 13:12:31 +0000 (13:12 +0000)
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 1 Jun 2011 13:12:31 +0000 (13:12 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@27084 3c298f89-4303-0410-b956-a3cf2f4a3e73

33 files changed:
package/mac80211/Makefile
package/mac80211/patches/540-ath9k-define-mac-version-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/541-ath9k-define-device-id-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/542-ath9k-add-MAC-revision-detection-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/543-ath9k-add-platform-device-id-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/544-ath9k-add-AR9330-initvals.patch [new file with mode: 0644]
package/mac80211/patches/545-ath9k-initialize-mode-registers-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/546-ath9k-initialize-tx-gain-table-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/547-ath9k-initialize-rx-gain-table-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/548-ath9k-add-AR9330-specific-PLL-initialization.patch [new file with mode: 0644]
package/mac80211/patches/549-ath9k-use-different-BB-watchdog-timeout-value-for-AR.patch [new file with mode: 0644]
package/mac80211/patches/550-ath9k-don-t-enable-LDPC-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/551-ath9k-read-spur-frequency-information-from-eeprom-fo.patch [new file with mode: 0644]
package/mac80211/patches/552-ath9k-fix-channel-frequency-calculation-for-AR9340.patch [new file with mode: 0644]
package/mac80211/patches/553-ath9k-configure-RF-channel-frequency-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/554-ath9k-enable-TX-RX-data-byte-swap-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/555-ath9k-skip-internal-regulator-configuration-for-AR93.patch [new file with mode: 0644]
package/mac80211/patches/556-ath9k-enable-tuning-capacitance-configuration-for-AR.patch [new file with mode: 0644]
package/mac80211/patches/557-ath9k-use-correct-EEPROM-base-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/558-ath9k-configure-xpa-bias-level-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/559-ath9k-set-NF-limits-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/560-ath9k-enable-antenna-diversity-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/561-ath9k-use-correct-max_streams-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/562-ath9k-add-a-missing-case-statement-to-ath_ant_div_co.patch [new file with mode: 0644]
package/mac80211/patches/563-ath9k-fix-antenna-diversity-configuration-for-non-AR.patch [new file with mode: 0644]
package/mac80211/patches/564-ath9k-remove-superfluous-parentheses.patch [new file with mode: 0644]
package/mac80211/patches/565-ath9k-add-fast_div_bias-configuration-for-diversity-.patch [new file with mode: 0644]
package/mac80211/patches/566-ath9k-set-diversity-group-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/567-ath9k-fix-few-register-offsets-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/568-ath9k-configure-diversity-based-on-eeprom-contents-f.patch [new file with mode: 0644]
package/mac80211/patches/569-ath9k-configure-internal-regulator-for-AR9330.patch [new file with mode: 0644]
package/mac80211/patches/570-ath9k-add-external_reset-callback-to-ath9k_platfom_d.patch [new file with mode: 0644]
package/mac80211/patches/571-ath9k-enable-support-for-AR9330.patch [new file with mode: 0644]

index 492fc97..9032d4b 100644 (file)
@@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
 PKG_NAME:=mac80211
 
 PKG_VERSION:=2011-05-27
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
 PKG_MD5SUM:=3a382b03333aff304dbe8ee94fce6b5a
 
diff --git a/package/mac80211/patches/540-ath9k-define-mac-version-for-AR9330.patch b/package/mac80211/patches/540-ath9k-define-mac-version-for-AR9330.patch
new file mode 100644 (file)
index 0000000..09fd3e3
--- /dev/null
@@ -0,0 +1,64 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index 1be7c8b..05c2ba2 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -551,6 +551,7 @@ static int __ath9k_hw_init(struct ath_hw *ah)
+       case AR_SREV_VERSION_9287:
+       case AR_SREV_VERSION_9271:
+       case AR_SREV_VERSION_9300:
++      case AR_SREV_VERSION_9330:
+       case AR_SREV_VERSION_9485:
+       case AR_SREV_VERSION_9340:
+               break;
+@@ -561,7 +562,8 @@ static int __ath9k_hw_init(struct ath_hw *ah)
+               return -EOPNOTSUPP;
+       }
+-      if (AR_SREV_9271(ah) || AR_SREV_9100(ah) || AR_SREV_9340(ah))
++      if (AR_SREV_9271(ah) || AR_SREV_9100(ah) || AR_SREV_9340(ah) ||
++          AR_SREV_9330(ah))
+               ah->is_pciexpress = false;
+       ah->hw_version.phyRev = REG_READ(ah, AR_PHY_CHIP_ID);
+@@ -2574,6 +2576,7 @@ static struct {
+       { AR_SREV_VERSION_9287,         "9287" },
+       { AR_SREV_VERSION_9271,         "9271" },
+       { AR_SREV_VERSION_9300,         "9300" },
++      { AR_SREV_VERSION_9330,         "9330" },
+       { AR_SREV_VERSION_9485,         "9485" },
+ };
+diff --git a/drivers/net/wireless/ath/ath9k/reg.h b/drivers/net/wireless/ath/ath9k/reg.h
+index c18ee99..a483388 100644
+--- a/drivers/net/wireless/ath/ath9k/reg.h
++++ b/drivers/net/wireless/ath/ath9k/reg.h
+@@ -788,6 +788,10 @@
+ #define AR_SREV_REVISION_9271_11      1
+ #define AR_SREV_VERSION_9300          0x1c0
+ #define AR_SREV_REVISION_9300_20      2 /* 2.0 and 2.1 */
++#define AR_SREV_VERSION_9330          0x200
++#define AR_SREV_REVISION_9330_10      0
++#define AR_SREV_REVISION_9330_11      1
++#define AR_SREV_REVISION_9330_12      2
+ #define AR_SREV_VERSION_9485          0x240
+ #define AR_SREV_REVISION_9485_10      0
+ #define AR_SREV_REVISION_9485_11        1
+@@ -862,6 +866,18 @@
+ #define AR_SREV_9300_20_OR_LATER(_ah) \
+       ((_ah)->hw_version.macVersion >= AR_SREV_VERSION_9300)
++#define AR_SREV_9330(_ah) \
++      (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9330))
++#define AR_SREV_9330_10(_ah) \
++      (AR_SREV_9330((_ah)) && \
++       ((_ah)->hw_version.macRev == AR_SREV_REVISION_9330_10))
++#define AR_SREV_9330_11(_ah) \
++      (AR_SREV_9330((_ah)) && \
++       ((_ah)->hw_version.macRev == AR_SREV_REVISION_9330_11))
++#define AR_SREV_9330_12(_ah) \
++      (AR_SREV_9330((_ah)) && \
++       ((_ah)->hw_version.macRev == AR_SREV_REVISION_9330_12))
++
+ #define AR_SREV_9485(_ah) \
+       (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9485))
+ #define AR_SREV_9485_10(_ah) \
diff --git a/package/mac80211/patches/541-ath9k-define-device-id-for-AR9330.patch b/package/mac80211/patches/541-ath9k-define-device-id-for-AR9330.patch
new file mode 100644 (file)
index 0000000..515c1d4
--- /dev/null
@@ -0,0 +1,12 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
+index 4b157c5..9f23451 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.h
++++ b/drivers/net/wireless/ath/ath9k/hw.h
+@@ -45,6 +45,7 @@
+ #define AR9300_DEVID_PCIE     0x0030
+ #define AR9300_DEVID_AR9340   0x0031
+ #define AR9300_DEVID_AR9485_PCIE 0x0032
++#define AR9300_DEVID_AR9330   0x0035
+ #define AR5416_AR9100_DEVID   0x000b
diff --git a/package/mac80211/patches/542-ath9k-add-MAC-revision-detection-for-AR9330.patch b/package/mac80211/patches/542-ath9k-add-MAC-revision-detection-for-AR9330.patch
new file mode 100644 (file)
index 0000000..9f5fa1c
--- /dev/null
@@ -0,0 +1,57 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index 05c2ba2..ade8655 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -251,6 +251,15 @@ static void ath9k_hw_read_revisions(struct ath_hw *ah)
+       case AR5416_AR9100_DEVID:
+               ah->hw_version.macVersion = AR_SREV_VERSION_9100;
+               break;
++      case AR9300_DEVID_AR9330:
++              ah->hw_version.macVersion = AR_SREV_VERSION_9330;
++              if (ah->get_mac_revision) {
++                      ah->hw_version.macRev = ah->get_mac_revision();
++              } else {
++                      val = REG_READ(ah, AR_SREV);
++                      ah->hw_version.macRev = MS(val, AR_SREV_REVISION2);
++              }
++              return;
+       case AR9300_DEVID_AR9340:
+               ah->hw_version.macVersion = AR_SREV_VERSION_9340;
+               val = REG_READ(ah, AR_SREV);
+diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
+index 9f23451..8d9ac49 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.h
++++ b/drivers/net/wireless/ath/ath9k/hw.h
+@@ -863,6 +863,7 @@ struct ath_hw {
+       u32 ent_mode;
+       bool is_clk_25mhz;
++      int (*get_mac_revision)(void);
+ };
+ struct ath_bus_ops {
+diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
+index 45c585a..c2defa2 100644
+--- a/drivers/net/wireless/ath/ath9k/init.c
++++ b/drivers/net/wireless/ath/ath9k/init.c
+@@ -575,6 +575,7 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
+               sc->sc_ah->gpio_val = pdata->gpio_val;
+               sc->sc_ah->led_pin = pdata->led_pin;
+               ah->is_clk_25mhz = pdata->is_clk_25mhz;
++              ah->get_mac_revision = pdata->get_mac_revision;
+       }
+       common = ath9k_hw_common(ah);
+diff --git a/include/linux/ath9k_platform.h b/include/linux/ath9k_platform.h
+index 60a7c49..c207607 100644
+--- a/include/linux/ath9k_platform.h
++++ b/include/linux/ath9k_platform.h
+@@ -30,6 +30,7 @@ struct ath9k_platform_data {
+       u32 gpio_val;
+       bool is_clk_25mhz;
++      int (*get_mac_revision)(void);
+ };
+ #endif /* _LINUX_ATH9K_PLATFORM_H */
+
diff --git a/package/mac80211/patches/543-ath9k-add-platform-device-id-for-AR9330.patch b/package/mac80211/patches/543-ath9k-add-platform-device-id-for-AR9330.patch
new file mode 100644 (file)
index 0000000..3727406
--- /dev/null
@@ -0,0 +1,15 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ahb.c b/drivers/net/wireless/ath/ath9k/ahb.c
+index 5b49cd0..0b36fcf 100644
+--- a/drivers/net/wireless/ath/ath9k/ahb.c
++++ b/drivers/net/wireless/ath/ath9k/ahb.c
+@@ -27,6 +27,10 @@ static const struct platform_device_id ath9k_platform_id_table[] = {
+               .driver_data = AR5416_AR9100_DEVID,
+       },
+       {
++              .name = "ar933x_wmac",
++              .driver_data = AR9300_DEVID_AR9330,
++      },
++      {
+               .name = "ar934x_wmac",
+               .driver_data = AR9300_DEVID_AR9340,
+       },
diff --git a/package/mac80211/patches/544-ath9k-add-AR9330-initvals.patch b/package/mac80211/patches/544-ath9k-add-AR9330-initvals.patch
new file mode 100644 (file)
index 0000000..363b35c
--- /dev/null
@@ -0,0 +1,2551 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9330_1p1_initvals.h b/drivers/net/wireless/ath/ath9k/ar9330_1p1_initvals.h
+new file mode 100644
+index 0000000..9593333
+--- /dev/null
++++ b/drivers/net/wireless/ath/ath9k/ar9330_1p1_initvals.h
+@@ -0,0 +1,1303 @@
++/*
++ * Copyright (c) 2011 Atheros Communications 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_9330_1P1_H
++#define INITVALS_9330_1P1_H
++
++static const u32 ar9331_1p1_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, 0x037216a4, 0x037216a4},
++      {0x00009e04, 0x00182020, 0x00182020, 0x00182020, 0x00182020},
++      {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
++      {0x00009e10, 0x7ec80d2e, 0x7ec80d2e, 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, 0x00003221, 0x00003221},
++      {0x00009e3c, 0xcf946222, 0xcf946222, 0xcf946222, 0xcf946222},
++      {0x00009e44, 0x02321e27, 0x02321e27, 0x02282324, 0x02282324},
++      {0x00009e48, 0x5030201a, 0x5030201a, 0x50302010, 0x50302010},
++      {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
++      {0x0000a204, 0x00003fc0, 0x00003fc4, 0x00003fc4, 0x00003fc0},
++      {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
++      {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b},
++      {0x0000a234, 0x00000fff, 0x00000fff, 0x10000fff, 0x00000fff},
++      {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, 0x00000000, 0x00000000},
++      {0x0000a288, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
++      {0x0000a28c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
++      {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
++      {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071981},
++      {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
++      {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
++      {0x0000ae04, 0x00802020, 0x00802020, 0x00802020, 0x00802020},
++      {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
++};
++
++static const u32 ar9331_modes_lowest_ob_db_tx_gain_1p1[][5] = {
++      /*   Addr     5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
++      {0x0000a2d8, 0x7999a83a, 0x7999a83a, 0x7999a83a, 0x7999a83a},
++      {0x0000a2dc, 0xffff2a52, 0xffff2a52, 0xffff2a52, 0xffff2a52},
++      {0x0000a2e0, 0xffffcc84, 0xffffcc84, 0xffffcc84, 0xffffcc84},
++      {0x0000a2e4, 0xfffff000, 0xfffff000, 0xfffff000, 0xfffff000},
++      {0x0000a2e8, 0xfffe0000, 0xfffe0000, 0xfffe0000, 0xfffe0000},
++      {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d0, 0x000050d0},
++      {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, 0x2d000a20, 0x2d000a20},
++      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x31000a22, 0x31000a22},
++      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x35000a24, 0x35000a24},
++      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000a43, 0x38000a43},
++      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3b000e42, 0x3b000e42},
++      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x3f000e44, 0x3f000e44},
++      {0x0000a544, 0x6502feca, 0x6502feca, 0x42000e64, 0x42000e64},
++      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46000e66, 0x46000e66},
++      {0x0000a54c, 0x7203feca, 0x7203feca, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {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, 0x01404501, 0x01404501, 0x01404501, 0x01404501},
++      {0x0000a61c, 0x02008802, 0x02008802, 0x02008802, 0x02008802},
++      {0x0000a620, 0x0280c802, 0x0280c802, 0x0280c802, 0x0280c802},
++      {0x0000a624, 0x03010a03, 0x03010a03, 0x03010a03, 0x03010a03},
++      {0x0000a628, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a62c, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a630, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a634, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a638, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a63c, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x00016044, 0x034922db, 0x034922db, 0x034922db, 0x034922db},
++      {0x00016284, 0x14d3f000, 0x14d3f000, 0x14d3f000, 0x14d3f000},
++};
++
++static const u32 ar9331_modes_high_ob_db_tx_gain_1p1[][5] = {
++      /*   Addr     5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
++      {0x0000a2d8, 0x7999a83a, 0x7999a83a, 0x7999a83a, 0x7999a83a},
++      {0x0000a2dc, 0xffaa9a52, 0xffaa9a52, 0xffaa9a52, 0xffaa9a52},
++      {0x0000a2e0, 0xffb31c84, 0xffb31c84, 0xffb31c84, 0xffb31c84},
++      {0x0000a2e4, 0xff43e000, 0xff43e000, 0xff43e000, 0xff43e000},
++      {0x0000a2e8, 0xfffc0000, 0xfffc0000, 0xfffc0000, 0xfffc0000},
++      {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, 0x3d001620, 0x3d001620},
++      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x3f001621, 0x3f001621},
++      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x42001640, 0x42001640},
++      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x44001641, 0x44001641},
++      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x46001642, 0x46001642},
++      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x49001644, 0x49001644},
++      {0x0000a544, 0x6502feca, 0x6502feca, 0x4c001a81, 0x4c001a81},
++      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x4f001a83, 0x4f001a83},
++      {0x0000a54c, 0x7203feca, 0x7203feca, 0x52001c84, 0x52001c84},
++      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x55001ce3, 0x55001ce3},
++      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x59001ce5, 0x59001ce5},
++      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5d001ce9, 0x5d001ce9},
++      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x64001eec, 0x64001eec},
++      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x64001eec, 0x64001eec},
++      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x64001eec, 0x64001eec},
++      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x64001eec, 0x64001eec},
++      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x64001eec, 0x64001eec},
++      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x64001eec, 0x64001eec},
++      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x64001eec, 0x64001eec},
++      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x64001eec, 0x64001eec},
++      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x64001eec, 0x64001eec},
++      {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, 0x0280c802, 0x0280c802, 0x0280c802, 0x0280c802},
++      {0x0000a624, 0x0280ca03, 0x0280ca03, 0x0280ca03, 0x0280ca03},
++      {0x0000a628, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a62c, 0x04015005, 0x04015005, 0x04015005, 0x04015005},
++      {0x0000a630, 0x04015005, 0x04015005, 0x04015005, 0x04015005},
++      {0x0000a634, 0x04015005, 0x04015005, 0x04015005, 0x04015005},
++      {0x0000a638, 0x04015005, 0x04015005, 0x04015005, 0x04015005},
++      {0x0000a63c, 0x04015005, 0x04015005, 0x04015005, 0x04015005},
++};
++
++static const u32 ar9331_modes_low_ob_db_tx_gain_1p1[][5] = {
++      /*   Addr     5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
++      {0x0000a2d8, 0x7999a83a, 0x7999a83a, 0x7999a83a, 0x7999a83a},
++      {0x0000a2dc, 0xffff2a52, 0xffff2a52, 0xffff2a52, 0xffff2a52},
++      {0x0000a2e0, 0xffffcc84, 0xffffcc84, 0xffffcc84, 0xffffcc84},
++      {0x0000a2e4, 0xfffff000, 0xfffff000, 0xfffff000, 0xfffff000},
++      {0x0000a2e8, 0xfffe0000, 0xfffe0000, 0xfffe0000, 0xfffe0000},
++      {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d0, 0x000050d0},
++      {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, 0x2d000a20, 0x2d000a20},
++      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x31000a22, 0x31000a22},
++      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x35000a24, 0x35000a24},
++      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000a43, 0x38000a43},
++      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3b000e42, 0x3b000e42},
++      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x3f000e44, 0x3f000e44},
++      {0x0000a544, 0x6502feca, 0x6502feca, 0x42000e64, 0x42000e64},
++      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46000e66, 0x46000e66},
++      {0x0000a54c, 0x7203feca, 0x7203feca, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {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, 0x01404501, 0x01404501, 0x01404501, 0x01404501},
++      {0x0000a61c, 0x02008802, 0x02008802, 0x02008802, 0x02008802},
++      {0x0000a620, 0x0280c802, 0x0280c802, 0x0280c802, 0x0280c802},
++      {0x0000a624, 0x03010a03, 0x03010a03, 0x03010a03, 0x03010a03},
++      {0x0000a628, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a62c, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a630, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a634, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a638, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a63c, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x00016044, 0x034922db, 0x034922db, 0x034922db, 0x034922db},
++      {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},
++};
++
++static const u32 ar9331_1p1_xtal_25M[][2] = {
++      /* Addr      allmodes  */
++      {0x00007038, 0x000002f8},
++      {0x00008244, 0x0010f3d7},
++      {0x0000824c, 0x0001e7ae},
++      {0x0001609c, 0x0f508f29},
++};
++
++static const u32 ar9331_1p1_radio_core[][2] = {
++      /* Addr      allmodes  */
++      {0x00016000, 0x36db6db6},
++      {0x00016004, 0x6db6db40},
++      {0x00016008, 0x73800000},
++      {0x0001600c, 0x00000000},
++      {0x00016040, 0x7f80fff8},
++      {0x00016044, 0x03db62db},
++      {0x00016048, 0x6c924268},
++      {0x0001604c, 0x000f0278},
++      {0x00016050, 0x4db6db8c},
++      {0x00016054, 0x6db60000},
++      {0x00016080, 0x00080000},
++      {0x00016084, 0x0e48048c},
++      {0x00016088, 0x14214514},
++      {0x0001608c, 0x119f081c},
++      {0x00016090, 0x24926490},
++      {0x00016098, 0xd411eb84},
++      {0x000160a0, 0xc2108ffe},
++      {0x000160a4, 0x812fc370},
++      {0x000160a8, 0x423c8000},
++      {0x000160ac, 0x24651800},
++      {0x000160b0, 0x03284f3e},
++      {0x000160b4, 0x92480040},
++      {0x000160c0, 0x006db6db},
++      {0x000160c4, 0x0186db60},
++      {0x000160c8, 0x6db6db6c},
++      {0x000160cc, 0x6de6c300},
++      {0x000160d0, 0x14500820},
++      {0x00016100, 0x04cb0001},
++      {0x00016104, 0xfff80015},
++      {0x00016108, 0x00080010},
++      {0x0001610c, 0x00170000},
++      {0x00016140, 0x10804000},
++      {0x00016144, 0x01884080},
++      {0x00016148, 0x000080c0},
++      {0x00016280, 0x01000015},
++      {0x00016284, 0x14d20000},
++      {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},
++};
++
++static const u32 ar9331_1p1_baseband_postamble_emulation[][5] = {
++      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
++      {0x00009e3c, 0xcf946221, 0xcf946221, 0xcf946221, 0xcf946221},
++      {0x00009e44, 0x005c0000, 0x005c0000, 0x005c0000, 0x005c0000},
++      {0x0000a2d8, 0x7999a800, 0x7999a800, 0x7999a80c, 0x7999a80c},
++};
++
++static const u32 ar9331_1p1_mac_core_emulation[][2] = {
++      /* Addr      allmodes  */
++      {0x0000805c, 0xffffc7ff},
++      {0x00008344, 0xaa4a105b},
++};
++
++static const u32 ar9331_1p1_emulation_baseband_core[][2] = {
++      /* Addr      allmodes  */
++      {0x0000a344, 0x00000010},
++};
++
++static const u32 ar9331_1p1_soc_postamble[][5] = {
++      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
++      {0x00007010, 0x00000022, 0x00000022, 0x00000022, 0x00000022},
++};
++
++static const u32 ar9331_common_wo_xlna_rx_gain_1p1[][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 ar9331_common_rx_gain_1p1_emulation[][2] = {
++      /* Addr      allmodes  */
++      {0x0000a000, 0x02000101},
++      {0x0000a004, 0x02000102},
++      {0x0000a008, 0x02000103},
++      {0x0000a00c, 0x02000104},
++      {0x0000a010, 0x02000200},
++      {0x0000a014, 0x02000201},
++      {0x0000a018, 0x02000202},
++      {0x0000a01c, 0x02000203},
++      {0x0000a020, 0x02000204},
++      {0x0000a024, 0x02000205},
++      {0x0000a028, 0x02000208},
++      {0x0000a02c, 0x02000302},
++      {0x0000a030, 0x02000303},
++      {0x0000a034, 0x02000304},
++      {0x0000a038, 0x02000400},
++      {0x0000a03c, 0x02010300},
++      {0x0000a040, 0x02010301},
++      {0x0000a044, 0x02010302},
++      {0x0000a048, 0x02000500},
++      {0x0000a04c, 0x02010400},
++      {0x0000a050, 0x02020300},
++      {0x0000a054, 0x02020301},
++      {0x0000a058, 0x02020302},
++      {0x0000a05c, 0x02020303},
++      {0x0000a060, 0x02020400},
++      {0x0000a064, 0x02030300},
++      {0x0000a068, 0x02030301},
++      {0x0000a06c, 0x02030302},
++      {0x0000a070, 0x02030303},
++      {0x0000a074, 0x02030400},
++      {0x0000a078, 0x02040300},
++      {0x0000a07c, 0x02040301},
++      {0x0000a080, 0x02040302},
++      {0x0000a084, 0x02040303},
++      {0x0000a088, 0x02030500},
++      {0x0000a08c, 0x02040400},
++      {0x0000a090, 0x02050203},
++      {0x0000a094, 0x02050204},
++      {0x0000a098, 0x02050205},
++      {0x0000a09c, 0x02040500},
++      {0x0000a0a0, 0x02050301},
++      {0x0000a0a4, 0x02050302},
++      {0x0000a0a8, 0x02050303},
++      {0x0000a0ac, 0x02050400},
++      {0x0000a0b0, 0x02050401},
++      {0x0000a0b4, 0x02050402},
++      {0x0000a0b8, 0x02050403},
++      {0x0000a0bc, 0x02050500},
++      {0x0000a0c0, 0x02050501},
++      {0x0000a0c4, 0x02050502},
++      {0x0000a0c8, 0x02050503},
++      {0x0000a0cc, 0x02050504},
++      {0x0000a0d0, 0x02050600},
++      {0x0000a0d4, 0x02050601},
++      {0x0000a0d8, 0x02050602},
++      {0x0000a0dc, 0x02050603},
++      {0x0000a0e0, 0x02050604},
++      {0x0000a0e4, 0x02050700},
++      {0x0000a0e8, 0x02050701},
++      {0x0000a0ec, 0x02050702},
++      {0x0000a0f0, 0x02050703},
++      {0x0000a0f4, 0x02050704},
++      {0x0000a0f8, 0x02050705},
++      {0x0000a0fc, 0x02050708},
++      {0x0000a100, 0x02050709},
++      {0x0000a104, 0x0205070a},
++      {0x0000a108, 0x0205070b},
++      {0x0000a10c, 0x0205070c},
++      {0x0000a110, 0x0205070d},
++      {0x0000a114, 0x02050710},
++      {0x0000a118, 0x02050711},
++      {0x0000a11c, 0x02050712},
++      {0x0000a120, 0x02050713},
++      {0x0000a124, 0x02050714},
++      {0x0000a128, 0x02050715},
++      {0x0000a12c, 0x02050730},
++      {0x0000a130, 0x02050731},
++      {0x0000a134, 0x02050732},
++      {0x0000a138, 0x02050733},
++      {0x0000a13c, 0x02050734},
++      {0x0000a140, 0x02050735},
++      {0x0000a144, 0x02050750},
++      {0x0000a148, 0x02050751},
++      {0x0000a14c, 0x02050752},
++      {0x0000a150, 0x02050753},
++      {0x0000a154, 0x02050754},
++      {0x0000a158, 0x02050755},
++      {0x0000a15c, 0x02050770},
++      {0x0000a160, 0x02050771},
++      {0x0000a164, 0x02050772},
++      {0x0000a168, 0x02050773},
++      {0x0000a16c, 0x02050774},
++      {0x0000a170, 0x02050775},
++      {0x0000a174, 0x00000776},
++      {0x0000a178, 0x00000776},
++      {0x0000a17c, 0x00000776},
++      {0x0000a180, 0x00000776},
++      {0x0000a184, 0x00000776},
++      {0x0000a188, 0x00000776},
++      {0x0000a18c, 0x00000776},
++      {0x0000a190, 0x00000776},
++      {0x0000a194, 0x00000776},
++      {0x0000a198, 0x00000776},
++      {0x0000a19c, 0x00000776},
++      {0x0000a1a0, 0x00000776},
++      {0x0000a1a4, 0x00000776},
++      {0x0000a1a8, 0x00000776},
++      {0x0000a1ac, 0x00000776},
++      {0x0000a1b0, 0x00000776},
++      {0x0000a1b4, 0x00000776},
++      {0x0000a1b8, 0x00000776},
++      {0x0000a1bc, 0x00000776},
++      {0x0000a1c0, 0x00000776},
++      {0x0000a1c4, 0x00000776},
++      {0x0000a1c8, 0x00000776},
++      {0x0000a1cc, 0x00000776},
++      {0x0000a1d0, 0x00000776},
++      {0x0000a1d4, 0x00000776},
++      {0x0000a1d8, 0x00000776},
++      {0x0000a1dc, 0x00000776},
++      {0x0000a1e0, 0x00000776},
++      {0x0000a1e4, 0x00000776},
++      {0x0000a1e8, 0x00000776},
++      {0x0000a1ec, 0x00000776},
++      {0x0000a1f0, 0x00000776},
++      {0x0000a1f4, 0x00000776},
++      {0x0000a1f8, 0x00000776},
++      {0x0000a1fc, 0x00000776},
++};
++
++static const u32 ar9331_1p1_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},
++};
++
++static const u32 ar9331_modes_high_power_tx_gain_1p1[][5] = {
++      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
++      {0x0000a2d8, 0x7999a83a, 0x7999a83a, 0x7999a83a, 0x7999a83a},
++      {0x0000a2dc, 0xffff2a52, 0xffff2a52, 0xffff2a52, 0xffff2a52},
++      {0x0000a2e0, 0xffffcc84, 0xffffcc84, 0xffffcc84, 0xffffcc84},
++      {0x0000a2e4, 0xfffff000, 0xfffff000, 0xfffff000, 0xfffff000},
++      {0x0000a2e8, 0xfffe0000, 0xfffe0000, 0xfffe0000, 0xfffe0000},
++      {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d0, 0x000050d0},
++      {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, 0x2d000a20, 0x2d000a20},
++      {0x0000a530, 0x48023ec6, 0x48023ec6, 0x31000a22, 0x31000a22},
++      {0x0000a534, 0x4d023f01, 0x4d023f01, 0x35000a24, 0x35000a24},
++      {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000a43, 0x38000a43},
++      {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3b000e42, 0x3b000e42},
++      {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x3f000e44, 0x3f000e44},
++      {0x0000a544, 0x6502feca, 0x6502feca, 0x42000e64, 0x42000e64},
++      {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46000e66, 0x46000e66},
++      {0x0000a54c, 0x7203feca, 0x7203feca, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a560, 0x900fff0b, 0x900fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a564, 0x960fffcb, 0x960fffcb, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x4a000ea6, 0x4a000ea6},
++      {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, 0x01404501, 0x01404501, 0x01404501, 0x01404501},
++      {0x0000a61c, 0x02008802, 0x02008802, 0x02008802, 0x02008802},
++      {0x0000a620, 0x0280c802, 0x0280c802, 0x0280c802, 0x0280c802},
++      {0x0000a624, 0x03010a03, 0x03010a03, 0x03010a03, 0x03010a03},
++      {0x0000a628, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a62c, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a630, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a634, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a638, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x0000a63c, 0x03010c04, 0x03010c04, 0x03010c04, 0x03010c04},
++      {0x00016044, 0x034922db, 0x034922db, 0x034922db, 0x034922db},
++      {0x00016284, 0x14d3f000, 0x14d3f000, 0x14d3f000, 0x14d3f000},
++};
++
++static const u32 ar9331_1p1_mac_postamble_emulation[][5] = {
++      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
++      {0x00008014, 0x10f810f8, 0x10f810f8, 0x10f810f8, 0x10f810f8},
++      {0x0000801c, 0x0e8d8017, 0x0e8d8017, 0x0e8d8017, 0x0e8d8017},
++};
++
++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},
++};
++
++static const u32 ar9331_1p1_soc_preamble[][2] = {
++      /* Addr      allmodes  */
++      {0x00007020, 0x00000000},
++      {0x00007034, 0x00000002},
++      {0x00007038, 0x000002f8},
++};
++
++static const u32 ar9331_1p1_xtal_40M[][2] = {
++      /* Addr      allmodes  */
++      {0x00007038, 0x000004c2},
++      {0x00008244, 0x0010f400},
++      {0x0000824c, 0x0001e800},
++      {0x0001609c, 0x0b283f31},
++};
++
++static const u32 ar9331_1p1_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},
++};
++
++static const u32 ar9331_common_rx_gain_1p1[][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},
++};
++
++static const u32 ar9331_common_tx_gain_offset1_1[][1] = {
++      {0},
++      {3},
++      {0},
++      {0},
++};
++
++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 */
+diff --git a/drivers/net/wireless/ath/ath9k/ar9330_1p2_initvals.h b/drivers/net/wireless/ath/ath9k/ar9330_1p2_initvals.h
+new file mode 100644
+index 0000000..968ccc2
+--- /dev/null
++++ b/drivers/net/wireless/ath/ath9k/ar9330_1p2_initvals.h
+@@ -0,0 +1,1236 @@
++/*
++ * Copyright (c) 2011 Atheros Communications 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_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  */
++      {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_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, 0x037216a4, 0x037216a4},
++      {0x00009e04, 0x00182020, 0x00182020, 0x00182020, 0x00182020},
++      {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
++      {0x00009e10, 0x7ec80d2e, 0x7ec80d2e, 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, 0x00003221, 0x00003221},
++      {0x00009e3c, 0xcf946222, 0xcf946222, 0xcf946222, 0xcf946222},
++      {0x00009e44, 0x02321e27, 0x02321e27, 0x02282324, 0x02282324},
++      {0x00009e48, 0x5030201a, 0x5030201a, 0x50302010, 0x50302010},
++      {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
++      {0x0000a204, 0x00003fc0, 0x00003fc4, 0x00003fc4, 0x00003fc0},
++      {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
++      {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b},
++      {0x0000a234, 0x00000fff, 0x00000fff, 0x10000fff, 0x00000fff},
++      {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, 0x00000000, 0x00000000},
++      {0x0000a288, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
++      {0x0000a28c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
++      {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
++      {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071981},
++      {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
++      {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
++      {0x0000ae04, 0x00802020, 0x00802020, 0x00802020, 0x00802020},
++      {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},
++      {0x00016004, 0x6db6db40},
++      {0x00016008, 0x73800000},
++      {0x0001600c, 0x00000000},
++      {0x00016040, 0x7f80fff8},
++      {0x00016044, 0x03d6d2db},
++      {0x00016048, 0x6c924268},
++      {0x0001604c, 0x000f0278},
++      {0x00016050, 0x4db6db8c},
++      {0x00016054, 0x6db60000},
++      {0x00016080, 0x00080000},
++      {0x00016084, 0x0e48048c},
++      {0x00016088, 0x14214514},
++      {0x0001608c, 0x119f081c},
++      {0x00016090, 0x24926490},
++      {0x00016098, 0xd411eb84},
++      {0x000160a0, 0xc2108ffe},
++      {0x000160a4, 0x812fc370},
++      {0x000160a8, 0x423c8000},
++      {0x000160ac, 0x24651800},
++      {0x000160b0, 0x03284f3e},
++      {0x000160b4, 0x92480040},
++      {0x000160c0, 0x006db6db},
++      {0x000160c4, 0x0186db60},
++      {0x000160c8, 0x6db6db6c},
++      {0x000160cc, 0x6de6c300},
++      {0x000160d0, 0x14500820},
++      {0x00016100, 0x04cb0001},
++      {0x00016104, 0xfff80015},
++      {0x00016108, 0x00080010},
++      {0x0001610c, 0x00170000},
++      {0x00016140, 0x10804000},
++      {0x00016144, 0x01884080},
++      {0x00016148, 0x000080c0},
++      {0x00016280, 0x01000015},
++      {0x00016284, 0x14d20000},
++      {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},
++};
++
++static const u32 ar9331_1p2_baseband_postamble_emulation[][5] = {
++      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
++      {0x00009e3c, 0xcf946221, 0xcf946221, 0xcf946221, 0xcf946221},
++      {0x00009e44, 0x005c0000, 0x005c0000, 0x005c0000, 0x005c0000},
++      {0x0000a2d8, 0x7999a800, 0x7999a800, 0x7999a80c, 0x7999a80c},
++};
++
++static const u32 ar9331_1p2_mac_core_emulation[][2] = {
++      /* Addr      allmodes  */
++      {0x0000805c, 0xffffc7ff},
++      {0x00008344, 0xaa4a105b},
++};
++
++static const u32 ar9331_1p2_soc_postamble[][5] = {
++      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
++      {0x00007010, 0x00000022, 0x00000022, 0x00000022, 0x00000022},
++};
++
++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},
++};
++
++static const u32 ar9331_1p2_emulation_baseband_core[][2] = {
++      /* Addr      allmodes  */
++      {0x0000a344, 0x00000010},
++};
++
++static const u32 ar9331_common_rx_gain_1p2_emulation[][2] = {
++      /* Addr      allmodes  */
++      {0x0000a000, 0x02000101},
++      {0x0000a004, 0x02000102},
++      {0x0000a008, 0x02000103},
++      {0x0000a00c, 0x02000104},
++      {0x0000a010, 0x02000200},
++      {0x0000a014, 0x02000201},
++      {0x0000a018, 0x02000202},
++      {0x0000a01c, 0x02000203},
++      {0x0000a020, 0x02000204},
++      {0x0000a024, 0x02000205},
++      {0x0000a028, 0x02000208},
++      {0x0000a02c, 0x02000302},
++      {0x0000a030, 0x02000303},
++      {0x0000a034, 0x02000304},
++      {0x0000a038, 0x02000400},
++      {0x0000a03c, 0x02010300},
++      {0x0000a040, 0x02010301},
++      {0x0000a044, 0x02010302},
++      {0x0000a048, 0x02000500},
++      {0x0000a04c, 0x02010400},
++      {0x0000a050, 0x02020300},
++      {0x0000a054, 0x02020301},
++      {0x0000a058, 0x02020302},
++      {0x0000a05c, 0x02020303},
++      {0x0000a060, 0x02020400},
++      {0x0000a064, 0x02030300},
++      {0x0000a068, 0x02030301},
++      {0x0000a06c, 0x02030302},
++      {0x0000a070, 0x02030303},
++      {0x0000a074, 0x02030400},
++      {0x0000a078, 0x02040300},
++      {0x0000a07c, 0x02040301},
++      {0x0000a080, 0x02040302},
++      {0x0000a084, 0x02040303},
++      {0x0000a088, 0x02030500},
++      {0x0000a08c, 0x02040400},
++      {0x0000a090, 0x02050203},
++      {0x0000a094, 0x02050204},
++      {0x0000a098, 0x02050205},
++      {0x0000a09c, 0x02040500},
++      {0x0000a0a0, 0x02050301},
++      {0x0000a0a4, 0x02050302},
++      {0x0000a0a8, 0x02050303},
++      {0x0000a0ac, 0x02050400},
++      {0x0000a0b0, 0x02050401},
++      {0x0000a0b4, 0x02050402},
++      {0x0000a0b8, 0x02050403},
++      {0x0000a0bc, 0x02050500},
++      {0x0000a0c0, 0x02050501},
++      {0x0000a0c4, 0x02050502},
++      {0x0000a0c8, 0x02050503},
++      {0x0000a0cc, 0x02050504},
++      {0x0000a0d0, 0x02050600},
++      {0x0000a0d4, 0x02050601},
++      {0x0000a0d8, 0x02050602},
++      {0x0000a0dc, 0x02050603},
++      {0x0000a0e0, 0x02050604},
++      {0x0000a0e4, 0x02050700},
++      {0x0000a0e8, 0x02050701},
++      {0x0000a0ec, 0x02050702},
++      {0x0000a0f0, 0x02050703},
++      {0x0000a0f4, 0x02050704},
++      {0x0000a0f8, 0x02050705},
++      {0x0000a0fc, 0x02050708},
++      {0x0000a100, 0x02050709},
++      {0x0000a104, 0x0205070a},
++      {0x0000a108, 0x0205070b},
++      {0x0000a10c, 0x0205070c},
++      {0x0000a110, 0x0205070d},
++      {0x0000a114, 0x02050710},
++      {0x0000a118, 0x02050711},
++      {0x0000a11c, 0x02050712},
++      {0x0000a120, 0x02050713},
++      {0x0000a124, 0x02050714},
++      {0x0000a128, 0x02050715},
++      {0x0000a12c, 0x02050730},
++      {0x0000a130, 0x02050731},
++      {0x0000a134, 0x02050732},
++      {0x0000a138, 0x02050733},
++      {0x0000a13c, 0x02050734},
++      {0x0000a140, 0x02050735},
++      {0x0000a144, 0x02050750},
++      {0x0000a148, 0x02050751},
++      {0x0000a14c, 0x02050752},
++      {0x0000a150, 0x02050753},
++      {0x0000a154, 0x02050754},
++      {0x0000a158, 0x02050755},
++      {0x0000a15c, 0x02050770},
++      {0x0000a160, 0x02050771},
++      {0x0000a164, 0x02050772},
++      {0x0000a168, 0x02050773},
++      {0x0000a16c, 0x02050774},
++      {0x0000a170, 0x02050775},
++      {0x0000a174, 0x00000776},
++      {0x0000a178, 0x00000776},
++      {0x0000a17c, 0x00000776},
++      {0x0000a180, 0x00000776},
++      {0x0000a184, 0x00000776},
++      {0x0000a188, 0x00000776},
++      {0x0000a18c, 0x00000776},
++      {0x0000a190, 0x00000776},
++      {0x0000a194, 0x00000776},
++      {0x0000a198, 0x00000776},
++      {0x0000a19c, 0x00000776},
++      {0x0000a1a0, 0x00000776},
++      {0x0000a1a4, 0x00000776},
++      {0x0000a1a8, 0x00000776},
++      {0x0000a1ac, 0x00000776},
++      {0x0000a1b0, 0x00000776},
++      {0x0000a1b4, 0x00000776},
++      {0x0000a1b8, 0x00000776},
++      {0x0000a1bc, 0x00000776},
++      {0x0000a1c0, 0x00000776},
++      {0x0000a1c4, 0x00000776},
++      {0x0000a1c8, 0x00000776},
++      {0x0000a1cc, 0x00000776},
++      {0x0000a1d0, 0x00000776},
++      {0x0000a1d4, 0x00000776},
++      {0x0000a1d8, 0x00000776},
++      {0x0000a1dc, 0x00000776},
++      {0x0000a1e0, 0x00000776},
++      {0x0000a1e4, 0x00000776},
++      {0x0000a1e8, 0x00000776},
++      {0x0000a1ec, 0x00000776},
++      {0x0000a1f0, 0x00000776},
++      {0x0000a1f4, 0x00000776},
++      {0x0000a1f8, 0x00000776},
++      {0x0000a1fc, 0x00000776},
++};
++
++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},
++};
++
++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},
++};
++
++static const u32 ar9331_1p2_mac_postamble_emulation[][5] = {
++      /*  Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20  */
++      {0x00008014, 0x10f810f8, 0x10f810f8, 0x10f810f8, 0x10f810f8},
++      {0x0000801c, 0x0e8d8017, 0x0e8d8017, 0x0e8d8017, 0x0e8d8017},
++};
++
++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},
++};
++
++static const u32 ar9331_1p2_soc_preamble[][2] = {
++      /* Addr      allmodes  */
++      {0x00007020, 0x00000000},
++      {0x00007034, 0x00000002},
++      {0x00007038, 0x000002f8},
++};
++
++static const u32 ar9331_1p2_xtal_40M[][2] = {
++      /* Addr      allmodes  */
++      {0x00007038, 0x000004c2},
++      {0x00008244, 0x0010f400},
++      {0x0000824c, 0x0001e800},
++      {0x0001609c, 0x0b283f31},
++};
++
++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},
++};
++
++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},
++};
++
++#endif /* INITVALS_9330_1P2_H */
diff --git a/package/mac80211/patches/545-ath9k-initialize-mode-registers-for-AR9330.patch b/package/mac80211/patches/545-ath9k-initialize-mode-registers-for-AR9330.patch
new file mode 100644 (file)
index 0000000..f102389
--- /dev/null
@@ -0,0 +1,142 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
+index 392bf0f..dc0ad4a 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
+@@ -19,6 +19,8 @@
+ #include "ar9003_2p2_initvals.h"
+ #include "ar9485_initvals.h"
+ #include "ar9340_initvals.h"
++#include "ar9330_1p1_initvals.h"
++#include "ar9330_1p2_initvals.h"
+ /* General hardware code for the AR9003 hadware family */
+@@ -29,7 +31,113 @@
+  */
+ static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
+ {
+-      if (AR_SREV_9340(ah)) {
++      if (AR_SREV_9330_11(ah)) {
++              /* mac */
++              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
++              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
++                              ar9331_1p1_mac_core,
++                              ARRAY_SIZE(ar9331_1p1_mac_core), 2);
++              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
++                              ar9331_1p1_mac_postamble,
++                              ARRAY_SIZE(ar9331_1p1_mac_postamble), 5);
++
++              /* bb */
++              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
++              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
++                              ar9331_1p1_baseband_core,
++                              ARRAY_SIZE(ar9331_1p1_baseband_core), 2);
++              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
++                              ar9331_1p1_baseband_postamble,
++                              ARRAY_SIZE(ar9331_1p1_baseband_postamble), 5);
++
++              /* radio */
++              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
++              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
++                              ar9331_1p1_radio_core,
++                              ARRAY_SIZE(ar9331_1p1_radio_core), 2);
++              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], NULL, 0, 0);
++
++              /* soc */
++              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
++                              ar9331_1p1_soc_preamble,
++                              ARRAY_SIZE(ar9331_1p1_soc_preamble), 2);
++              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
++              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
++                              ar9331_1p1_soc_postamble,
++                              ARRAY_SIZE(ar9331_1p1_soc_postamble), 2);
++
++              /* rx/tx gain */
++              INIT_INI_ARRAY(&ah->iniModesRxGain,
++                              ar9331_common_rx_gain_1p1,
++                              ARRAY_SIZE(ar9331_common_rx_gain_1p1), 2);
++              INIT_INI_ARRAY(&ah->iniModesTxGain,
++                      ar9331_modes_lowest_ob_db_tx_gain_1p1,
++                      ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p1),
++                      5);
++
++              /* additional clock settings */
++              if (ah->is_clk_25mhz)
++                      INIT_INI_ARRAY(&ah->iniModesAdditional,
++                                      ar9331_1p1_xtal_25M,
++                                      ARRAY_SIZE(ar9331_1p1_xtal_25M), 2);
++              else
++                      INIT_INI_ARRAY(&ah->iniModesAdditional,
++                                      ar9331_1p1_xtal_40M,
++                                      ARRAY_SIZE(ar9331_1p1_xtal_40M), 2);
++      } else if (AR_SREV_9330_12(ah)) {
++              /* mac */
++              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
++              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
++                              ar9331_1p2_mac_core,
++                              ARRAY_SIZE(ar9331_1p2_mac_core), 2);
++              INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
++                              ar9331_1p2_mac_postamble,
++                              ARRAY_SIZE(ar9331_1p2_mac_postamble), 5);
++
++              /* bb */
++              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
++              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
++                              ar9331_1p2_baseband_core,
++                              ARRAY_SIZE(ar9331_1p2_baseband_core), 2);
++              INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
++                              ar9331_1p2_baseband_postamble,
++                              ARRAY_SIZE(ar9331_1p2_baseband_postamble), 5);
++
++              /* radio */
++              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
++              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
++                              ar9331_1p2_radio_core,
++                              ARRAY_SIZE(ar9331_1p2_radio_core), 2);
++              INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], NULL, 0, 0);
++
++              /* soc */
++              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
++                              ar9331_1p2_soc_preamble,
++                              ARRAY_SIZE(ar9331_1p2_soc_preamble), 2);
++              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
++              INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
++                              ar9331_1p2_soc_postamble,
++                              ARRAY_SIZE(ar9331_1p2_soc_postamble), 2);
++
++              /* rx/tx gain */
++              INIT_INI_ARRAY(&ah->iniModesRxGain,
++                              ar9331_common_rx_gain_1p2,
++                              ARRAY_SIZE(ar9331_common_rx_gain_1p2), 2);
++              INIT_INI_ARRAY(&ah->iniModesTxGain,
++                      ar9331_modes_lowest_ob_db_tx_gain_1p2,
++                      ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p2),
++                      5);
++
++              /* additional clock settings */
++              if (ah->is_clk_25mhz)
++                      INIT_INI_ARRAY(&ah->iniModesAdditional,
++                                      ar9331_1p2_xtal_25M,
++                                      ARRAY_SIZE(ar9331_1p2_xtal_25M), 2);
++              else
++                      INIT_INI_ARRAY(&ah->iniModesAdditional,
++                                      ar9331_1p2_xtal_40M,
++                                      ARRAY_SIZE(ar9331_1p2_xtal_40M), 2);
++      } else if (AR_SREV_9340(ah)) {
+               /* mac */
+               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
+               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+index 892c48b..48893f1 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+@@ -659,6 +659,9 @@ static int ar9003_hw_process_ini(struct ath_hw *ah,
+               REG_WRITE_ARRAY(&ah->iniModesAdditional,
+                               modesIndex, regWrites);
++      if (AR_SREV_9300(ah))
++              REG_WRITE_ARRAY(&ah->iniModesAdditional, 1, regWrites);
++
+       if (AR_SREV_9340(ah) && !ah->is_clk_25mhz)
+               REG_WRITE_ARRAY(&ah->iniModesAdditional_40M, 1, regWrites);
diff --git a/package/mac80211/patches/546-ath9k-initialize-tx-gain-table-for-AR9330.patch b/package/mac80211/patches/546-ath9k-initialize-tx-gain-table-for-AR9330.patch
new file mode 100644 (file)
index 0000000..e735849
--- /dev/null
@@ -0,0 +1,81 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
+index dc0ad4a..264a7ea 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
+@@ -328,7 +328,17 @@ static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
+       switch (ar9003_hw_get_tx_gain_idx(ah)) {
+       case 0:
+       default:
+-              if (AR_SREV_9340(ah))
++              if (AR_SREV_9330_12(ah))
++                      INIT_INI_ARRAY(&ah->iniModesTxGain,
++                              ar9331_modes_lowest_ob_db_tx_gain_1p2,
++                              ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p2),
++                              5);
++              else if (AR_SREV_9330_11(ah))
++                      INIT_INI_ARRAY(&ah->iniModesTxGain,
++                              ar9331_modes_lowest_ob_db_tx_gain_1p1,
++                              ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p1),
++                              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),
+@@ -345,7 +355,17 @@ static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
+                                      5);
+               break;
+       case 1:
+-              if (AR_SREV_9340(ah))
++              if (AR_SREV_9330_12(ah))
++                      INIT_INI_ARRAY(&ah->iniModesTxGain,
++                              ar9331_modes_high_ob_db_tx_gain_1p2,
++                              ARRAY_SIZE(ar9331_modes_high_ob_db_tx_gain_1p2),
++                              5);
++              else if (AR_SREV_9330_11(ah))
++                      INIT_INI_ARRAY(&ah->iniModesTxGain,
++                              ar9331_modes_high_ob_db_tx_gain_1p1,
++                              ARRAY_SIZE(ar9331_modes_high_ob_db_tx_gain_1p1),
++                              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),
+@@ -362,7 +382,17 @@ static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
+                                      5);
+               break;
+       case 2:
+-              if (AR_SREV_9340(ah))
++              if (AR_SREV_9330_12(ah))
++                      INIT_INI_ARRAY(&ah->iniModesTxGain,
++                              ar9331_modes_low_ob_db_tx_gain_1p2,
++                              ARRAY_SIZE(ar9331_modes_low_ob_db_tx_gain_1p2),
++                              5);
++              else if (AR_SREV_9330_11(ah))
++                      INIT_INI_ARRAY(&ah->iniModesTxGain,
++                              ar9331_modes_low_ob_db_tx_gain_1p1,
++                              ARRAY_SIZE(ar9331_modes_low_ob_db_tx_gain_1p1),
++                              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),
+@@ -379,7 +409,17 @@ static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
+                                      5);
+               break;
+       case 3:
+-              if (AR_SREV_9340(ah))
++              if (AR_SREV_9330_12(ah))
++                      INIT_INI_ARRAY(&ah->iniModesTxGain,
++                              ar9331_modes_high_power_tx_gain_1p2,
++                              ARRAY_SIZE(ar9331_modes_high_power_tx_gain_1p2),
++                              5);
++              else if (AR_SREV_9330_11(ah))
++                      INIT_INI_ARRAY(&ah->iniModesTxGain,
++                              ar9331_modes_high_power_tx_gain_1p1,
++                              ARRAY_SIZE(ar9331_modes_high_power_tx_gain_1p1),
++                              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),
+
diff --git a/package/mac80211/patches/547-ath9k-initialize-rx-gain-table-for-AR9330.patch b/package/mac80211/patches/547-ath9k-initialize-rx-gain-table-for-AR9330.patch
new file mode 100644 (file)
index 0000000..ff64292
--- /dev/null
@@ -0,0 +1,43 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
+index 264a7ea..8efdec2 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
+@@ -443,7 +443,17 @@ static void ar9003_rx_gain_table_apply(struct ath_hw *ah)
+       switch (ar9003_hw_get_rx_gain_idx(ah)) {
+       case 0:
+       default:
+-              if (AR_SREV_9340(ah))
++              if (AR_SREV_9330_12(ah))
++                      INIT_INI_ARRAY(&ah->iniModesRxGain,
++                                      ar9331_common_rx_gain_1p2,
++                                      ARRAY_SIZE(ar9331_common_rx_gain_1p2),
++                                      2);
++              else if (AR_SREV_9330_11(ah))
++                      INIT_INI_ARRAY(&ah->iniModesRxGain,
++                                      ar9331_common_rx_gain_1p1,
++                                      ARRAY_SIZE(ar9331_common_rx_gain_1p1),
++                                      2);
++              else if (AR_SREV_9340(ah))
+                       INIT_INI_ARRAY(&ah->iniModesRxGain,
+                                      ar9340Common_rx_gain_table_1p0,
+                                      ARRAY_SIZE(ar9340Common_rx_gain_table_1p0),
+@@ -460,7 +470,17 @@ static void ar9003_rx_gain_table_apply(struct ath_hw *ah)
+                                      2);
+               break;
+       case 1:
+-              if (AR_SREV_9340(ah))
++              if (AR_SREV_9330_12(ah))
++                      INIT_INI_ARRAY(&ah->iniModesRxGain,
++                              ar9331_common_wo_xlna_rx_gain_1p2,
++                              ARRAY_SIZE(ar9331_common_wo_xlna_rx_gain_1p2),
++                              2);
++              else if (AR_SREV_9330_11(ah))
++                      INIT_INI_ARRAY(&ah->iniModesRxGain,
++                              ar9331_common_wo_xlna_rx_gain_1p1,
++                              ARRAY_SIZE(ar9331_common_wo_xlna_rx_gain_1p1),
++                              2);
++              else if (AR_SREV_9340(ah))
+                       INIT_INI_ARRAY(&ah->iniModesRxGain,
+                                      ar9340Common_wo_xlna_rx_gain_table_1p0,
+                                      ARRAY_SIZE(ar9340Common_wo_xlna_rx_gain_table_1p0),
+
diff --git a/package/mac80211/patches/548-ath9k-add-AR9330-specific-PLL-initialization.patch b/package/mac80211/patches/548-ath9k-add-AR9330-specific-PLL-initialization.patch
new file mode 100644 (file)
index 0000000..e6f0895
--- /dev/null
@@ -0,0 +1,54 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index ade8655..826ed5d 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -733,6 +733,39 @@ static void ath9k_hw_init_pll(struct ath_hw *ah,
+               REG_RMW_FIELD(ah, AR_CH0_BB_DPLL2,
+                             AR_CH0_BB_DPLL2_PLL_PWD, 0x0);
+               udelay(1000);
++      } else if (AR_SREV_9330(ah)) {
++              u32 ddr_dpll2, pll_control2, kd;
++
++              if (ah->is_clk_25mhz) {
++                      ddr_dpll2 = 0x18e82f01;
++                      pll_control2 = 0xe04a3d;
++                      kd = 0x1d;
++              } else {
++                      ddr_dpll2 = 0x19e82f01;
++                      pll_control2 = 0x886666;
++                      kd = 0x3d;
++              }
++
++              /* program DDR PLL ki and kd value */
++              REG_WRITE(ah, AR_CH0_DDR_DPLL2, ddr_dpll2);
++
++              /* program DDR PLL phase_shift */
++              REG_RMW_FIELD(ah, AR_CH0_DDR_DPLL3,
++                            AR_CH0_DPLL3_PHASE_SHIFT, 0x1);
++
++              REG_WRITE(ah, AR_RTC_PLL_CONTROL, 0x1142c);
++              udelay(1000);
++
++              /* program refdiv, nint, frac to RTC register */
++              REG_WRITE(ah, AR_RTC_PLL_CONTROL2, pll_control2);
++
++              /* program BB PLL kd and ki value */
++              REG_RMW_FIELD(ah, AR_CH0_BB_DPLL2, AR_CH0_DPLL2_KD, kd);
++              REG_RMW_FIELD(ah, AR_CH0_BB_DPLL2, AR_CH0_DPLL2_KI, 0x06);
++
++              /* 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)) {
+               u32 regval, pll2_divint, pll2_divfrac, refdiv;
+@@ -774,7 +807,7 @@ static void ath9k_hw_init_pll(struct ath_hw *ah,
+       REG_WRITE(ah, AR_RTC_PLL_CONTROL, pll);
+-      if (AR_SREV_9485(ah) || AR_SREV_9340(ah))
++      if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah))
+               udelay(1000);
+       /* Switch the core clock for ar9271 to 117Mhz */
+
diff --git a/package/mac80211/patches/549-ath9k-use-different-BB-watchdog-timeout-value-for-AR.patch b/package/mac80211/patches/549-ath9k-use-different-BB-watchdog-timeout-value-for-AR.patch
new file mode 100644 (file)
index 0000000..4901e93
--- /dev/null
@@ -0,0 +1,17 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index 826ed5d..f53a3bf 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -615,7 +615,10 @@ static int __ath9k_hw_init(struct ath_hw *ah)
+       else
+               ah->tx_trig_level = (AR_FTRIG_512B >> AR_FTRIG_S);
+-      ah->bb_watchdog_timeout_ms = 25;
++      if (AR_SREV_9330(ah))
++              ah->bb_watchdog_timeout_ms = 85;
++      else
++              ah->bb_watchdog_timeout_ms = 25;
+       common->state = ATH_HW_INITIALIZED;
+
diff --git a/package/mac80211/patches/550-ath9k-don-t-enable-LDPC-for-AR9330.patch b/package/mac80211/patches/550-ath9k-don-t-enable-LDPC-for-AR9330.patch
new file mode 100644 (file)
index 0000000..5a72b9d
--- /dev/null
@@ -0,0 +1,14 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index f53a3bf..6315e7d 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -2030,7 +2030,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah)
+       if (AR_SREV_9300_20_OR_LATER(ah)) {
+               pCap->hw_caps |= ATH9K_HW_CAP_EDMA | ATH9K_HW_CAP_FASTCLOCK;
+-              if (!AR_SREV_9485(ah))
++              if (!AR_SREV_9330(ah) && !AR_SREV_9485(ah))
+                       pCap->hw_caps |= ATH9K_HW_CAP_LDPC;
+               pCap->rx_hp_qdepth = ATH9K_HW_RX_HP_QDEPTH;
+
diff --git a/package/mac80211/patches/551-ath9k-read-spur-frequency-information-from-eeprom-fo.patch b/package/mac80211/patches/551-ath9k-read-spur-frequency-information-from-eeprom-fo.patch
new file mode 100644 (file)
index 0000000..dadb358
--- /dev/null
@@ -0,0 +1,23 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+index 48893f1..2df72cb 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+@@ -168,7 +168,7 @@ static void ar9003_hw_spur_mitigate_mrc_cck(struct ath_hw *ah,
+        * is out-of-band and can be ignored.
+        */
+-      if (AR_SREV_9485(ah) || AR_SREV_9340(ah)) {
++      if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah)) {
+               spur_fbin_ptr = ar9003_get_spur_chan_ptr(ah,
+                                                        IS_CHAN_2GHZ(chan));
+               if (spur_fbin_ptr[0] == 0) /* No spur */
+@@ -193,7 +193,7 @@ static void ar9003_hw_spur_mitigate_mrc_cck(struct ath_hw *ah,
+       for (i = 0; i < max_spur_cnts; i++) {
+               negative = 0;
+-              if (AR_SREV_9485(ah) || AR_SREV_9340(ah))
++              if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah))
+                       cur_bb_spur = FBIN2FREQ(spur_fbin_ptr[i],
+                                       IS_CHAN_2GHZ(chan)) - synth_freq;
+               else
+
diff --git a/package/mac80211/patches/552-ath9k-fix-channel-frequency-calculation-for-AR9340.patch b/package/mac80211/patches/552-ath9k-fix-channel-frequency-calculation-for-AR9340.patch
new file mode 100644 (file)
index 0000000..d67a661
--- /dev/null
@@ -0,0 +1,14 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+index 2df72cb..1194eeb 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+@@ -104,7 +104,7 @@ static int ar9003_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
+                       u32 chan_frac;
+                       channelSel = (freq * 2) / 75;
+-                      chan_frac = ((freq % 75) * 0x20000) / 75;
++                      chan_frac = (((freq * 2) % 75) * 0x20000) / 75;
+                       channelSel = (channelSel << 17) | chan_frac;
+               } else {
+                       channelSel = CHANSEL_5G(freq);
+
diff --git a/package/mac80211/patches/553-ath9k-configure-RF-channel-frequency-for-AR9330.patch b/package/mac80211/patches/553-ath9k-configure-RF-channel-frequency-for-AR9330.patch
new file mode 100644 (file)
index 0000000..03123ac
--- /dev/null
@@ -0,0 +1,25 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+index 1194eeb..a0ca1eb 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+@@ -75,7 +75,19 @@ static int ar9003_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
+       freq = centers.synth_center;
+       if (freq < 4800) {     /* 2 GHz, fractional mode */
+-              if (AR_SREV_9485(ah)) {
++              if (AR_SREV_9330(ah)) {
++                      u32 chan_frac;
++                      u32 div;
++
++                      if (ah->is_clk_25mhz)
++                              div = 75;
++                      else
++                              div = 120;
++
++                      channelSel = (freq * 4) / div;
++                      chan_frac = (((freq * 4) % div) * 0x20000) / div;
++                      channelSel = (channelSel << 17) | chan_frac;
++              } else if (AR_SREV_9485(ah)) {
+                       u32 chan_frac;
+                       /*
diff --git a/package/mac80211/patches/554-ath9k-enable-TX-RX-data-byte-swap-for-AR9330.patch b/package/mac80211/patches/554-ath9k-enable-TX-RX-data-byte-swap-for-AR9330.patch
new file mode 100644 (file)
index 0000000..6730408
--- /dev/null
@@ -0,0 +1,14 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index 6315e7d..a35af90 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -1592,7 +1592,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
+                               REG_WRITE(ah, AR_CFG, AR_CFG_SWTD | AR_CFG_SWRD);
+               }
+ #ifdef __BIG_ENDIAN
+-              else if (AR_SREV_9340(ah))
++              else if (AR_SREV_9330(ah) || AR_SREV_9340(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/555-ath9k-skip-internal-regulator-configuration-for-AR93.patch b/package/mac80211/patches/555-ath9k-skip-internal-regulator-configuration-for-AR93.patch
new file mode 100644 (file)
index 0000000..1a95410
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+index 729534c..6021186 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+@@ -3795,7 +3795,7 @@ static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah,
+       ar9003_hw_ant_ctrl_apply(ah, IS_CHAN_2GHZ(chan));
+       ar9003_hw_drive_strength_apply(ah);
+       ar9003_hw_atten_apply(ah, chan);
+-      if (!AR_SREV_9340(ah))
++      if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah))
+               ar9003_hw_internal_regulator_apply(ah);
+       if (AR_SREV_9485(ah) || AR_SREV_9340(ah))
+               ar9003_hw_apply_tuning_caps(ah);
diff --git a/package/mac80211/patches/556-ath9k-enable-tuning-capacitance-configuration-for-AR.patch b/package/mac80211/patches/556-ath9k-enable-tuning-capacitance-configuration-for-AR.patch
new file mode 100644 (file)
index 0000000..05f81c8
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+index 6021186..dd09cae 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+@@ -3797,7 +3797,7 @@ static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah,
+       ar9003_hw_atten_apply(ah, chan);
+       if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah))
+               ar9003_hw_internal_regulator_apply(ah);
+-      if (AR_SREV_9485(ah) || AR_SREV_9340(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/557-ath9k-use-correct-EEPROM-base-for-AR9330.patch b/package/mac80211/patches/557-ath9k-use-correct-EEPROM-base-for-AR9330.patch
new file mode 100644 (file)
index 0000000..aba79dc
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+index dd09cae..d7741d2 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+@@ -3324,6 +3324,8 @@ static int ar9300_eeprom_restore_internal(struct ath_hw *ah,
+       read = ar9300_read_eeprom;
+       if (AR_SREV_9485(ah))
+               cptr = AR9300_BASE_ADDR_4K;
++      else if (AR_SREV_9330(ah))
++              cptr = AR9300_BASE_ADDR_512;
+       else
+               cptr = AR9300_BASE_ADDR;
+       ath_dbg(common, ATH_DBG_EEPROM,
diff --git a/package/mac80211/patches/558-ath9k-configure-xpa-bias-level-for-AR9330.patch b/package/mac80211/patches/558-ath9k-configure-xpa-bias-level-for-AR9330.patch
new file mode 100644 (file)
index 0000000..4f8d841
--- /dev/null
@@ -0,0 +1,14 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+index d7741d2..b3351f6 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+@@ -3444,7 +3444,7 @@ static void ar9003_hw_xpa_bias_level_apply(struct ath_hw *ah, bool is2ghz)
+ {
+       int bias = ar9003_hw_xpa_bias_level_get(ah, is2ghz);
+-      if (AR_SREV_9485(ah) || AR_SREV_9340(ah))
++      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 {
+               REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
+
diff --git a/package/mac80211/patches/559-ath9k-set-NF-limits-for-AR9330.patch b/package/mac80211/patches/559-ath9k-set-NF-limits-for-AR9330.patch
new file mode 100644 (file)
index 0000000..1128339
--- /dev/null
@@ -0,0 +1,30 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+index a0ca1eb..eb18b63 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+@@ -1089,7 +1089,10 @@ static void ar9003_hw_set_nf_limits(struct ath_hw *ah)
+ {
+       ah->nf_2g.max = AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ;
+       ah->nf_2g.min = AR_PHY_CCA_MIN_GOOD_VAL_9300_2GHZ;
+-      ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9300_2GHZ;
++      if (AR_SREV_9330(ah))
++              ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9330_2GHZ;
++      else
++              ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9300_2GHZ;
+       ah->nf_5g.max = AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ;
+       ah->nf_5g.min = AR_PHY_CCA_MIN_GOOD_VAL_9300_5GHZ;
+       ah->nf_5g.nominal = AR_PHY_CCA_NOM_VAL_9300_5GHZ;
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.h b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
+index 443090d..d259278 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
+@@ -332,6 +332,8 @@
+ #define AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ     -95
+ #define AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ     -100
++#define AR_PHY_CCA_NOM_VAL_9330_2GHZ          -118
++
+ /*
+  * AGC Field Definitions
+  */
+
diff --git a/package/mac80211/patches/560-ath9k-enable-antenna-diversity-for-AR9330.patch b/package/mac80211/patches/560-ath9k-enable-antenna-diversity-for-AR9330.patch
new file mode 100644 (file)
index 0000000..ee3e720
--- /dev/null
@@ -0,0 +1,14 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index a35af90..323b6ab 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -2072,7 +2072,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah)
+       }
+-      if (AR_SREV_9485(ah)) {
++      if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
+               ant_div_ctl1 = ah->eep_ops->get_eeprom(ah, EEP_ANT_DIV_CTL1);
+               /*
+                * enable the diversity-combining algorithm only when
+
diff --git a/package/mac80211/patches/561-ath9k-use-correct-max_streams-for-AR9330.patch b/package/mac80211/patches/561-ath9k-use-correct-max_streams-for-AR9330.patch
new file mode 100644 (file)
index 0000000..921a97d
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
+index c2defa2..5ffabb9 100644
+--- a/drivers/net/wireless/ath/ath9k/init.c
++++ b/drivers/net/wireless/ath/ath9k/init.c
+@@ -245,7 +245,7 @@ static void setup_ht_cap(struct ath_softc *sc,
+       ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
+       ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
+-      if (AR_SREV_9485(ah))
++      if (AR_SREV_9330(ah) || AR_SREV_9485(ah))
+               max_streams = 1;
+       else if (AR_SREV_9300_20_OR_LATER(ah))
+               max_streams = 3;
diff --git a/package/mac80211/patches/562-ath9k-add-a-missing-case-statement-to-ath_ant_div_co.patch b/package/mac80211/patches/562-ath9k-add-a-missing-case-statement-to-ath_ant_div_co.patch
new file mode 100644 (file)
index 0000000..92d4a77
--- /dev/null
@@ -0,0 +1,12 @@
+diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
+index 07e35e5..d0af2f2 100644
+--- a/drivers/net/wireless/ath/ath9k/recv.c
++++ b/drivers/net/wireless/ath/ath9k/recv.c
+@@ -39,6 +39,7 @@ static inline bool ath_ant_div_comb_alt_check(u8 div_group, int alt_ratio,
+                       result = true;
+               break;
+       case 1:
++      case 2:
+               if ((((curr_main_set == ATH_ANT_DIV_COMB_LNA2) &&
+                       (curr_alt_set == ATH_ANT_DIV_COMB_LNA1) &&
+                               (alt_rssi_avg >= (main_rssi_avg - 5))) ||
diff --git a/package/mac80211/patches/563-ath9k-fix-antenna-diversity-configuration-for-non-AR.patch b/package/mac80211/patches/563-ath9k-fix-antenna-diversity-configuration-for-non-AR.patch
new file mode 100644 (file)
index 0000000..fbd6e3c
--- /dev/null
@@ -0,0 +1,21 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+index eb18b63..b9f0b27 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+@@ -1214,8 +1214,14 @@ static void ar9003_hw_antdiv_comb_conf_get(struct ath_hw *ah,
+                                AR_PHY_9485_ANT_DIV_ALT_LNACONF_S;
+       antconf->fast_div_bias = (regval & AR_PHY_9485_ANT_FAST_DIV_BIAS) >>
+                                 AR_PHY_9485_ANT_FAST_DIV_BIAS_S;
+-      antconf->lna1_lna2_delta = -9;
+-      antconf->div_group = 2;
++
++      if (AR_SREV_9485(ah)) {
++              antconf->lna1_lna2_delta = -9;
++              antconf->div_group = 2;
++      } else {
++              antconf->lna1_lna2_delta = -3;
++              antconf->div_group = 0;
++      }
+ }
+ static void ar9003_hw_antdiv_comb_conf_set(struct ath_hw *ah,
diff --git a/package/mac80211/patches/564-ath9k-remove-superfluous-parentheses.patch b/package/mac80211/patches/564-ath9k-remove-superfluous-parentheses.patch
new file mode 100644 (file)
index 0000000..a40bc1e
--- /dev/null
@@ -0,0 +1,201 @@
+diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
+index d0af2f2..99f55b3 100644
+--- a/drivers/net/wireless/ath/ath9k/recv.c
++++ b/drivers/net/wireless/ath/ath9k/recv.c
+@@ -1076,39 +1076,39 @@ static void ath_lnaconf_alt_good_scan(struct ath_ant_comb *antcomb,
+               antcomb->rssi_lna1 = main_rssi_avg;
+       switch ((ant_conf.main_lna_conf << 4) | ant_conf.alt_lna_conf) {
+-      case (0x10): /* LNA2 A-B */
++      case 0x10: /* LNA2 A-B */
+               antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
+               antcomb->first_quick_scan_conf =
+                       ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
+               antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA1;
+               break;
+-      case (0x20): /* LNA1 A-B */
++      case 0x20: /* LNA1 A-B */
+               antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
+               antcomb->first_quick_scan_conf =
+                       ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
+               antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA2;
+               break;
+-      case (0x21): /* LNA1 LNA2 */
++      case 0x21: /* LNA1 LNA2 */
+               antcomb->main_conf = ATH_ANT_DIV_COMB_LNA2;
+               antcomb->first_quick_scan_conf =
+                       ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
+               antcomb->second_quick_scan_conf =
+                       ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
+               break;
+-      case (0x12): /* LNA2 LNA1 */
++      case 0x12: /* LNA2 LNA1 */
+               antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1;
+               antcomb->first_quick_scan_conf =
+                       ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
+               antcomb->second_quick_scan_conf =
+                       ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
+               break;
+-      case (0x13): /* LNA2 A+B */
++      case 0x13: /* LNA2 A+B */
+               antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
+               antcomb->first_quick_scan_conf =
+                       ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
+               antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA1;
+               break;
+-      case (0x23): /* LNA1 A+B */
++      case 0x23: /* LNA1 A+B */
+               antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
+               antcomb->first_quick_scan_conf =
+                       ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
+@@ -1325,40 +1325,40 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
+               /* Adjust the fast_div_bias based on main and alt lna conf */
+               switch ((ant_conf->main_lna_conf << 4) |
+                               ant_conf->alt_lna_conf) {
+-              case (0x01): /* A-B LNA2 */
++              case 0x01: /* A-B LNA2 */
+                       ant_conf->fast_div_bias = 0x3b;
+                       break;
+-              case (0x02): /* A-B LNA1 */
++              case 0x02: /* A-B LNA1 */
+                       ant_conf->fast_div_bias = 0x3d;
+                       break;
+-              case (0x03): /* A-B A+B */
++              case 0x03: /* A-B A+B */
+                       ant_conf->fast_div_bias = 0x1;
+                       break;
+-              case (0x10): /* LNA2 A-B */
++              case 0x10: /* LNA2 A-B */
+                       ant_conf->fast_div_bias = 0x7;
+                       break;
+-              case (0x12): /* LNA2 LNA1 */
++              case 0x12: /* LNA2 LNA1 */
+                       ant_conf->fast_div_bias = 0x2;
+                       break;
+-              case (0x13): /* LNA2 A+B */
++              case 0x13: /* LNA2 A+B */
+                       ant_conf->fast_div_bias = 0x7;
+                       break;
+-              case (0x20): /* LNA1 A-B */
++              case 0x20: /* LNA1 A-B */
+                       ant_conf->fast_div_bias = 0x6;
+                       break;
+-              case (0x21): /* LNA1 LNA2 */
++              case 0x21: /* LNA1 LNA2 */
+                       ant_conf->fast_div_bias = 0x0;
+                       break;
+-              case (0x23): /* LNA1 A+B */
++              case 0x23: /* LNA1 A+B */
+                       ant_conf->fast_div_bias = 0x6;
+                       break;
+-              case (0x30): /* A+B A-B */
++              case 0x30: /* A+B A-B */
+                       ant_conf->fast_div_bias = 0x1;
+                       break;
+-              case (0x31): /* A+B LNA2 */
++              case 0x31: /* A+B LNA2 */
+                       ant_conf->fast_div_bias = 0x3b;
+                       break;
+-              case (0x32): /* A+B LNA1 */
++              case 0x32: /* A+B LNA1 */
+                       ant_conf->fast_div_bias = 0x3d;
+                       break;
+               default:
+@@ -1368,22 +1368,22 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
+               /* Adjust the fast_div_bias based on main and alt_lna_conf */
+               switch ((ant_conf->main_lna_conf << 4) |
+                               ant_conf->alt_lna_conf) {
+-              case (0x01): /* A-B LNA2 */
++              case 0x01: /* A-B LNA2 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x02): /* A-B LNA1 */
++              case 0x02: /* A-B LNA1 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x03): /* A-B A+B */
++              case 0x03: /* A-B A+B */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x10): /* LNA2 A-B */
++              case 0x10: /* LNA2 A-B */
+                       if (!(antcomb->scan) &&
+                               (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
+                               ant_conf->fast_div_bias = 0x1;
+@@ -1392,12 +1392,12 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x12): /* LNA2 LNA1 */
++              case 0x12: /* LNA2 LNA1 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x13): /* LNA2 A+B */
++              case 0x13: /* LNA2 A+B */
+                       if (!(antcomb->scan) &&
+                               (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
+                               ant_conf->fast_div_bias = 0x1;
+@@ -1406,7 +1406,7 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x20): /* LNA1 A-B */
++              case 0x20: /* LNA1 A-B */
+                       if (!(antcomb->scan) &&
+                               (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
+                               ant_conf->fast_div_bias = 0x1;
+@@ -1415,12 +1415,12 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x21): /* LNA1 LNA2 */
++              case 0x21: /* LNA1 LNA2 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x23): /* LNA1 A+B */
++              case 0x23: /* LNA1 A+B */
+                       if (!(antcomb->scan) &&
+                               (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
+                               ant_conf->fast_div_bias = 0x1;
+@@ -1429,17 +1429,17 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x30): /* A+B A-B */
++              case 0x30: /* A+B A-B */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x31): /* A+B LNA2 */
++              case 0x31: /* A+B LNA2 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+                       break;
+-              case (0x32): /* A+B LNA1 */
++              case 0x32: /* A+B LNA1 */
+                       ant_conf->fast_div_bias = 0x1;
+                       ant_conf->main_gaintb = 0;
+                       ant_conf->alt_gaintb = 0;
+@@ -1447,9 +1447,7 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
+               default:
+                       break;
+               }
+-
+       }
+-
+ }
+ /* Antenna diversity and combining */
+
diff --git a/package/mac80211/patches/565-ath9k-add-fast_div_bias-configuration-for-diversity-.patch b/package/mac80211/patches/565-ath9k-add-fast_div_bias-configuration-for-diversity-.patch
new file mode 100644 (file)
index 0000000..9d17e88
--- /dev/null
@@ -0,0 +1,94 @@
+diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
+index 99f55b3..80bb04f 100644
+--- a/drivers/net/wireless/ath/ath9k/recv.c
++++ b/drivers/net/wireless/ath/ath9k/recv.c
+@@ -1364,6 +1364,89 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf,
+               default:
+                       break;
+               }
++      } else if (ant_conf->div_group == 1) {
++              /* Adjust the fast_div_bias based on main and alt_lna_conf */
++              switch ((ant_conf->main_lna_conf << 4) |
++                      ant_conf->alt_lna_conf) {
++              case 0x01: /* A-B LNA2 */
++                      ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x02: /* A-B LNA1 */
++                      ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x03: /* A-B A+B */
++                      ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x10: /* LNA2 A-B */
++                      if (!(antcomb->scan) &&
++                          (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
++                              ant_conf->fast_div_bias = 0x3f;
++                      else
++                              ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x12: /* LNA2 LNA1 */
++                      ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x13: /* LNA2 A+B */
++                      if (!(antcomb->scan) &&
++                          (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
++                              ant_conf->fast_div_bias = 0x3f;
++                      else
++                              ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x20: /* LNA1 A-B */
++                      if (!(antcomb->scan) &&
++                          (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
++                              ant_conf->fast_div_bias = 0x3f;
++                      else
++                              ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x21: /* LNA1 LNA2 */
++                      ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x23: /* LNA1 A+B */
++                      if (!(antcomb->scan) &&
++                          (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
++                              ant_conf->fast_div_bias = 0x3f;
++                      else
++                              ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x30: /* A+B A-B */
++                      ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x31: /* A+B LNA2 */
++                      ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              case 0x32: /* A+B LNA1 */
++                      ant_conf->fast_div_bias = 0x1;
++                      ant_conf->main_gaintb = 0;
++                      ant_conf->alt_gaintb = 0;
++                      break;
++              default:
++                      break;
++              }
+       } else if (ant_conf->div_group == 2) {
+               /* Adjust the fast_div_bias based on main and alt_lna_conf */
+               switch ((ant_conf->main_lna_conf << 4) |
diff --git a/package/mac80211/patches/566-ath9k-set-diversity-group-for-AR9330.patch b/package/mac80211/patches/566-ath9k-set-diversity-group-for-AR9330.patch
new file mode 100644 (file)
index 0000000..a208848
--- /dev/null
@@ -0,0 +1,17 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+index b9f0b27..d9117bd 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+@@ -1215,7 +1215,10 @@ static void ar9003_hw_antdiv_comb_conf_get(struct ath_hw *ah,
+       antconf->fast_div_bias = (regval & AR_PHY_9485_ANT_FAST_DIV_BIAS) >>
+                                 AR_PHY_9485_ANT_FAST_DIV_BIAS_S;
+-      if (AR_SREV_9485(ah)) {
++      if (AR_SREV_9330_11(ah)) {
++              antconf->lna1_lna2_delta = -9;
++              antconf->div_group = 1;
++      } else if (AR_SREV_9485(ah)) {
+               antconf->lna1_lna2_delta = -9;
+               antconf->div_group = 2;
+       } else {
+
diff --git a/package/mac80211/patches/567-ath9k-fix-few-register-offsets-for-AR9330.patch b/package/mac80211/patches/567-ath9k-fix-few-register-offsets-for-AR9330.patch
new file mode 100644 (file)
index 0000000..791cfec
--- /dev/null
@@ -0,0 +1,18 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.h b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
+index d259278..9eb3aa2 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
+@@ -625,11 +625,11 @@
+ #define AR_PHY_65NM_CH2_RXTX1       0x16900
+ #define AR_PHY_65NM_CH2_RXTX2       0x16904
+-#define AR_CH0_TOP2 (AR_SREV_9485(ah) ? 0x00016284 : 0x0001628c)
++#define AR_CH0_TOP2           (AR_SREV_9300(ah) ? 0x1628c : 0x16284)
+ #define AR_CH0_TOP2_XPABIASLVL                0xf000
+ #define AR_CH0_TOP2_XPABIASLVL_S      12
+-#define AR_CH0_XTAL           (AR_SREV_9485(ah) ? 0x16290 : 0x16294)
++#define AR_CH0_XTAL           (AR_SREV_9300(ah) ? 0x16294 : 0x16290)
+ #define AR_CH0_XTAL_CAPINDAC  0x7f000000
+ #define AR_CH0_XTAL_CAPINDAC_S        24
+ #define AR_CH0_XTAL_CAPOUTDAC 0x00fe0000
diff --git a/package/mac80211/patches/568-ath9k-configure-diversity-based-on-eeprom-contents-f.patch b/package/mac80211/patches/568-ath9k-configure-diversity-based-on-eeprom-contents-f.patch
new file mode 100644 (file)
index 0000000..a99e85c
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+index b3351f6..ffdfa6d 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+@@ -3525,7 +3525,7 @@ static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz)
+               }
+       }
+-      if (AR_SREV_9485(ah)) {
++      if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
+               value = ath9k_hw_ar9300_get_eeprom(ah, EEP_ANT_DIV_CTL1);
+               /*
+                * main_lnaconf, alt_lnaconf, main_tb, alt_tb
diff --git a/package/mac80211/patches/569-ath9k-configure-internal-regulator-for-AR9330.patch b/package/mac80211/patches/569-ath9k-configure-internal-regulator-for-AR9330.patch
new file mode 100644 (file)
index 0000000..8feba2e
--- /dev/null
@@ -0,0 +1,50 @@
+diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+index ffdfa6d..963dc9b 100644
+--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+@@ -3712,7 +3712,7 @@ static void ar9003_hw_internal_regulator_apply(struct ath_hw *ah)
+               ath9k_hw_ar9300_get_eeprom(ah, EEP_INTERNAL_REGULATOR);
+       if (internal_regulator) {
+-              if (AR_SREV_9485(ah)) {
++              if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
+                       int reg_pmu_set;
+                       reg_pmu_set = REG_READ(ah, AR_PHY_PMU2) & ~AR_PHY_PMU2_PGM;
+@@ -3720,9 +3720,24 @@ static void ar9003_hw_internal_regulator_apply(struct ath_hw *ah)
+                       if (!is_pmu_set(ah, AR_PHY_PMU2, reg_pmu_set))
+                               return;
+-                      reg_pmu_set = (5 << 1) | (7 << 4) | (1 << 8) |
+-                                    (2 << 14) | (6 << 17) | (1 << 20) |
+-                                    (3 << 24) | (1 << 28);
++                      if (AR_SREV_9330(ah)) {
++                              if (ah->is_clk_25mhz) {
++                                      reg_pmu_set = (3 << 1) | (8 << 4) |
++                                                    (3 << 8) | (1 << 14) |
++                                                    (6 << 17) | (1 << 20) |
++                                                    (3 << 24);
++                              } else {
++                                      reg_pmu_set = (4 << 1)  | (7 << 4) |
++                                                    (3 << 8)  | (1 << 14) |
++                                                    (6 << 17) | (1 << 20) |
++                                                    (3 << 24);
++                              }
++                      } else {
++                              reg_pmu_set = (5 << 1) | (7 << 4) |
++                                            (1 << 8) | (2 << 14) |
++                                            (6 << 17) | (1 << 20) |
++                                            (3 << 24) | (1 << 28);
++                      }
+                       REG_WRITE(ah, AR_PHY_PMU1, reg_pmu_set);
+                       if (!is_pmu_set(ah, AR_PHY_PMU1, reg_pmu_set))
+@@ -3753,7 +3768,7 @@ static void ar9003_hw_internal_regulator_apply(struct ath_hw *ah)
+                                          AR_RTC_REG_CONTROL1_SWREG_PROGRAM);
+               }
+       } else {
+-              if (AR_SREV_9485(ah)) {
++              if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
+                       REG_RMW_FIELD(ah, AR_PHY_PMU2, AR_PHY_PMU2_PGM, 0);
+                       while (REG_READ_FIELD(ah, AR_PHY_PMU2,
+                                             AR_PHY_PMU2_PGM))
diff --git a/package/mac80211/patches/570-ath9k-add-external_reset-callback-to-ath9k_platfom_d.patch b/package/mac80211/patches/570-ath9k-add-external_reset-callback-to-ath9k_platfom_d.patch
new file mode 100644 (file)
index 0000000..c5beaa0
--- /dev/null
@@ -0,0 +1,82 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index 323b6ab..5d373fc 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -1161,6 +1161,41 @@ static bool ath9k_hw_set_reset(struct ath_hw *ah, int type)
+                       rst_flags |= AR_RTC_RC_MAC_COLD;
+       }
++      if (AR_SREV_9330(ah)) {
++              int npend = 0;
++              int i;
++
++              /* AR9330 WAR:
++               * call external reset function to reset WMAC if:
++               * - doing a cold reset
++               * - we have pending frames in the TX queues
++               */
++
++              for (i = 0; i < AR_NUM_QCU; i++) {
++                      npend = ath9k_hw_numtxpending(ah, i);
++                      if (npend)
++                              break;
++              }
++
++              if (ah->external_reset &&
++                  (npend || type == ATH9K_RESET_COLD)) {
++                      int reset_err = 0;
++
++                      ath_dbg(ath9k_hw_common(ah), ATH_DBG_RESET,
++                              "reset MAC via external reset\n");
++
++                      reset_err = ah->external_reset();
++                      if (reset_err) {
++                              ath_err(ath9k_hw_common(ah),
++                                      "External reset failed, err=%d\n",
++                                      reset_err);
++                              return false;
++                      }
++
++                      REG_WRITE(ah, AR_RTC_RESET, 1);
++              }
++      }
++
+       REG_WRITE(ah, AR_RTC_RC, rst_flags);
+       REGWRITE_BUFFER_FLUSH(ah);
+diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
+index 8d9ac49..f29a806 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.h
++++ b/drivers/net/wireless/ath/ath9k/hw.h
+@@ -864,6 +864,7 @@ struct ath_hw {
+       bool is_clk_25mhz;
+       int (*get_mac_revision)(void);
++      int (*external_reset)(void);
+ };
+ struct ath_bus_ops {
+diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
+index 5ffabb9..f517649 100644
+--- a/drivers/net/wireless/ath/ath9k/init.c
++++ b/drivers/net/wireless/ath/ath9k/init.c
+@@ -576,6 +576,7 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
+               sc->sc_ah->led_pin = pdata->led_pin;
+               ah->is_clk_25mhz = pdata->is_clk_25mhz;
+               ah->get_mac_revision = pdata->get_mac_revision;
++              ah->external_reset = pdata->external_reset;
+       }
+       common = ath9k_hw_common(ah);
+diff --git a/include/linux/ath9k_platform.h b/include/linux/ath9k_platform.h
+index c207607..6e3f54f 100644
+--- a/include/linux/ath9k_platform.h
++++ b/include/linux/ath9k_platform.h
+@@ -31,6 +31,7 @@ struct ath9k_platform_data {
+       bool is_clk_25mhz;
+       int (*get_mac_revision)(void);
++      int (*external_reset)(void);
+ };
+ #endif /* _LINUX_ATH9K_PLATFORM_H */
diff --git a/package/mac80211/patches/571-ath9k-enable-support-for-AR9330.patch b/package/mac80211/patches/571-ath9k-enable-support-for-AR9330.patch
new file mode 100644 (file)
index 0000000..ec34a15
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index 5d373fc..8cbcf12 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -644,6 +644,7 @@ int ath9k_hw_init(struct ath_hw *ah)
+       case AR2427_DEVID_PCIE:
+       case AR9300_DEVID_PCIE:
+       case AR9300_DEVID_AR9485_PCIE:
++      case AR9300_DEVID_AR9330:
+       case AR9300_DEVID_AR9340:
+               break;
+       default:
+