1 /* $OpenBSD: ar9285reg.h,v 1.9 2019/02/01 16:15:07 stsp Exp $ */ 2 3 /*- 4 * Copyright (c) 2009 Damien Bergamini <damien.bergamini@free.fr> 5 * Copyright (c) 2008-2009 Atheros Communications Inc. 6 * 7 * Permission to use, copy, modify, and/or distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above 9 * copyright notice and this permission notice appear in all copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 #define AR9285_MAX_CHAINS 1 21 22 #define AR9285_PHY_CCA_MIN_GOOD_VAL_2GHZ (-127) 23 #define AR9285_PHY_CCA_MAX_GOOD_VAL_2GHZ (-108) 24 #define AR9271_PHY_CCA_MIN_GOOD_VAL_2GHZ (-127) 25 #define AR9271_PHY_CCA_MAX_GOOD_VAL_2GHZ (-116) 26 27 #define AR9285_CL_CAL_REDO_THRESH 1 28 29 /* 30 * Analog registers. 31 */ 32 #define AR9285_AN_RF2G1 0x7820 33 #define AR9285_AN_RF2G2 0x7824 34 #define AR9285_AN_RF2G3 0x7828 35 #define AR9285_AN_RF2G4 0x782c 36 #define AR9285_AN_RF2G5 0x7830 37 #define AR9285_AN_RF2G6 0x7834 38 #define AR9285_AN_RF2G7 0x7838 39 #define AR9285_AN_RF2G8 0x783c 40 #define AR9285_AN_RF2G9 0x7840 41 #define AR9285_AN_RXTXBB1 0x7854 42 #define AR9285_AN_TOP2 0x7868 43 #define AR9285_AN_TOP3 0x786c 44 #define AR9285_AN_TOP4 0x7870 45 46 /* Bits for AR9285_AN_RF2G1. */ 47 #define AR9285_AN_RF2G1_ENPACAL 0x00000800 48 #define AR9285_AN_RF2G1_PDPAOUT 0x00800000 49 #define AR9285_AN_RF2G1_PDPADRV2 0x01000000 50 #define AR9285_AN_RF2G1_PDPADRV1 0x02000000 51 52 /* Bits for AR9285_AN_RF2G2. */ 53 #define AR9285_AN_RF2G2_OFFCAL 0x00001000 54 55 /* Bits for AR9285_AN_RF2G3. */ 56 #define AR9285_AN_RF2G3_DB1_2_M 0x00000007 57 #define AR9285_AN_RF2G3_DB1_2_S 0 58 #define AR9285_AN_RF2G3_DB1_1_M 0x00000038 59 #define AR9285_AN_RF2G3_DB1_1_S 3 60 #define AR9285_AN_RF2G3_DB1_0_M 0x000001c0 61 #define AR9285_AN_RF2G3_DB1_0_S 6 62 #define AR9285_AN_RF2G3_OB_4_M 0x00000e00 63 #define AR9285_AN_RF2G3_OB_4_S 9 64 #define AR9285_AN_RF2G3_OB_3_M 0x00007000 65 #define AR9285_AN_RF2G3_OB_3_S 12 66 #define AR9285_AN_RF2G3_OB_2_M 0x00038000 67 #define AR9285_AN_RF2G3_OB_2_S 15 68 #define AR9285_AN_RF2G3_OB_1_M 0x001c0000 69 #define AR9285_AN_RF2G3_OB_1_S 18 70 #define AR9285_AN_RF2G3_OB_0_M 0x00e00000 71 #define AR9285_AN_RF2G3_OB_0_S 21 72 #define AR9285_AN_RF2G3_PDVCCOMP 0x02000000 73 #define AR9271_AN_RF2G3_CCOMP_M 0x00000fff 74 #define AR9271_AN_RF2G3_CCOMP_S 0 75 #define AR9271_AN_RF2G3_OB_QAM_M 0x00007000 76 #define AR9271_AN_RF2G3_OB_QAM_S 12 77 #define AR9271_AN_RF2G3_OB_PSK_M 0x00038000 78 #define AR9271_AN_RF2G3_OB_PSK_S 15 79 #define AR9271_AN_RF2G3_OB_CCK_M 0x001c0000 80 #define AR9271_AN_RF2G3_OB_CCK_S 18 81 #define AR9271_AN_RF2G3_DB1_M 0x00e00000 82 #define AR9271_AN_RF2G3_DB1_S 21 83 84 /* Bits for AR9285_AN_RF2G4. */ 85 #define AR9285_AN_RF2G4_DB2_4_M 0x00003800 86 #define AR9285_AN_RF2G4_DB2_4_S 11 87 #define AR9285_AN_RF2G4_DB2_3_M 0x0001c000 88 #define AR9285_AN_RF2G4_DB2_3_S 14 89 #define AR9285_AN_RF2G4_DB2_2_M 0x000e0000 90 #define AR9285_AN_RF2G4_DB2_2_S 17 91 #define AR9285_AN_RF2G4_DB2_1_M 0x00700000 92 #define AR9285_AN_RF2G4_DB2_1_S 20 93 #define AR9285_AN_RF2G4_DB2_0_M 0x03800000 94 #define AR9285_AN_RF2G4_DB2_0_S 23 95 #define AR9285_AN_RF2G4_DB1_4_M 0x1c000000 96 #define AR9285_AN_RF2G4_DB1_4_S 26 97 #define AR9285_AN_RF2G4_DB1_3_M 0xe0000000 98 #define AR9285_AN_RF2G4_DB1_3_S 29 99 #define AR9271_AN_RF2G4_DB2_M 0xe0000000 100 #define AR9271_AN_RF2G4_DB2_S 29 101 102 /* Bits for AR9285_AN_RF2G5. */ 103 #define AR9285_AN_RF2G5_IC50TX_M 0x00000700 104 #define AR9285_AN_RF2G5_IC50TX_S 8 105 106 /* Bits for AR9285_AN_RF2G6. */ 107 #define AR9285_AN_RF2G6_CCOMP_M 0x00007800 108 #define AR9285_AN_RF2G6_CCOMP_S 11 109 #define AR9285_AN_RF2G6_OFFS_6_1 0x03f00000 110 #define AR9285_AN_RF2G6_OFFS(i) (1 << (19 + (i))) 111 #define AR9271_AN_RF2G6_OFFS_6_0 0x07f00000 112 #define AR9271_AN_RF2G6_OFFS(i) (1 << (20 + (i))) 113 114 /* Bits for AR9285_AN_RF2G7. */ 115 #define AR9285_AN_RF2G7_PWDDB 0x00000002 116 #define AR9285_AN_RF2G7_PADRVGN2TAB0_M 0xe0000000 117 #define AR9285_AN_RF2G7_PADRVGN2TAB0_S 29 118 119 /* Bits for AR9285_AN_RF2G8. */ 120 #define AR9285_AN_RF2G8_PADRVGN2TAB0_M 0x0001c000 121 #define AR9285_AN_RF2G8_PADRVGN2TAB0_S 14 122 123 /* Bits for AR9285_AN_RXTXBB1. */ 124 #define AR9285_AN_RXTXBB1_SPARE9 0x00000001 125 #define AR9285_AN_RXTXBB1_PDRXTXBB1 0x00000020 126 #define AR9285_AN_RXTXBB1_PDV2I 0x00000080 127 #define AR9285_AN_RXTXBB1_PDDACIF 0x00000100 128 129 /* Bits for AR9285_AN_TOP2. */ 130 #define AR9285_AN_TOP2_DEFAULT 0xca0358a0 /* XXX magic */ 131 132 /* Bits for AR9285_AN_TOP3. */ 133 #define AR9285_AN_TOP3_XPABIAS_LVL_M 0x0000000c 134 #define AR9285_AN_TOP3_XPABIAS_LVL_S 2 135 #define AR9285_AN_TOP3_PWDDAC 0x00800000 136 137 /* Bits for AR9285_AN_TOP4. */ 138 #define AR9285_AN_TOP4_DEFAULT 0x10142c00 /* XXX magic */ 139 #define AR9285_AN_TOP4_UNLOCKED 0x10142c14 /* XXX magic */ 140 141 /* Bits for AR_PHY_MULTICHAIN_GAIN_CTL. */ 142 #define AR9285_PHY_ANT_DIV_CTL_ALL_M 0x7f000000 143 #define AR9285_PHY_ANT_DIV_CTL_ALL_S 24 144 #define AR9285_PHY_ANT_DIV_CTL_M 0x01000000 145 #define AR9285_PHY_ANT_DIV_CTL_S 24 146 #define AR9285_PHY_ANT_DIV_ALT_LNACONF_M 0x06000000 147 #define AR9285_PHY_ANT_DIV_ALT_LNACONF_S 25 148 #define AR9285_PHY_ANT_DIV_MAIN_LNACONF_M 0x18000000 149 #define AR9285_PHY_ANT_DIV_MAIN_LNACONF_S 27 150 #define AR9285_PHY_ANT_DIV_ALT_GAINTB_M 0x20000000 151 #define AR9285_PHY_ANT_DIV_ALT_GAINTB_S 29 152 #define AR9285_PHY_ANT_DIV_MAIN_GAINTB_M 0x40000000 153 #define AR9285_PHY_ANT_DIV_MAIN_GAINTB_S 30 154 155 /* 156 * ROM layout used by AR9285 (single-stream, 2GHz only). 157 */ 158 #define AR9285_EEP_START_LOC 64 159 #define AR9285_NUM_2G_CAL_PIERS 3 160 #define AR9285_NUM_2G_CCK_TARGET_POWERS 3 161 #define AR9285_NUM_2G_20_TARGET_POWERS 3 162 #define AR9285_NUM_2G_40_TARGET_POWERS 3 163 #define AR9285_NUM_CTLS 12 164 #define AR9285_NUM_BAND_EDGES 4 165 #define AR9285_NUM_PD_GAINS 2 166 #define AR9285_PD_GAINS_IN_MASK 4 167 #define AR9285_PD_GAIN_ICEPTS 5 168 169 struct ar9285_base_eep_header { 170 uint16_t length; 171 uint16_t checksum; 172 uint16_t version; 173 uint8_t opCapFlags; 174 uint8_t eepMisc; 175 uint16_t regDmn[2]; 176 uint8_t macAddr[6]; 177 uint8_t rxMask; 178 uint8_t txMask; 179 uint16_t rfSilent; 180 uint16_t blueToothOptions; 181 uint16_t deviceCap; 182 uint32_t binBuildNumber; 183 uint8_t deviceType; 184 /* End of common header. */ 185 uint8_t txGainType; 186 } __packed; 187 188 struct ar9285_modal_eep_header { 189 uint32_t antCtrlChain; 190 uint32_t antCtrlCommon; 191 uint8_t antennaGain; 192 uint8_t switchSettling; 193 uint8_t txRxAtten; 194 uint8_t rxTxMargin; 195 uint8_t adcDesiredSize; 196 uint8_t pgaDesiredSize; 197 uint8_t xlnaGain; 198 uint8_t txEndToXpaOff; 199 uint8_t txEndToRxOn; 200 uint8_t txFrameToXpaOn; 201 uint8_t thresh62; 202 uint8_t noiseFloorThresh; 203 uint8_t xpdGain; 204 uint8_t xpd; 205 uint8_t iqCalI; 206 uint8_t iqCalQ; 207 uint8_t pdGainOverlap; 208 uint8_t ob_01; 209 uint8_t db1_01; 210 uint8_t xpaBiasLvl; 211 uint8_t txFrameToDataStart; 212 uint8_t txFrameToPaOn; 213 uint8_t ht40PowerIncForPdadc; 214 uint8_t bswAtten; 215 uint8_t bswMargin; 216 uint8_t swSettleHt40; 217 uint8_t xatten2Db; 218 uint8_t xatten2Margin; 219 uint8_t db2_01; 220 uint8_t version; 221 uint16_t ob_234; 222 uint16_t db1_234; 223 uint16_t db2_234; 224 uint8_t futureModal[4]; 225 struct ar_spur_chan spurChans[AR_EEPROM_MODAL_SPURS]; 226 } __packed; 227 228 struct ar9285_cal_data_per_freq { 229 uint8_t pwrPdg[AR9285_NUM_PD_GAINS][AR9285_PD_GAIN_ICEPTS]; 230 uint8_t vpdPdg[AR9285_NUM_PD_GAINS][AR9285_PD_GAIN_ICEPTS]; 231 } __packed; 232 233 struct ar9285_cal_ctl_data { 234 struct ar_cal_ctl_edges ctlEdges[AR9285_NUM_BAND_EDGES]; 235 } __packed; 236 237 struct ar9285_eeprom { 238 struct ar9285_base_eep_header baseEepHeader; 239 uint8_t custData[20]; 240 struct ar9285_modal_eep_header modalHeader; 241 uint8_t calFreqPier2G[AR9285_NUM_2G_CAL_PIERS]; 242 struct ar9285_cal_data_per_freq 243 calPierData2G[AR9285_NUM_2G_CAL_PIERS]; 244 struct ar_cal_target_power_leg 245 calTargetPowerCck[AR9285_NUM_2G_CCK_TARGET_POWERS]; 246 struct ar_cal_target_power_leg 247 calTargetPower2G[AR9285_NUM_2G_20_TARGET_POWERS]; 248 struct ar_cal_target_power_ht 249 calTargetPower2GHT20[AR9285_NUM_2G_20_TARGET_POWERS]; 250 struct ar_cal_target_power_ht 251 calTargetPower2GHT40[AR9285_NUM_2G_40_TARGET_POWERS]; 252 uint8_t ctlIndex[AR9285_NUM_CTLS]; 253 struct ar9285_cal_ctl_data ctlData[AR9285_NUM_CTLS]; 254 uint8_t padding; 255 } __packed; 256 257 /* Macro to "pack" registers to 16-bit to save some .rodata space. */ 258 #define P(x) (x) 259 260 /* 261 * AR9285 1.2 initialization values. 262 */ 263 static const uint16_t ar9285_1_2_regs[] = { 264 P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014), 265 P(0x0801c), P(0x08318), P(0x09804), P(0x09820), P(0x09824), 266 P(0x09828), P(0x09834), P(0x09838), P(0x09840), P(0x09844), 267 P(0x09848), P(0x0a848), P(0x09850), P(0x09858), P(0x0985c), 268 P(0x09860), P(0x09864), P(0x09868), P(0x0986c), P(0x09914), 269 P(0x09918), P(0x09924), P(0x09944), P(0x09960), P(0x09964), 270 P(0x099b8), P(0x099bc), P(0x099c0), P(0x099c4), P(0x099c8), 271 P(0x099cc), P(0x099d0), P(0x099d4), P(0x099d8), P(0x09a00), 272 P(0x09a04), P(0x09a08), P(0x09a0c), P(0x09a10), P(0x09a14), 273 P(0x09a18), P(0x09a1c), P(0x09a20), P(0x09a24), P(0x09a28), 274 P(0x09a2c), P(0x09a30), P(0x09a34), P(0x09a38), P(0x09a3c), 275 P(0x09a40), P(0x09a44), P(0x09a48), P(0x09a4c), P(0x09a50), 276 P(0x09a54), P(0x09a58), P(0x09a5c), P(0x09a60), P(0x09a64), 277 P(0x09a68), P(0x09a6c), P(0x09a70), P(0x09a74), P(0x09a78), 278 P(0x09a7c), P(0x09a80), P(0x09a84), P(0x09a88), P(0x09a8c), 279 P(0x09a90), P(0x09a94), P(0x09a98), P(0x09a9c), P(0x09aa0), 280 P(0x09aa4), P(0x09aa8), P(0x09aac), P(0x09ab0), P(0x09ab4), 281 P(0x09ab8), P(0x09abc), P(0x09ac0), P(0x09ac4), P(0x09ac8), 282 P(0x09acc), P(0x09ad0), P(0x09ad4), P(0x09ad8), P(0x09adc), 283 P(0x09ae0), P(0x09ae4), P(0x09ae8), P(0x09aec), P(0x09af0), 284 P(0x09af4), P(0x09af8), P(0x09afc), P(0x09b00), P(0x09b04), 285 P(0x09b08), P(0x09b0c), P(0x09b10), P(0x09b14), P(0x09b18), 286 P(0x09b1c), P(0x09b20), P(0x09b24), P(0x09b28), P(0x09b2c), 287 P(0x09b30), P(0x09b34), P(0x09b38), P(0x09b3c), P(0x09b40), 288 P(0x09b44), P(0x09b48), P(0x09b4c), P(0x09b50), P(0x09b54), 289 P(0x09b58), P(0x09b5c), P(0x09b60), P(0x09b64), P(0x09b68), 290 P(0x09b6c), P(0x09b70), P(0x09b74), P(0x09b78), P(0x09b7c), 291 P(0x09b80), P(0x09b84), P(0x09b88), P(0x09b8c), P(0x09b90), 292 P(0x09b94), P(0x09b98), P(0x09b9c), P(0x09ba0), P(0x09ba4), 293 P(0x09ba8), P(0x09bac), P(0x09bb0), P(0x09bb4), P(0x09bb8), 294 P(0x09bbc), P(0x09bc0), P(0x09bc4), P(0x09bc8), P(0x09bcc), 295 P(0x09bd0), P(0x09bd4), P(0x09bd8), P(0x09bdc), P(0x09be0), 296 P(0x09be4), P(0x09be8), P(0x09bec), P(0x09bf0), P(0x09bf4), 297 P(0x09bf8), P(0x09bfc), P(0x0aa00), P(0x0aa04), P(0x0aa08), 298 P(0x0aa0c), P(0x0aa10), P(0x0aa14), P(0x0aa18), P(0x0aa1c), 299 P(0x0aa20), P(0x0aa24), P(0x0aa28), P(0x0aa2c), P(0x0aa30), 300 P(0x0aa34), P(0x0aa38), P(0x0aa3c), P(0x0aa40), P(0x0aa44), 301 P(0x0aa48), P(0x0aa4c), P(0x0aa50), P(0x0aa54), P(0x0aa58), 302 P(0x0aa5c), P(0x0aa60), P(0x0aa64), P(0x0aa68), P(0x0aa6c), 303 P(0x0aa70), P(0x0aa74), P(0x0aa78), P(0x0aa7c), P(0x0aa80), 304 P(0x0aa84), P(0x0aa88), P(0x0aa8c), P(0x0aa90), P(0x0aa94), 305 P(0x0aa98), P(0x0aa9c), P(0x0aaa0), P(0x0aaa4), P(0x0aaa8), 306 P(0x0aaac), P(0x0aab0), P(0x0aab4), P(0x0aab8), P(0x0aabc), 307 P(0x0aac0), P(0x0aac4), P(0x0aac8), P(0x0aacc), P(0x0aad0), 308 P(0x0aad4), P(0x0aad8), P(0x0aadc), P(0x0aae0), P(0x0aae4), 309 P(0x0aae8), P(0x0aaec), P(0x0aaf0), P(0x0aaf4), P(0x0aaf8), 310 P(0x0aafc), P(0x0ab00), P(0x0ab04), P(0x0ab08), P(0x0ab0c), 311 P(0x0ab10), P(0x0ab14), P(0x0ab18), P(0x0ab1c), P(0x0ab20), 312 P(0x0ab24), P(0x0ab28), P(0x0ab2c), P(0x0ab30), P(0x0ab34), 313 P(0x0ab38), P(0x0ab3c), P(0x0ab40), P(0x0ab44), P(0x0ab48), 314 P(0x0ab4c), P(0x0ab50), P(0x0ab54), P(0x0ab58), P(0x0ab5c), 315 P(0x0ab60), P(0x0ab64), P(0x0ab68), P(0x0ab6c), P(0x0ab70), 316 P(0x0ab74), P(0x0ab78), P(0x0ab7c), P(0x0ab80), P(0x0ab84), 317 P(0x0ab88), P(0x0ab8c), P(0x0ab90), P(0x0ab94), P(0x0ab98), 318 P(0x0ab9c), P(0x0aba0), P(0x0aba4), P(0x0aba8), P(0x0abac), 319 P(0x0abb0), P(0x0abb4), P(0x0abb8), P(0x0abbc), P(0x0abc0), 320 P(0x0abc4), P(0x0abc8), P(0x0abcc), P(0x0abd0), P(0x0abd4), 321 P(0x0abd8), P(0x0abdc), P(0x0abe0), P(0x0abe4), P(0x0abe8), 322 P(0x0abec), P(0x0abf0), P(0x0abf4), P(0x0abf8), P(0x0abfc), 323 P(0x0a204), P(0x0a20c), P(0x0b20c), P(0x0a21c), P(0x0a230), 324 P(0x0a250), P(0x0a358) 325 }; 326 327 static const uint32_t ar9285_1_2_vals_2g40[] = { 328 0x000002c0, 0x00000318, 0x00007c70, 0x00000000, 0x10801600, 329 0x12e00057, 0x00006880, 0x000003c4, 0x02020200, 0x01000e0e, 330 0x0a020001, 0x00000e0e, 0x00000007, 0x206a012e, 0x03721620, 331 0x00001053, 0x00001053, 0x6d4000e2, 0x7ec84d2e, 0x3137605e, 332 0x00058d20, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x00001130, 333 0x00000016, 0xd00a800d, 0xffbc1020, 0x00000000, 0x00000000, 334 0x0000421c, 0x00000c00, 0x05eea6d4, 0x06336f77, 0x6af6532f, 335 0x08f186c8, 0x00046384, 0x00000000, 0x00000000, 0x00058084, 336 0x00058088, 0x0005808c, 0x00058100, 0x00058104, 0x00058108, 337 0x0005810c, 0x00058110, 0x00058114, 0x00058180, 0x00058184, 338 0x00058188, 0x0005818c, 0x00058190, 0x00058194, 0x000581a0, 339 0x0005820c, 0x000581a8, 0x00058284, 0x00058288, 0x00058224, 340 0x00058290, 0x00058300, 0x00058304, 0x00058308, 0x0005830c, 341 0x00058380, 0x00058384, 0x00068700, 0x00068704, 0x00068708, 342 0x0006870c, 0x00068780, 0x00068784, 0x00078b00, 0x00078b04, 343 0x00078b08, 0x00078b0c, 0x00078b80, 0x00078b84, 0x00078b88, 344 0x00078b8c, 0x00078b90, 0x000caf80, 0x000caf84, 0x000caf88, 345 0x000caf8c, 0x000caf90, 0x000db30c, 0x000db310, 0x000db384, 346 0x000db388, 0x000db324, 0x000eb704, 0x000eb6a4, 0x000eb6a8, 347 0x000eb710, 0x000eb714, 0x000eb720, 0x000eb724, 0x000eb728, 348 0x000eb72c, 0x000eb7a0, 0x000eb7a4, 0x000eb7a8, 0x000eb7b0, 349 0x000eb7b4, 0x000eb7b8, 0x000eb7a5, 0x000eb7a9, 0x000eb7ad, 350 0x000eb7b1, 0x000eb7b5, 0x000eb7b9, 0x000eb7c5, 0x000eb7c9, 351 0x000eb7d1, 0x000eb7d5, 0x000eb7d9, 0x000eb7c6, 0x000eb7ca, 352 0x000eb7ce, 0x000eb7d2, 0x000eb7d6, 0x000eb7c3, 0x000eb7c7, 353 0x000eb7cb, 0x000eb7cf, 0x000eb7d7, 0x000eb7db, 0x000eb7db, 354 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 355 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 356 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 357 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 358 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 359 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 360 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 361 0x000eb7db, 0x000eb7db, 0x00058084, 0x00058088, 0x0005808c, 362 0x00058100, 0x00058104, 0x00058108, 0x0005810c, 0x00058110, 363 0x00058114, 0x00058180, 0x00058184, 0x00058188, 0x0005818c, 364 0x00058190, 0x00058194, 0x000581a0, 0x0005820c, 0x000581a8, 365 0x00058284, 0x00058288, 0x00058224, 0x00058290, 0x00058300, 366 0x00058304, 0x00058308, 0x0005830c, 0x00058380, 0x00058384, 367 0x00068700, 0x00068704, 0x00068708, 0x0006870c, 0x00068780, 368 0x00068784, 0x00078b00, 0x00078b04, 0x00078b08, 0x00078b0c, 369 0x00078b80, 0x00078b84, 0x00078b88, 0x00078b8c, 0x00078b90, 370 0x000caf80, 0x000caf84, 0x000caf88, 0x000caf8c, 0x000caf90, 371 0x000db30c, 0x000db310, 0x000db384, 0x000db388, 0x000db324, 372 0x000eb704, 0x000eb6a4, 0x000eb6a8, 0x000eb710, 0x000eb714, 373 0x000eb720, 0x000eb724, 0x000eb728, 0x000eb72c, 0x000eb7a0, 374 0x000eb7a4, 0x000eb7a8, 0x000eb7b0, 0x000eb7b4, 0x000eb7b8, 375 0x000eb7a5, 0x000eb7a9, 0x000eb7ad, 0x000eb7b1, 0x000eb7b5, 376 0x000eb7b9, 0x000eb7c5, 0x000eb7c9, 0x000eb7d1, 0x000eb7d5, 377 0x000eb7d9, 0x000eb7c6, 0x000eb7ca, 0x000eb7ce, 0x000eb7d2, 378 0x000eb7d6, 0x000eb7c3, 0x000eb7c7, 0x000eb7cb, 0x000eb7cf, 379 0x000eb7d7, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 380 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 381 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 382 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 383 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 384 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 385 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 386 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 387 0x00000004, 0x0001f000, 0x0001f000, 0x1883800a, 0x00000210, 388 0x0004a000, 0x7999aa0e 389 }; 390 391 static const uint32_t ar9285_1_2_vals_2g20[] = { 392 0x00000160, 0x0000018c, 0x00003e38, 0x00000000, 0x08400b00, 393 0x12e0002b, 0x00003440, 0x00000300, 0x02020200, 0x01000e0e, 394 0x0a020001, 0x00000e0e, 0x00000007, 0x206a012e, 0x03721620, 395 0x00001053, 0x00001053, 0x6d4000e2, 0x7ec84d2e, 0x3137605e, 396 0x00058d20, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x00000898, 397 0x0000000b, 0xd00a800d, 0xffbc1020, 0x00000000, 0x00000000, 398 0x0000421c, 0x00000c00, 0x05eea6d4, 0x06336f77, 0x6af6532f, 399 0x08f186c8, 0x00046384, 0x00000000, 0x00000000, 0x00058084, 400 0x00058088, 0x0005808c, 0x00058100, 0x00058104, 0x00058108, 401 0x0005810c, 0x00058110, 0x00058114, 0x00058180, 0x00058184, 402 0x00058188, 0x0005818c, 0x00058190, 0x00058194, 0x000581a0, 403 0x0005820c, 0x000581a8, 0x00058284, 0x00058288, 0x00058224, 404 0x00058290, 0x00058300, 0x00058304, 0x00058308, 0x0005830c, 405 0x00058380, 0x00058384, 0x00068700, 0x00068704, 0x00068708, 406 0x0006870c, 0x00068780, 0x00068784, 0x00078b00, 0x00078b04, 407 0x00078b08, 0x00078b0c, 0x00078b80, 0x00078b84, 0x00078b88, 408 0x00078b8c, 0x00078b90, 0x000caf80, 0x000caf84, 0x000caf88, 409 0x000caf8c, 0x000caf90, 0x000db30c, 0x000db310, 0x000db384, 410 0x000db388, 0x000db324, 0x000eb704, 0x000eb6a4, 0x000eb6a8, 411 0x000eb710, 0x000eb714, 0x000eb720, 0x000eb724, 0x000eb728, 412 0x000eb72c, 0x000eb7a0, 0x000eb7a4, 0x000eb7a8, 0x000eb7b0, 413 0x000eb7b4, 0x000eb7b8, 0x000eb7a5, 0x000eb7a9, 0x000eb7ad, 414 0x000eb7b1, 0x000eb7b5, 0x000eb7b9, 0x000eb7c5, 0x000eb7c9, 415 0x000eb7d1, 0x000eb7d5, 0x000eb7d9, 0x000eb7c6, 0x000eb7ca, 416 0x000eb7ce, 0x000eb7d2, 0x000eb7d6, 0x000eb7c3, 0x000eb7c7, 417 0x000eb7cb, 0x000eb7cf, 0x000eb7d7, 0x000eb7db, 0x000eb7db, 418 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 419 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 420 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 421 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 422 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 423 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 424 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 425 0x000eb7db, 0x000eb7db, 0x00058084, 0x00058088, 0x0005808c, 426 0x00058100, 0x00058104, 0x00058108, 0x0005810c, 0x00058110, 427 0x00058114, 0x00058180, 0x00058184, 0x00058188, 0x0005818c, 428 0x00058190, 0x00058194, 0x000581a0, 0x0005820c, 0x000581a8, 429 0x00058284, 0x00058288, 0x00058224, 0x00058290, 0x00058300, 430 0x00058304, 0x00058308, 0x0005830c, 0x00058380, 0x00058384, 431 0x00068700, 0x00068704, 0x00068708, 0x0006870c, 0x00068780, 432 0x00068784, 0x00078b00, 0x00078b04, 0x00078b08, 0x00078b0c, 433 0x00078b80, 0x00078b84, 0x00078b88, 0x00078b8c, 0x00078b90, 434 0x000caf80, 0x000caf84, 0x000caf88, 0x000caf8c, 0x000caf90, 435 0x000db30c, 0x000db310, 0x000db384, 0x000db388, 0x000db324, 436 0x000eb704, 0x000eb6a4, 0x000eb6a8, 0x000eb710, 0x000eb714, 437 0x000eb720, 0x000eb724, 0x000eb728, 0x000eb72c, 0x000eb7a0, 438 0x000eb7a4, 0x000eb7a8, 0x000eb7b0, 0x000eb7b4, 0x000eb7b8, 439 0x000eb7a5, 0x000eb7a9, 0x000eb7ad, 0x000eb7b1, 0x000eb7b5, 440 0x000eb7b9, 0x000eb7c5, 0x000eb7c9, 0x000eb7d1, 0x000eb7d5, 441 0x000eb7d9, 0x000eb7c6, 0x000eb7ca, 0x000eb7ce, 0x000eb7d2, 442 0x000eb7d6, 0x000eb7c3, 0x000eb7c7, 0x000eb7cb, 0x000eb7cf, 443 0x000eb7d7, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 444 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 445 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 446 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 447 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 448 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 449 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 450 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 451 0x00000004, 0x0001f000, 0x0001f000, 0x1883800a, 0x00000108, 452 0x0004a000, 0x7999aa0e 453 }; 454 455 static const uint16_t ar9285_1_2_cm_regs[] = { 456 P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044), 457 P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800), 458 P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814), 459 P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040), 460 P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054), 461 P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230), 462 P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8), 463 P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238), 464 P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378), 465 P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8), 466 P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8), 467 P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738), 468 P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c), 469 P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc), 470 P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc), 471 P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c), 472 P(0x0147c), P(0x04030), P(0x0403c), P(0x04024), P(0x04060), 473 P(0x04064), P(0x07010), P(0x07034), P(0x07038), P(0x08004), 474 P(0x08008), P(0x0800c), P(0x08018), P(0x08020), P(0x08038), 475 P(0x0803c), P(0x08048), P(0x08054), P(0x08058), P(0x0805c), 476 P(0x08060), P(0x08064), P(0x08070), P(0x080c0), P(0x080c4), 477 P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8), 478 P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec), P(0x080f0), 479 P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100), P(0x08104), 480 P(0x08108), P(0x0810c), P(0x08110), P(0x08118), P(0x0811c), 481 P(0x08120), P(0x08124), P(0x08128), P(0x0812c), P(0x08130), 482 P(0x08134), P(0x08138), P(0x0813c), P(0x08144), P(0x08168), 483 P(0x0816c), P(0x08170), P(0x08174), P(0x08178), P(0x0817c), 484 P(0x081c0), P(0x081d0), P(0x081ec), P(0x081f0), P(0x081f4), 485 P(0x081f8), P(0x081fc), P(0x08200), P(0x08204), P(0x08208), 486 P(0x0820c), P(0x08210), P(0x08214), P(0x08218), P(0x0821c), 487 P(0x08220), P(0x08224), P(0x08228), P(0x0822c), P(0x08230), 488 P(0x08234), P(0x08238), P(0x0823c), P(0x08240), P(0x08244), 489 P(0x08248), P(0x0824c), P(0x08250), P(0x08254), P(0x08258), 490 P(0x0825c), P(0x08260), P(0x08264), P(0x08270), P(0x08274), 491 P(0x08278), P(0x0827c), P(0x08284), P(0x08288), P(0x0828c), 492 P(0x08294), P(0x08298), P(0x0829c), P(0x08300), P(0x08314), 493 P(0x08328), P(0x0832c), P(0x08330), P(0x08334), P(0x08338), 494 P(0x0833c), P(0x08340), P(0x08344), P(0x09808), P(0x0980c), 495 P(0x09810), P(0x09814), P(0x0981c), P(0x0982c), P(0x09830), 496 P(0x0983c), P(0x0984c), P(0x09854), P(0x09900), P(0x09904), 497 P(0x09908), P(0x0990c), P(0x09910), P(0x0991c), P(0x09920), 498 P(0x09928), P(0x0992c), P(0x09934), P(0x09938), P(0x0993c), 499 P(0x09940), P(0x09948), P(0x0994c), P(0x09954), P(0x09958), 500 P(0x09968), P(0x09970), P(0x09974), P(0x09978), P(0x0997c), 501 P(0x09980), P(0x09984), P(0x09988), P(0x0998c), P(0x09990), 502 P(0x09994), P(0x09998), P(0x0999c), P(0x099a0), P(0x099a4), 503 P(0x099a8), P(0x099ac), P(0x099b0), P(0x099b4), P(0x099dc), 504 P(0x099e0), P(0x099e4), P(0x099e8), P(0x099ec), P(0x099f0), 505 P(0x0a208), P(0x0a210), P(0x0a214), P(0x0a218), P(0x0a220), 506 P(0x0a224), P(0x0a228), P(0x0a22c), P(0x0a234), P(0x0a238), 507 P(0x0a244), P(0x0a248), P(0x0a24c), P(0x0a254), P(0x0a258), 508 P(0x0a25c), P(0x0a260), P(0x0a268), P(0x0a26c), P(0x0d270), 509 P(0x0d35c), P(0x0d360), P(0x0d364), P(0x0d368), P(0x0d36c), 510 P(0x0d370), P(0x0d374), P(0x0d378), P(0x0d37c), P(0x0d380), 511 P(0x0d384), P(0x0a388), P(0x0a38c), P(0x0a390), P(0x0a39c), 512 P(0x0a3a0), P(0x0a3a4), P(0x0a3a8), P(0x0a3ac), P(0x0a3b0), 513 P(0x0a3b4), P(0x0a3b8), P(0x0a3bc), P(0x0a3c0), P(0x0a3c4), 514 P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), P(0x0a3e4), P(0x0a3e8), 515 P(0x0a3ec), P(0x07800), P(0x07804), P(0x07808), P(0x0780c), 516 P(0x07810), P(0x0781c), P(0x07824), P(0x0782c), P(0x07834), 517 P(0x07844), P(0x07848), P(0x0784c), P(0x07850), P(0x07854), 518 P(0x07858), P(0x0785c), P(0x07860), P(0x07864), P(0x07868), 519 P(0x07870) 520 }; 521 522 static const uint32_t ar9285_1_2_cm_vals[] = { 523 0x00000000, 0x00020045, 0x00000005, 0x00000000, 0x00000008, 524 0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000, 525 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 526 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f, 527 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 528 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000, 529 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 530 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 531 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 532 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 533 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 534 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 535 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 536 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 537 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 538 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 539 0x00000000, 0x00000002, 0x00000002, 0x0000001f, 0x00000000, 540 0x00000000, 0x00000031, 0x00000002, 0x000004c2, 0x00000000, 541 0x00000000, 0x00000000, 0x00000700, 0x00000000, 0x00000000, 542 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000fc78f, 543 0x0000000f, 0x00000000, 0x00000000, 0x2a80001a, 0x05dc01e0, 544 0x1f402710, 0x01f40000, 0x00001e00, 0x00000000, 0x00400000, 545 0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000, 0x00000000, 546 0x00000000, 0x00000000, 0x00020000, 0x00020000, 0x00000001, 547 0x00000052, 0x00000000, 0x00000168, 0x000100aa, 0x00003210, 548 0x08f04810, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 549 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 550 0x00000000, 0x32143320, 0xfaa4fa50, 0x00000100, 0x00000000, 551 0x00000000, 0x0000320a, 0x00000000, 0x00000000, 0x00000000, 552 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 553 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 554 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 555 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x0010f400, 556 0x00000100, 0x0001e800, 0x00000000, 0x00000000, 0x00000000, 557 0x400000ff, 0x00080922, 0x88a00010, 0x00000000, 0x40000000, 558 0x003e4180, 0x00000000, 0x0000002c, 0x0000002c, 0x00000000, 559 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 560 0x00000000, 0x00000001, 0x00000302, 0x00000e00, 0x00ff0000, 561 0x00000000, 0x00010380, 0x00481043, 0x00000000, 0xafe68e30, 562 0xfd14e000, 0x9c0a9f6b, 0x00000000, 0x0000a000, 0x00000000, 563 0x00200400, 0x0040233c, 0x00000044, 0x00000000, 0x00000000, 564 0x00000000, 0x00000000, 0x01002310, 0x10000fff, 0x04900000, 565 0x00000001, 0x00000004, 0x1e1f2022, 0x0a0b0c0d, 0x00000000, 566 0x14750604, 0x9280c00a, 0x00020028, 0x5f3ca3de, 0x2108ecff, 567 0x000003ce, 0x192bb514, 0x00000000, 0x00000001, 0x00000000, 568 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 569 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 570 0x201fff00, 0x2def0400, 0x03051000, 0x00000820, 0x00000000, 571 0x00000000, 0xaaaaaaaa, 0x3c466478, 0x0cc80caa, 0x00000000, 572 0x803e68c8, 0x4080a333, 0x00206c10, 0x009c4060, 0x01834061, 573 0x00000400, 0x000003b5, 0x00000000, 0x20202020, 0x20202020, 574 0x00000000, 0xfffffffc, 0x00000000, 0x00000000, 0x0ccb5380, 575 0x15151501, 0xdfa90f01, 0x00000000, 0x0ebae9e6, 0x0d820820, 576 0x07ffffef, 0x0fffffe7, 0x17ffffe5, 0x1fffffe4, 0x37ffffe3, 577 0x3fffffe3, 0x57ffffe3, 0x5fffffe2, 0x7fffffe2, 0x7f3c7bba, 578 0xf3307ff0, 0x0c000000, 0x20202020, 0x20202020, 0x00000001, 579 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 580 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 581 0x20202020, 0x20202020, 0x20202020, 0x00000000, 0x18c43433, 582 0x00f70081, 0x00140000, 0x0e4548d8, 0x54214514, 0x02025830, 583 0x71c0d388, 0x00000000, 0x00d86fff, 0x6e36d97b, 0x71400087, 584 0x000c0db6, 0x6db6246f, 0x6d9b66db, 0x6d8c6dba, 0x00040000, 585 0xdb003012, 0x04924914, 0x21084210, 0xf7d7ffde, 0xc2034080, 586 0x10142c00 587 }; 588 589 static const struct athn_ini ar9285_1_2_ini = { 590 nitems(ar9285_1_2_regs), 591 ar9285_1_2_regs, 592 NULL, /* 2GHz only. */ 593 NULL, /* 2GHz only. */ 594 ar9285_1_2_vals_2g40, 595 ar9285_1_2_vals_2g20, 596 nitems(ar9285_1_2_cm_regs), 597 ar9285_1_2_cm_regs, 598 ar9285_1_2_cm_vals 599 }; 600 601 #if NATHN_USB > 0 602 /* 603 * AR9271 programming. 604 */ 605 static const uint16_t ar9271_regs[] = { 606 P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014), 607 P(0x0801c), P(0x08318), P(0x09804), P(0x09820), P(0x09824), 608 P(0x09828), P(0x09834), P(0x09838), P(0x09840), P(0x09844), 609 P(0x09848), P(0x0a848), P(0x09850), P(0x09858), P(0x0985c), 610 P(0x09860), P(0x09864), P(0x09868), P(0x0986c), P(0x09910), 611 P(0x09914), P(0x09918), P(0x09924), P(0x09944), P(0x09960), 612 P(0x09964), P(0x099b8), P(0x099bc), P(0x099c0), P(0x099c4), 613 P(0x099c8), P(0x099cc), P(0x099d0), P(0x099d4), P(0x099d8), 614 P(0x09a00), P(0x09a04), P(0x09a08), P(0x09a0c), P(0x09a10), 615 P(0x09a14), P(0x09a18), P(0x09a1c), P(0x09a20), P(0x09a24), 616 P(0x09a28), P(0x09a2c), P(0x09a30), P(0x09a34), P(0x09a38), 617 P(0x09a3c), P(0x09a40), P(0x09a44), P(0x09a48), P(0x09a4c), 618 P(0x09a50), P(0x09a54), P(0x09a58), P(0x09a5c), P(0x09a60), 619 P(0x09a64), P(0x09a68), P(0x09a6c), P(0x09a70), P(0x09a74), 620 P(0x09a78), P(0x09a7c), P(0x09a80), P(0x09a84), P(0x09a88), 621 P(0x09a8c), P(0x09a90), P(0x09a94), P(0x09a98), P(0x09a9c), 622 P(0x09aa0), P(0x09aa4), P(0x09aa8), P(0x09aac), P(0x09ab0), 623 P(0x09ab4), P(0x09ab8), P(0x09abc), P(0x09ac0), P(0x09ac4), 624 P(0x09ac8), P(0x09acc), P(0x09ad0), P(0x09ad4), P(0x09ad8), 625 P(0x09adc), P(0x09ae0), P(0x09ae4), P(0x09ae8), P(0x09aec), 626 P(0x09af0), P(0x09af4), P(0x09af8), P(0x09afc), P(0x09b00), 627 P(0x09b04), P(0x09b08), P(0x09b0c), P(0x09b10), P(0x09b14), 628 P(0x09b18), P(0x09b1c), P(0x09b20), P(0x09b24), P(0x09b28), 629 P(0x09b2c), P(0x09b30), P(0x09b34), P(0x09b38), P(0x09b3c), 630 P(0x09b40), P(0x09b44), P(0x09b48), P(0x09b4c), P(0x09b50), 631 P(0x09b54), P(0x09b58), P(0x09b5c), P(0x09b60), P(0x09b64), 632 P(0x09b68), P(0x09b6c), P(0x09b70), P(0x09b74), P(0x09b78), 633 P(0x09b7c), P(0x09b80), P(0x09b84), P(0x09b88), P(0x09b8c), 634 P(0x09b90), P(0x09b94), P(0x09b98), P(0x09b9c), P(0x09ba0), 635 P(0x09ba4), P(0x09ba8), P(0x09bac), P(0x09bb0), P(0x09bb4), 636 P(0x09bb8), P(0x09bbc), P(0x09bc0), P(0x09bc4), P(0x09bc8), 637 P(0x09bcc), P(0x09bd0), P(0x09bd4), P(0x09bd8), P(0x09bdc), 638 P(0x09be0), P(0x09be4), P(0x09be8), P(0x09bec), P(0x09bf0), 639 P(0x09bf4), P(0x09bf8), P(0x09bfc), P(0x0aa00), P(0x0aa04), 640 P(0x0aa08), P(0x0aa0c), P(0x0aa10), P(0x0aa14), P(0x0aa18), 641 P(0x0aa1c), P(0x0aa20), P(0x0aa24), P(0x0aa28), P(0x0aa2c), 642 P(0x0aa30), P(0x0aa34), P(0x0aa38), P(0x0aa3c), P(0x0aa40), 643 P(0x0aa44), P(0x0aa48), P(0x0aa4c), P(0x0aa50), P(0x0aa54), 644 P(0x0aa58), P(0x0aa5c), P(0x0aa60), P(0x0aa64), P(0x0aa68), 645 P(0x0aa6c), P(0x0aa70), P(0x0aa74), P(0x0aa78), P(0x0aa7c), 646 P(0x0aa80), P(0x0aa84), P(0x0aa88), P(0x0aa8c), P(0x0aa90), 647 P(0x0aa94), P(0x0aa98), P(0x0aa9c), P(0x0aaa0), P(0x0aaa4), 648 P(0x0aaa8), P(0x0aaac), P(0x0aab0), P(0x0aab4), P(0x0aab8), 649 P(0x0aabc), P(0x0aac0), P(0x0aac4), P(0x0aac8), P(0x0aacc), 650 P(0x0aad0), P(0x0aad4), P(0x0aad8), P(0x0aadc), P(0x0aae0), 651 P(0x0aae4), P(0x0aae8), P(0x0aaec), P(0x0aaf0), P(0x0aaf4), 652 P(0x0aaf8), P(0x0aafc), P(0x0ab00), P(0x0ab04), P(0x0ab08), 653 P(0x0ab0c), P(0x0ab10), P(0x0ab14), P(0x0ab18), P(0x0ab1c), 654 P(0x0ab20), P(0x0ab24), P(0x0ab28), P(0x0ab2c), P(0x0ab30), 655 P(0x0ab34), P(0x0ab38), P(0x0ab3c), P(0x0ab40), P(0x0ab44), 656 P(0x0ab48), P(0x0ab4c), P(0x0ab50), P(0x0ab54), P(0x0ab58), 657 P(0x0ab5c), P(0x0ab60), P(0x0ab64), P(0x0ab68), P(0x0ab6c), 658 P(0x0ab70), P(0x0ab74), P(0x0ab78), P(0x0ab7c), P(0x0ab80), 659 P(0x0ab84), P(0x0ab88), P(0x0ab8c), P(0x0ab90), P(0x0ab94), 660 P(0x0ab98), P(0x0ab9c), P(0x0aba0), P(0x0aba4), P(0x0aba8), 661 P(0x0abac), P(0x0abb0), P(0x0abb4), P(0x0abb8), P(0x0abbc), 662 P(0x0abc0), P(0x0abc4), P(0x0abc8), P(0x0abcc), P(0x0abd0), 663 P(0x0abd4), P(0x0abd8), P(0x0abdc), P(0x0abe0), P(0x0abe4), 664 P(0x0abe8), P(0x0abec), P(0x0abf0), P(0x0abf4), P(0x0abf8), 665 P(0x0abfc), P(0x0a204), P(0x0a20c), P(0x0b20c), P(0x0a21c), 666 P(0x0a230), P(0x0a250), P(0x0a358) 667 }; 668 669 static const uint32_t ar9271_vals_2g40[] = { 670 0x000002c0, 0x00000318, 0x00007c70, 0x00000000, 0x10801600, 671 0x12e00057, 0x00006880, 0x000003c4, 0x02020200, 0x01000e0e, 672 0x3a020001, 0x00000e0e, 0x00000007, 0x206a012e, 0x03721620, 673 0x00001053, 0x00001053, 0x6d4000e2, 0x7ec84d2e, 0x3137605e, 674 0x00058d18, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x30002310, 675 0x00001130, 0x00000016, 0xd00a800d, 0xffbc1020, 0x00000000, 676 0x00000000, 0x0000421c, 0x00000c00, 0x05eea6d4, 0x06336f77, 677 0x6af6532f, 0x08f186c8, 0x00046384, 0x00000000, 0x00000000, 678 0x00058084, 0x00058088, 0x0005808c, 0x00058100, 0x00058104, 679 0x00058108, 0x0005810c, 0x00058110, 0x00058114, 0x00058180, 680 0x00058184, 0x00058188, 0x0005818c, 0x00058190, 0x00058194, 681 0x000581a0, 0x0005820c, 0x000581a8, 0x00058284, 0x00058288, 682 0x00058224, 0x00058290, 0x00058300, 0x00058304, 0x00058308, 683 0x0005830c, 0x00058380, 0x00058384, 0x00068700, 0x00068704, 684 0x00068708, 0x0006870c, 0x00068780, 0x00068784, 0x00078b00, 685 0x00078b04, 0x00078b08, 0x00078b0c, 0x00078b80, 0x00078b84, 686 0x00078b88, 0x00078b8c, 0x00078b90, 0x000caf80, 0x000caf84, 687 0x000caf88, 0x000caf8c, 0x000caf90, 0x000db30c, 0x000db310, 688 0x000db384, 0x000db388, 0x000db324, 0x000eb704, 0x000eb6a4, 689 0x000eb6a8, 0x000eb710, 0x000eb714, 0x000eb720, 0x000eb724, 690 0x000eb728, 0x000eb72c, 0x000eb7a0, 0x000eb7a4, 0x000eb7a8, 691 0x000eb7b0, 0x000eb7b4, 0x000eb7b8, 0x000eb7a5, 0x000eb7a9, 692 0x000eb7ad, 0x000eb7b1, 0x000eb7b5, 0x000eb7b9, 0x000eb7c5, 693 0x000eb7c9, 0x000eb7d1, 0x000eb7d5, 0x000eb7d9, 0x000eb7c6, 694 0x000eb7ca, 0x000eb7ce, 0x000eb7d2, 0x000eb7d6, 0x000eb7c3, 695 0x000eb7c7, 0x000eb7cb, 0x000eb7cf, 0x000eb7d7, 0x000eb7db, 696 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 697 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 698 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 699 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 700 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 701 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 702 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 703 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x00058084, 0x00058088, 704 0x0005808c, 0x00058100, 0x00058104, 0x00058108, 0x0005810c, 705 0x00058110, 0x00058114, 0x00058180, 0x00058184, 0x00058188, 706 0x0005818c, 0x00058190, 0x00058194, 0x000581a0, 0x0005820c, 707 0x000581a8, 0x00058284, 0x00058288, 0x00058224, 0x00058290, 708 0x00058300, 0x00058304, 0x00058308, 0x0005830c, 0x00058380, 709 0x00058384, 0x00068700, 0x00068704, 0x00068708, 0x0006870c, 710 0x00068780, 0x00068784, 0x00078b00, 0x00078b04, 0x00078b08, 711 0x00078b0c, 0x00078b80, 0x00078b84, 0x00078b88, 0x00078b8c, 712 0x00078b90, 0x000caf80, 0x000caf84, 0x000caf88, 0x000caf8c, 713 0x000caf90, 0x000db30c, 0x000db310, 0x000db384, 0x000db388, 714 0x000db324, 0x000eb704, 0x000eb6a4, 0x000eb6a8, 0x000eb710, 715 0x000eb714, 0x000eb720, 0x000eb724, 0x000eb728, 0x000eb72c, 716 0x000eb7a0, 0x000eb7a4, 0x000eb7a8, 0x000eb7b0, 0x000eb7b4, 717 0x000eb7b8, 0x000eb7a5, 0x000eb7a9, 0x000eb7ad, 0x000eb7b1, 718 0x000eb7b5, 0x000eb7b9, 0x000eb7c5, 0x000eb7c9, 0x000eb7d1, 719 0x000eb7d5, 0x000eb7d9, 0x000eb7c6, 0x000eb7ca, 0x000eb7ce, 720 0x000eb7d2, 0x000eb7d6, 0x000eb7c3, 0x000eb7c7, 0x000eb7cb, 721 0x000eb7cf, 0x000eb7d7, 0x000eb7db, 0x000eb7db, 0x000eb7db, 722 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 723 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 724 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 725 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 726 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 727 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 728 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 729 0x000eb7db, 0x00000004, 0x0001f000, 0x0001f000, 0x1883800a, 730 0x00000210, 0x0004a000, 0x7999aa0e 731 }; 732 733 static const uint32_t ar9271_vals_2g20[] = { 734 0x00000160, 0x0000018c, 0x00003e38, 0x00000000, 0x08400b00, 735 0x12e0002b, 0x00003440, 0x00000300, 0x02020200, 0x01000e0e, 736 0x3a020001, 0x00000e0e, 0x00000007, 0x206a012e, 0x03721620, 737 0x00001053, 0x00001053, 0x6d4000e2, 0x7ec84d2e, 0x3137605e, 738 0x00058d18, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x30002310, 739 0x00000898, 0x0000000b, 0xd00a800d, 0xffbc1020, 0x00000000, 740 0x00000000, 0x0000421c, 0x00000c00, 0x05eea6d4, 0x06336f77, 741 0x6af6532f, 0x08f186c8, 0x00046384, 0x00000000, 0x00000000, 742 0x00058084, 0x00058088, 0x0005808c, 0x00058100, 0x00058104, 743 0x00058108, 0x0005810c, 0x00058110, 0x00058114, 0x00058180, 744 0x00058184, 0x00058188, 0x0005818c, 0x00058190, 0x00058194, 745 0x000581a0, 0x0005820c, 0x000581a8, 0x00058284, 0x00058288, 746 0x00058224, 0x00058290, 0x00058300, 0x00058304, 0x00058308, 747 0x0005830c, 0x00058380, 0x00058384, 0x00068700, 0x00068704, 748 0x00068708, 0x0006870c, 0x00068780, 0x00068784, 0x00078b00, 749 0x00078b04, 0x00078b08, 0x00078b0c, 0x00078b80, 0x00078b84, 750 0x00078b88, 0x00078b8c, 0x00078b90, 0x000caf80, 0x000caf84, 751 0x000caf88, 0x000caf8c, 0x000caf90, 0x000db30c, 0x000db310, 752 0x000db384, 0x000db388, 0x000db324, 0x000eb704, 0x000eb6a4, 753 0x000eb6a8, 0x000eb710, 0x000eb714, 0x000eb720, 0x000eb724, 754 0x000eb728, 0x000eb72c, 0x000eb7a0, 0x000eb7a4, 0x000eb7a8, 755 0x000eb7b0, 0x000eb7b4, 0x000eb7b8, 0x000eb7a5, 0x000eb7a9, 756 0x000eb7ad, 0x000eb7b1, 0x000eb7b5, 0x000eb7b9, 0x000eb7c5, 757 0x000eb7c9, 0x000eb7d1, 0x000eb7d5, 0x000eb7d9, 0x000eb7c6, 758 0x000eb7ca, 0x000eb7ce, 0x000eb7d2, 0x000eb7d6, 0x000eb7c3, 759 0x000eb7c7, 0x000eb7cb, 0x000eb7cf, 0x000eb7d7, 0x000eb7db, 760 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 761 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 762 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 763 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 764 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 765 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 766 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 767 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x00058084, 0x00058088, 768 0x0005808c, 0x00058100, 0x00058104, 0x00058108, 0x0005810c, 769 0x00058110, 0x00058114, 0x00058180, 0x00058184, 0x00058188, 770 0x0005818c, 0x00058190, 0x00058194, 0x000581a0, 0x0005820c, 771 0x000581a8, 0x00058284, 0x00058288, 0x00058224, 0x00058290, 772 0x00058300, 0x00058304, 0x00058308, 0x0005830c, 0x00058380, 773 0x00058384, 0x00068700, 0x00068704, 0x00068708, 0x0006870c, 774 0x00068780, 0x00068784, 0x00078b00, 0x00078b04, 0x00078b08, 775 0x00078b0c, 0x00078b80, 0x00078b84, 0x00078b88, 0x00078b8c, 776 0x00078b90, 0x000caf80, 0x000caf84, 0x000caf88, 0x000caf8c, 777 0x000caf90, 0x000db30c, 0x000db310, 0x000db384, 0x000db388, 778 0x000db324, 0x000eb704, 0x000eb6a4, 0x000eb6a8, 0x000eb710, 779 0x000eb714, 0x000eb720, 0x000eb724, 0x000eb728, 0x000eb72c, 780 0x000eb7a0, 0x000eb7a4, 0x000eb7a8, 0x000eb7b0, 0x000eb7b4, 781 0x000eb7b8, 0x000eb7a5, 0x000eb7a9, 0x000eb7ad, 0x000eb7b1, 782 0x000eb7b5, 0x000eb7b9, 0x000eb7c5, 0x000eb7c9, 0x000eb7d1, 783 0x000eb7d5, 0x000eb7d9, 0x000eb7c6, 0x000eb7ca, 0x000eb7ce, 784 0x000eb7d2, 0x000eb7d6, 0x000eb7c3, 0x000eb7c7, 0x000eb7cb, 785 0x000eb7cf, 0x000eb7d7, 0x000eb7db, 0x000eb7db, 0x000eb7db, 786 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 787 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 788 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 789 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 790 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 791 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 792 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 0x000eb7db, 793 0x000eb7db, 0x00000004, 0x0001f000, 0x0001f000, 0x1883800a, 794 0x00000108, 0x0004a000, 0x7999aa0e 795 }; 796 797 static const uint16_t ar9271_cm_regs[] = { 798 P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044), 799 P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800), 800 P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814), 801 P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040), 802 P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054), 803 P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230), 804 P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8), 805 P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238), 806 P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378), 807 P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8), 808 P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8), 809 P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738), 810 P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c), 811 P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc), 812 P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc), 813 P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c), 814 P(0x0147c), P(0x04030), P(0x0403c), P(0x04024), P(0x04060), 815 P(0x04064), P(0x08004), P(0x08008), P(0x0800c), P(0x08018), 816 P(0x08020), P(0x08038), P(0x0803c), P(0x08048), P(0x08054), 817 P(0x08058), P(0x0805c), P(0x08060), P(0x08064), P(0x08070), 818 P(0x080b0), P(0x080b4), P(0x080b8), P(0x080bc), P(0x080c0), 819 P(0x080c4), P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), 820 P(0x080d8), P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec), 821 P(0x080f0), P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100), 822 P(0x08104), P(0x08108), P(0x0810c), P(0x08110), P(0x08118), 823 P(0x0811c), P(0x08120), P(0x08124), P(0x08128), P(0x0812c), 824 P(0x08130), P(0x08134), P(0x08138), P(0x0813c), P(0x08144), 825 P(0x08168), P(0x0816c), P(0x08170), P(0x08174), P(0x08178), 826 P(0x0817c), P(0x081c0), P(0x081d0), P(0x081ec), P(0x081f0), 827 P(0x081f4), P(0x081f8), P(0x081fc), P(0x08200), P(0x08204), 828 P(0x08208), P(0x0820c), P(0x08210), P(0x08214), P(0x08218), 829 P(0x0821c), P(0x08220), P(0x08224), P(0x08228), P(0x0822c), 830 P(0x08230), P(0x08234), P(0x08238), P(0x0823c), P(0x08240), 831 P(0x08244), P(0x08248), P(0x0824c), P(0x08250), P(0x08254), 832 P(0x08258), P(0x0825c), P(0x08260), P(0x08264), P(0x08270), 833 P(0x08274), P(0x08278), P(0x0827c), P(0x08284), P(0x08288), 834 P(0x0828c), P(0x08294), P(0x08298), P(0x0829c), P(0x08300), 835 P(0x08314), P(0x08328), P(0x0832c), P(0x08330), P(0x08334), 836 P(0x08338), P(0x0833c), P(0x08340), P(0x08344), P(0x07010), 837 P(0x07034), P(0x07038), P(0x07800), P(0x07804), P(0x07808), 838 P(0x0780c), P(0x07810), P(0x07814), P(0x0781c), P(0x07828), 839 P(0x0782c), P(0x07830), P(0x07834), P(0x0783c), P(0x07840), 840 P(0x07844), P(0x07848), P(0x0784c), P(0x07850), P(0x07854), 841 P(0x07858), P(0x0785c), P(0x07860), P(0x07864), P(0x07868), 842 P(0x07870), P(0x09808), P(0x0980c), P(0x09810), P(0x09814), 843 P(0x0981c), P(0x0982c), P(0x09830), P(0x0983c), P(0x0984c), 844 P(0x09854), P(0x09900), P(0x09904), P(0x09908), P(0x0990c), 845 P(0x0991c), P(0x09920), P(0x09928), P(0x0992c), P(0x09934), 846 P(0x09938), P(0x0993c), P(0x09940), P(0x09948), P(0x0994c), 847 P(0x09954), P(0x09958), P(0x09968), P(0x09970), P(0x09974), 848 P(0x09978), P(0x0997c), P(0x09980), P(0x09984), P(0x09988), 849 P(0x0998c), P(0x09990), P(0x09994), P(0x09998), P(0x0999c), 850 P(0x099a0), P(0x099a4), P(0x099a8), P(0x099ac), P(0x099b0), 851 P(0x099b4), P(0x099dc), P(0x099e0), P(0x099e4), P(0x099e8), 852 P(0x099ec), P(0x099f0), P(0x0a208), P(0x0a210), P(0x0a214), 853 P(0x0a218), P(0x0a220), P(0x0a224), P(0x0a228), P(0x0a22c), 854 P(0x0a234), P(0x0a238), P(0x0a244), P(0x0a248), P(0x0a24c), 855 P(0x0a254), P(0x0a258), P(0x0a25c), P(0x0a260), P(0x0a268), 856 P(0x0a26c), P(0x0a388), P(0x0a38c), P(0x0a390), P(0x0a39c), 857 P(0x0a3a0), P(0x0a3a4), P(0x0a3a8), P(0x0a3ac), P(0x0a3b0), 858 P(0x0a3b4), P(0x0a3b8), P(0x0a3bc), P(0x0a3c0), P(0x0a3c4), 859 P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), P(0x0a3e4), P(0x0a3e8), 860 P(0x0a3ec), P(0x0a3f0), P(0x0a3f4), P(0x0d270), P(0x0d35c), 861 P(0x0d360), P(0x0d364), P(0x0d368), P(0x0d36c), P(0x0d370), 862 P(0x0d374), P(0x0d378), P(0x0d37c), P(0x0d380), P(0x0d384) 863 }; 864 865 static const uint32_t ar9271_cm_vals[] = { 866 0x00000000, 0x00020045, 0x00000005, 0x00000000, 0x00000008, 867 0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000, 868 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 869 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f, 870 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 871 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000, 872 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 873 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 874 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 875 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 876 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 877 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 878 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 879 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 880 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 881 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 882 0x00000000, 0x00000002, 0x00000002, 0x0000001f, 0x00000000, 883 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000700, 884 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 885 0x00000000, 0x000fc78f, 0x0000000f, 0x00000000, 0x00000000, 886 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a80001a, 887 0x05dc01e0, 0x1f402710, 0x01f40000, 0x00001e00, 0x00000000, 888 0x00400000, 0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000, 889 0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00020000, 890 0x00000001, 0x00000052, 0x00000000, 0x00000168, 0x000100aa, 891 0x00003210, 0x08f04810, 0x00000000, 0x00000000, 0x00000000, 892 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 893 0x00000000, 0x00000000, 0x32143320, 0xfaa4fa50, 0x00000100, 894 0x00000000, 0x00000000, 0x0000320a, 0x00000000, 0x00000000, 895 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 896 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 897 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 898 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 899 0x0010f400, 0x00000100, 0x0001e800, 0x00000000, 0x00000000, 900 0x00000000, 0x400000ff, 0x00080922, 0x88a00010, 0x00000000, 901 0x40000000, 0x003e4180, 0x00000000, 0x0000002c, 0x0000002c, 902 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 903 0x00000000, 0x00000000, 0x00000001, 0x00000302, 0x00000e00, 904 0x00ff0000, 0x00000000, 0x00010380, 0x00581043, 0x00000030, 905 0x00000002, 0x000004c2, 0x00140000, 0x0e4548d8, 0x54214514, 906 0x02025820, 0x71c0d388, 0x924934a8, 0x00000000, 0x66964300, 907 0x8db6d961, 0x8db6d96c, 0x6140008b, 0x72ee0a72, 0xbbfffffc, 908 0x000c0db6, 0x6db6246f, 0x6d9b66db, 0x6d8c6dba, 0x00040000, 909 0xdb003012, 0x04924914, 0x21084210, 0xf7d7ffde, 0xc2034080, 910 0x10142c00, 0x00000000, 0xafe68e30, 0xfd14e000, 0x9c0a9f6b, 911 0x00000000, 0x0000a000, 0x00000000, 0x00200400, 0x0040233c, 912 0x00000044, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 913 0x10000fff, 0x04900000, 0x00000001, 0x00000004, 0x1e1f2022, 914 0x0a0b0c0d, 0x00000000, 0x14750604, 0x9280c00a, 0x00020028, 915 0x5f3ca3de, 0x0108ecff, 0x000003ce, 0x192bb514, 0x00000000, 916 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 917 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 918 0x00000000, 0x00000001, 0x201fff00, 0x2def0400, 0x03051000, 919 0x00000820, 0x00000000, 0x00000000, 0xaaaaaaaa, 0x3c466478, 920 0x0cc80caa, 0x00000000, 0x803e68c8, 0x4080a333, 0x00206c10, 921 0x009c4060, 0x01834061, 0x00000400, 0x000003b5, 0x00000000, 922 0x20202020, 0x20202020, 0x00000000, 0xfffffffc, 0x00000000, 923 0x00000000, 0x0ccb5380, 0x15151501, 0xdfa90f01, 0x00000000, 924 0x0ebae9e6, 0x0c000000, 0x20202020, 0x20202020, 0x00000001, 925 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 926 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 927 0x20202020, 0x20202020, 0x20202020, 0x00000000, 0x18c43433, 928 0x00f70081, 0x01036a2f, 0x00000000, 0x0d820820, 0x07ffffef, 929 0x0fffffe7, 0x17ffffe5, 0x1fffffe4, 0x37ffffe3, 0x3fffffe3, 930 0x57ffffe3, 0x5fffffe2, 0x7fffffe2, 0x7f3c7bba, 0xf3307ff0 931 }; 932 933 static const struct athn_ini ar9271_ini = { 934 nitems(ar9271_regs), 935 ar9271_regs, 936 NULL, /* 2GHz only. */ 937 NULL, /* 2GHz only. */ 938 ar9271_vals_2g40, 939 ar9271_vals_2g20, 940 nitems(ar9271_cm_regs), 941 ar9271_cm_regs, 942 ar9271_cm_vals 943 }; 944 #endif /* NATHN_USB */ 945 946 /* 947 * AR9285 1.2 Tx gains. 948 */ 949 static const uint16_t ar9285_1_2_tx_gain_regs[] = { 950 P(0x0a300), P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310), 951 P(0x0a314), P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324), 952 P(0x0a328), P(0x0a32c), P(0x0a330), P(0x0a334), P(0x0a338), 953 P(0x0a33c), P(0x0a340), P(0x0a344), P(0x0a348), P(0x0a34c), 954 P(0x0a350), P(0x0a354), P(0x07814), P(0x07828), P(0x07830), 955 P(0x07838), P(0x0783c), P(0x07840), P(0x0786c), P(0x07820), 956 P(0x0a274), P(0x0a278), P(0x0a27c), P(0x0a394), P(0x0a398), 957 P(0x0a3dc), P(0x0a3e0) 958 }; 959 960 static const uint32_t ar9285_1_2_tx_gain_vals_2g[] = { 961 0x00000000, 0x00009200, 0x00010208, 0x00019608, 0x00022618, 962 0x0002a6c9, 0x00031710, 0x00035718, 0x00038758, 0x0003c75a, 963 0x0004075c, 0x0004475e, 0x0004679f, 0x000487df, 0x0003891e, 964 0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 965 0x0003e9df, 0x0003e9df, 0x924934a8, 0x26d2491b, 0xedb6d96e, 966 0xfac68801, 0x0001fffe, 0xffeb1a20, 0x48609eb4, 0x00000c04, 967 0x0a21a652, 0x39ce739c, 0x050e039c, 0x39ce739c, 0x0000039c, 968 0x39ce739c, 0x0000039c 969 }; 970 971 static const struct athn_gain ar9285_1_2_tx_gain = { 972 nitems(ar9285_1_2_tx_gain_regs), 973 ar9285_1_2_tx_gain_regs, 974 NULL, /* 2GHz only. */ 975 ar9285_1_2_tx_gain_vals_2g 976 }; 977 978 static const uint32_t ar9285_1_2_tx_gain_high_power_vals_2g[] = { 979 0x00000000, 0x00006200, 0x00008201, 0x0000b240, 0x0000d241, 980 0x0000f600, 0x00012800, 0x00016802, 0x0001b805, 0x00021a80, 981 0x00028b00, 0x0002ab40, 0x0002cd80, 0x00033d82, 0x0003891e, 982 0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 983 0x0003e9df, 0x0003e9df, 0x924934a8, 0x26d2491b, 0xedb6d96e, 984 0xfac68803, 0x0001fffe, 0xffeb1a20, 0x08609ebe, 0x00000c00, 985 0x0a216652, 0x0e739ce7, 0x050380e7, 0x0e739ce7, 0x000000e7, 986 0x0e739ce7, 0x000000e7 987 }; 988 989 static const struct athn_gain ar9285_1_2_tx_gain_high_power = { 990 nitems(ar9285_1_2_tx_gain_regs), 991 ar9285_1_2_tx_gain_regs, 992 NULL, /* 2GHz only. */ 993 ar9285_1_2_tx_gain_high_power_vals_2g 994 }; 995 996 /* 997 * AR9285 XE 2.0 Tx gains. 998 */ 999 static const uint32_t ar9285_2_0_tx_gain_vals_2g[] = { 1000 0x00000000, 0x00009200, 0x00010208, 0x00019608, 0x00022618, 1001 0x0002a6c9, 0x00031710, 0x00035718, 0x00038758, 0x0003c75a, 1002 0x0004075c, 0x0004475e, 0x0004679f, 0x000487df, 0x0003891e, 1003 0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 1004 0x0003e9df, 0x0003e9df, 0x92497ca8, 0x2ad2491b, 0xedb6da6e, 1005 0xdac71441, 0x2481f6fe, 0xba5f638c, 0x48609eb4, 0x00000c04, 1006 0x0a21a652, 0x39ce739c, 0x050e039c, 0x39ce739c, 0x0000039c, 1007 0x39ce739c, 0x0000039c 1008 }; 1009 1010 static const struct athn_gain ar9285_2_0_tx_gain = { 1011 nitems(ar9285_1_2_tx_gain_regs), 1012 ar9285_1_2_tx_gain_regs, 1013 NULL, /* 2GHz only. */ 1014 ar9285_2_0_tx_gain_vals_2g 1015 }; 1016 1017 static const uint32_t ar9285_2_0_tx_gain_high_power_vals_2g[] = { 1018 0x00000000, 0x00006200, 0x00008201, 0x0000b240, 0x0000d241, 1019 0x0000f600, 0x00012800, 0x00016802, 0x0001b805, 0x00021a80, 1020 0x00028b00, 0x0002ab40, 0x0002cd80, 0x00033d82, 0x0003891e, 1021 0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 1022 0x0003e9df, 0x0003e9df, 0x92497ca8, 0x2ad2491b, 0xedb6da6e, 1023 0xdac71443, 0x2481f6fe, 0xba5f638c, 0x08609ebe, 0x00000c00, 1024 0x0a216652, 0x0e739ce7, 0x050380e7, 0x0e739ce7, 0x000000e7, 1025 0x0e739ce7, 0x000000e7 1026 }; 1027 1028 static const struct athn_gain ar9285_2_0_tx_gain_high_power = { 1029 nitems(ar9285_1_2_tx_gain_regs), 1030 ar9285_1_2_tx_gain_regs, 1031 NULL, /* 2GHz only. */ 1032 ar9285_2_0_tx_gain_high_power_vals_2g 1033 }; 1034 1035 #if NATHN_USB > 0 1036 /* 1037 * AR9271 Tx gains. 1038 */ 1039 static const uint16_t ar9271_tx_gain_regs[] = { 1040 P(0x0a300), P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310), 1041 P(0x0a314), P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324), 1042 P(0x0a328), P(0x0a32c), P(0x0a330), P(0x0a334), P(0x0a338), 1043 P(0x0a33c), P(0x0a340), P(0x0a344), P(0x0a348), P(0x0a34c), 1044 P(0x0a350), P(0x0a354), P(0x07838), P(0x07824), P(0x0786c), 1045 P(0x07820), P(0x0a274), P(0x0a278), P(0x0a27c), P(0x0a394), 1046 P(0x0a398), P(0x0a3dc), P(0x0a3e0) 1047 }; 1048 1049 static const uint32_t ar9271_tx_gain_vals_2g[] = { 1050 0x00000000, 0x00009200, 0x00010208, 0x00019608, 0x0001e610, 1051 0x0002d6d0, 0x00039758, 0x0003b759, 0x0003d75a, 0x0004175c, 1052 0x0004575e, 0x0004979f, 0x0004d7df, 0x000368de, 0x0003891e, 1053 0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 1054 0x0003e9df, 0x0003e9df, 0x00000029, 0x00d8abff, 0x48609eb4, 1055 0x00000c04, 0x0a218652, 0x3bdef7bd, 0x050e83bd, 0x3bdef7bd, 1056 0x000003bd, 0x3bdef7bd, 0x000003bd 1057 }; 1058 1059 static const struct athn_gain ar9271_tx_gain = { 1060 nitems(ar9271_tx_gain_regs), 1061 ar9271_tx_gain_regs, 1062 NULL, /* 2GHz only. */ 1063 ar9271_tx_gain_vals_2g 1064 }; 1065 1066 static const uint32_t ar9271_tx_gain_high_power_vals_2g[] = { 1067 0x00010000, 0x00016200, 0x00018201, 0x0001b240, 0x0001d241, 1068 0x0001f600, 0x00022800, 0x00026802, 0x0002b805, 0x0002ea41, 1069 0x00038b00, 0x0003ab40, 0x0003cd80, 0x000368de, 0x0003891e, 1070 0x0003a95e, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 1071 0x0003e9df, 0x0003e9df, 0x0000002b, 0x00d8a7ff, 0x08609eba, 1072 0x00000c00, 0x0a214652, 0x0e739ce7, 0x05018063, 0x06318c63, 1073 0x00000063, 0x06318c63, 0x00000063 1074 }; 1075 1076 static const struct athn_gain ar9271_tx_gain_high_power = { 1077 nitems(ar9271_tx_gain_regs), 1078 ar9271_tx_gain_regs, 1079 NULL, /* 2GHz only. */ 1080 ar9271_tx_gain_high_power_vals_2g 1081 }; 1082 #endif /* NATHN_USB */ 1083