1 /* $OpenBSD: ar9287reg.h,v 1.6 2019/03/29 11:04:40 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 AR9287_MAX_CHAINS 2 21 22 #define AR9287_PHY_CCA_MIN_GOOD_VAL_2GHZ (-127) 23 #define AR9287_PHY_CCA_MAX_GOOD_VAL_2GHZ (-97) 24 25 /* 26 * Analog registers. 27 */ 28 #define AR9287_AN_RF2G3_CH0 0x7808 29 #define AR9287_AN_RF2G3_CH1 0x785c 30 #define AR9287_AN_TXPC0 0x7898 31 #define AR9287_AN_TOP2 0x78b4 32 33 /* Bits for AR9287_AN_RF2G3_CH[01]. */ 34 #define AR9287_AN_RF2G3_OB_PAL_OFF_M 0x0001c000 35 #define AR9287_AN_RF2G3_OB_PAL_OFF_S 14 36 #define AR9287_AN_RF2G3_OB_QAM_M 0x000e0000 37 #define AR9287_AN_RF2G3_OB_QAM_S 17 38 #define AR9287_AN_RF2G3_OB_PSK_M 0x00700000 39 #define AR9287_AN_RF2G3_OB_PSK_S 20 40 #define AR9287_AN_RF2G3_OB_CCK_M 0x03800000 41 #define AR9287_AN_RF2G3_OB_CCK_S 23 42 #define AR9287_AN_RF2G3_DB2_M 0x1c000000 43 #define AR9287_AN_RF2G3_DB2_S 26 44 #define AR9287_AN_RF2G3_DB1_M 0xe0000000 45 #define AR9287_AN_RF2G3_DB1_S 29 46 47 /* Bits for AR9287_AN_TXPC0. */ 48 #define AR9287_AN_TXPC0_TXPCMODE_M 0x0000c000 49 #define AR9287_AN_TXPC0_TXPCMODE_S 14 50 #define AR9287_AN_TXPC0_TXPCMODE_NORMAL 0 51 #define AR9287_AN_TXPC0_TXPCMODE_TEST 1 52 #define AR9287_AN_TXPC0_TXPCMODE_TEMPSENSE 2 53 #define AR9287_AN_TXPC0_TXPCMODE_ATBTEST 3 54 55 /* Bits for AR9287_AN_TOP2. */ 56 #define AR9287_AN_TOP2_XPABIAS_LVL_M 0xc0000000 57 #define AR9287_AN_TOP2_XPABIAS_LVL_S 30 58 59 /* 60 * ROM layout used by AR9287 (2GHz only). 61 */ 62 #define AR9287_EEP_START_LOC 128 63 #define AR9287_HTC_EEP_START_LOC 256 64 #define AR9287_NUM_2G_CAL_PIERS 3 65 #define AR9287_NUM_2G_CCK_TARGET_POWERS 3 66 #define AR9287_NUM_2G_20_TARGET_POWERS 3 67 #define AR9287_NUM_2G_40_TARGET_POWERS 3 68 #define AR9287_NUM_CTLS 12 69 #define AR9287_NUM_BAND_EDGES 4 70 #define AR9287_NUM_PD_GAINS 4 71 #define AR9287_PD_GAINS_IN_MASK 4 72 #define AR9287_PD_GAIN_ICEPTS 1 73 #define AR9287_MAX_RATE_POWER 63 74 #define AR9287_NUM_RATES 16 75 76 struct ar9287_base_eep_header { 77 uint16_t length; 78 uint16_t checksum; 79 uint16_t version; 80 uint8_t opCapFlags; 81 uint8_t eepMisc; 82 #define AR9287_EEPMISC_BIG_ENDIAN 0x01 83 #define AR9287_EEPMISC_WOW 0x02 84 85 uint16_t regDmn[2]; 86 uint8_t macAddr[6]; 87 uint8_t rxMask; 88 uint8_t txMask; 89 uint16_t rfSilent; 90 uint16_t blueToothOptions; 91 uint16_t deviceCap; 92 uint32_t binBuildNumber; 93 uint8_t deviceType; 94 /* End of common header. */ 95 uint8_t openLoopPwrCntl; 96 int8_t pwrTableOffset; 97 int8_t tempSensSlope; 98 int8_t tempSensSlopePalOn; 99 uint8_t futureBase[29]; 100 } __packed; 101 102 struct ar9287_modal_eep_header { 103 uint32_t antCtrlChain[AR9287_MAX_CHAINS]; 104 uint32_t antCtrlCommon; 105 int8_t antennaGainCh[AR9287_MAX_CHAINS]; 106 uint8_t switchSettling; 107 uint8_t txRxAttenCh[AR9287_MAX_CHAINS]; 108 uint8_t rxTxMarginCh[AR9287_MAX_CHAINS]; 109 int8_t adcDesiredSize; 110 uint8_t txEndToXpaOff; 111 uint8_t txEndToRxOn; 112 uint8_t txFrameToXpaOn; 113 uint8_t thresh62; 114 int8_t noiseFloorThreshCh[AR9287_MAX_CHAINS]; 115 uint8_t xpdGain; 116 uint8_t xpd; 117 int8_t iqCalICh[AR9287_MAX_CHAINS]; 118 int8_t iqCalQCh[AR9287_MAX_CHAINS]; 119 uint8_t pdGainOverlap; 120 uint8_t xpaBiasLvl; 121 uint8_t txFrameToDataStart; 122 uint8_t txFrameToPaOn; 123 uint8_t ht40PowerIncForPdadc; 124 uint8_t bswAtten[AR9287_MAX_CHAINS]; 125 uint8_t bswMargin[AR9287_MAX_CHAINS]; 126 uint8_t swSettleHt40; 127 uint8_t version; 128 uint8_t db1; 129 uint8_t db2; 130 uint8_t ob_cck; 131 uint8_t ob_psk; 132 uint8_t ob_qam; 133 uint8_t ob_pal_off; 134 uint8_t futureModal[30]; 135 struct ar_spur_chan spurChans[AR_EEPROM_MODAL_SPURS]; 136 } __packed; 137 138 struct ar9287_cal_data_per_freq { 139 uint8_t pwrPdg[AR9287_NUM_PD_GAINS][AR9287_PD_GAIN_ICEPTS]; 140 uint8_t vpdPdg[AR9287_NUM_PD_GAINS][AR9287_PD_GAIN_ICEPTS]; 141 } __packed; 142 143 union ar9287_cal_data_per_freq_u { 144 struct ar_cal_data_per_freq_olpc calDataOpen; 145 struct ar9287_cal_data_per_freq calDataClose; 146 } __packed; 147 148 struct ar9287_cal_ctl_data { 149 struct ar_cal_ctl_edges 150 ctlEdges[AR9287_MAX_CHAINS][AR9287_NUM_BAND_EDGES]; 151 } __packed; 152 153 struct ar9287_eeprom { 154 struct ar9287_base_eep_header baseEepHeader; 155 uint8_t custData[32]; 156 struct ar9287_modal_eep_header modalHeader; 157 uint8_t calFreqPier2G[AR9287_NUM_2G_CAL_PIERS]; 158 union ar9287_cal_data_per_freq_u 159 calPierData2G[AR9287_MAX_CHAINS][AR9287_NUM_2G_CAL_PIERS]; 160 struct ar_cal_target_power_leg 161 calTargetPowerCck[AR9287_NUM_2G_CCK_TARGET_POWERS]; 162 struct ar_cal_target_power_leg 163 calTargetPower2G[AR9287_NUM_2G_20_TARGET_POWERS]; 164 struct ar_cal_target_power_ht 165 calTargetPower2GHT20[AR9287_NUM_2G_20_TARGET_POWERS]; 166 struct ar_cal_target_power_ht 167 calTargetPower2GHT40[AR9287_NUM_2G_40_TARGET_POWERS]; 168 uint8_t ctlIndex[AR9287_NUM_CTLS]; 169 struct ar9287_cal_ctl_data ctlData[AR9287_NUM_CTLS]; 170 uint8_t padding; 171 } __packed; 172 173 /* Macro to "pack" registers to 16-bit to save some .rodata space. */ 174 #define P(x) (x) 175 176 /* 177 * AR9287 1.1 initialization values. 178 */ 179 static const uint16_t ar9287_1_1_regs[] = { 180 P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014), 181 P(0x0801c), P(0x08120), P(0x081d0), P(0x08318), P(0x09804), 182 P(0x09820), P(0x09824), P(0x09828), P(0x09834), P(0x09838), 183 P(0x09840), P(0x09844), P(0x09850), P(0x09858), P(0x0985c), 184 P(0x09860), P(0x09864), P(0x09868), P(0x0986c), P(0x09914), 185 P(0x09918), P(0x09924), P(0x09944), P(0x09960), P(0x0a960), 186 P(0x09964), P(0x0c968), P(0x099b8), P(0x099bc), P(0x099c0), 187 P(0x0a204), P(0x0a20c), P(0x0b20c), P(0x0a21c), P(0x0a230), 188 P(0x0a250), P(0x0a358), P(0x0a3d8) 189 }; 190 191 static const uint32_t ar9287_1_1_vals_2g40[] = { 192 0x000002c0, 0x00000318, 0x00007c70, 0x00000000, 0x10801600, 193 0x12e00057, 0x08f04810, 0x0000320a, 0x00006880, 0x000003c4, 194 0x02020200, 0x01000e0e, 0x3a020001, 0x00000e0e, 0x00000007, 195 0x206a012e, 0x037216a0, 0x6d4000e2, 0x7ec84d2e, 0x3139605e, 196 0x00058d20, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x00001130, 197 0x00000016, 0xd00a8a0d, 0xefbc1010, 0x00000010, 0x00000010, 198 0x00000210, 0x000003ce, 0x0000001c, 0x00000c00, 0x05eea6d4, 199 0x00000444, 0x00000000, 0x00000000, 0x1883800a, 0x00000210, 200 0x0004a000, 0x7999aa0e, 0x00000000 201 }; 202 203 static const uint32_t ar9287_1_1_vals_2g20[] = { 204 0x00000160, 0x0000018c, 0x00003e38, 0x00000000, 0x08400b00, 205 0x12e0002b, 0x08f04810, 0x0000320a, 0x00003440, 0x00000300, 206 0x02020200, 0x01000e0e, 0x3a020001, 0x00000e0e, 0x00000007, 207 0x206a012e, 0x037216a0, 0x6c4000e2, 0x7ec84d2e, 0x31395d5e, 208 0x00058d20, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x00000898, 209 0x0000000b, 0xd00a8a0d, 0xefbc1010, 0x00000010, 0x00000010, 210 0x00000210, 0x000003ce, 0x0000001c, 0x00000c00, 0x05eea6d4, 211 0x00000444, 0x00000000, 0x00000000, 0x1883800a, 0x00000108, 212 0x0004a000, 0x7999aa0e, 0x00000000 213 }; 214 215 static const uint16_t ar9287_1_1_cm_regs[] = { 216 P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044), 217 P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800), 218 P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814), 219 P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040), 220 P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054), 221 P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230), 222 P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8), 223 P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238), 224 P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378), 225 P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8), 226 P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8), 227 P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738), 228 P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c), 229 P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc), 230 P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc), 231 P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c), 232 P(0x0147c), P(0x04030), P(0x0403c), P(0x04024), P(0x04060), 233 P(0x04064), P(0x07010), P(0x07020), P(0x07034), P(0x07038), 234 P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020), 235 P(0x08038), P(0x0803c), P(0x08048), P(0x08054), P(0x08058), 236 P(0x0805c), P(0x08060), P(0x08064), P(0x08070), P(0x080c0), 237 P(0x080c4), P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), 238 P(0x080d8), P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec), 239 P(0x080f0), P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100), 240 P(0x08104), P(0x08108), P(0x0810c), P(0x08110), P(0x08118), 241 P(0x0811c), P(0x08124), P(0x08128), P(0x0812c), P(0x08130), 242 P(0x08134), P(0x08138), P(0x0813c), P(0x08144), P(0x08168), 243 P(0x0816c), P(0x08170), P(0x08174), P(0x08178), P(0x0817c), 244 P(0x081c0), P(0x081c4), P(0x081d4), P(0x081ec), P(0x081f0), 245 P(0x081f4), P(0x081f8), P(0x081fc), P(0x08200), P(0x08204), 246 P(0x08208), P(0x0820c), P(0x08210), P(0x08214), P(0x08218), 247 P(0x0821c), P(0x08220), P(0x08224), P(0x08228), P(0x0822c), 248 P(0x08230), P(0x08234), P(0x08238), P(0x0823c), P(0x08240), 249 P(0x08244), P(0x08248), P(0x0824c), P(0x08250), P(0x08254), 250 P(0x08258), P(0x0825c), P(0x08260), P(0x08264), P(0x08270), 251 P(0x08274), P(0x08278), P(0x0827c), P(0x08284), P(0x08288), 252 P(0x0828c), P(0x08294), P(0x08298), P(0x0829c), P(0x08300), 253 P(0x08314), P(0x08328), P(0x0832c), P(0x08330), P(0x08334), 254 P(0x08338), P(0x0833c), P(0x08340), P(0x08344), P(0x08360), 255 P(0x08364), P(0x08368), P(0x08370), P(0x08374), P(0x08378), 256 P(0x0837c), P(0x08380), P(0x08384), P(0x08390), P(0x08394), 257 P(0x08398), P(0x0839c), P(0x083a0), P(0x09808), P(0x0980c), 258 P(0x09810), P(0x09814), P(0x0981c), P(0x0982c), P(0x09830), 259 P(0x0983c), P(0x0984c), P(0x0a84c), P(0x09854), P(0x09900), 260 P(0x09904), P(0x09908), P(0x0990c), P(0x09910), P(0x0991c), 261 P(0x09920), P(0x0a920), P(0x09928), P(0x0992c), P(0x09930), 262 P(0x0a930), P(0x09934), P(0x09938), P(0x0993c), P(0x09948), 263 P(0x0994c), P(0x09954), P(0x09958), P(0x09940), P(0x0c95c), 264 P(0x09970), P(0x09974), P(0x09978), P(0x0997c), P(0x099a0), 265 P(0x099a4), P(0x099a8), P(0x099ac), P(0x099b0), P(0x099b4), 266 P(0x099c4), P(0x099c8), P(0x099cc), P(0x099d0), P(0x099dc), 267 P(0x099e0), P(0x099e4), P(0x099e8), P(0x099ec), P(0x099f0), 268 P(0x099fc), P(0x0a208), P(0x0a210), P(0x0a214), P(0x0a218), 269 P(0x0a220), P(0x0a224), P(0x0a228), P(0x0a22c), P(0x0a234), 270 P(0x0a238), P(0x0a23c), P(0x0a240), P(0x0a244), P(0x0a248), 271 P(0x0a24c), P(0x0a254), P(0x0a258), P(0x0a25c), P(0x0a260), 272 P(0x0a264), P(0x0b264), P(0x0a268), P(0x0a26c), P(0x0b26c), 273 P(0x0d270), P(0x0a278), P(0x0a27c), P(0x0d35c), P(0x0d360), 274 P(0x0d364), P(0x0d368), P(0x0d36c), P(0x0d370), P(0x0d374), 275 P(0x0d378), P(0x0d37c), P(0x0d380), P(0x0d384), P(0x0a388), 276 P(0x0a38c), P(0x0a390), P(0x0a394), P(0x0a398), P(0x0b398), 277 P(0x0a39c), P(0x0a3c8), P(0x0a3cc), P(0x0a3d0), P(0x0a3d4), 278 P(0x0a3dc), P(0x0a3e0), P(0x0a3e4), P(0x0a3e8), P(0x0a3ec), 279 P(0x0a3f0), P(0x0a3f4), P(0x0b3f4), P(0x0a7d8), P(0x07800), 280 P(0x07804), P(0x07808), P(0x0780c), P(0x07810), P(0x07814), 281 P(0x07818), P(0x0781c), P(0x07820), P(0x07824), P(0x07828), 282 P(0x0782c), P(0x07830), P(0x07834), P(0x07838), P(0x0783c), 283 P(0x07840), P(0x07844), P(0x07848), P(0x07850), P(0x07854), 284 P(0x07858), P(0x0785c), P(0x07860), P(0x07864), P(0x07868), 285 P(0x0786c), P(0x07870), P(0x07874), P(0x07878), P(0x0787c), 286 P(0x07880), P(0x07884), P(0x07888), P(0x0788c), P(0x07890), 287 P(0x07894), P(0x07898), P(0x0789c), P(0x078a0), P(0x078a4), 288 P(0x078a8), P(0x078ac), P(0x078b0), P(0x078b4), P(0x078b8) 289 }; 290 291 static const uint32_t ar9287_1_1_cm_vals[] = { 292 0x00000000, 0x00020015, 0x00000005, 0x00000000, 0x00000008, 293 0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000, 294 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 295 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f, 296 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 297 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000, 298 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 299 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 300 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 301 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 302 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 303 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 304 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 305 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 306 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 307 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 308 0x00000000, 0x00000002, 0x00000002, 0x0000001f, 0x00000000, 309 0x00000000, 0x00000033, 0x00000000, 0x00000002, 0x000004c2, 310 0x00000000, 0x00000000, 0x00000000, 0x00000700, 0x00000000, 311 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 312 0x000fc78f, 0x0000000f, 0x00000000, 0x00000000, 0x2a80001a, 313 0x05dc01e0, 0x1f402710, 0x01f40000, 0x00001e00, 0x00000000, 314 0x00400000, 0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000, 315 0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00020000, 316 0x00000001, 0x00000052, 0x00000000, 0x00000168, 0x000100aa, 317 0x00003210, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 318 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 319 0x00000000, 0x18487320, 0xfaa4fa50, 0x00000100, 0x00000000, 320 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 321 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 322 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 323 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 324 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 325 0x0010f400, 0x00000100, 0x0001e800, 0x00000000, 0x00000000, 326 0x00000000, 0x400000ff, 0x00080922, 0x88a00010, 0x00000000, 327 0x40000000, 0x003e4180, 0x00000000, 0x0000002c, 0x0000002c, 328 0x000000ff, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 329 0x00000000, 0x00000000, 0x00000007, 0x00000302, 0x00000e00, 330 0x00ff0000, 0x00000000, 0x000107ff, 0x01c81043, 0xffffffff, 331 0xffffffff, 0x00000000, 0x00000000, 0x000000ff, 0x00000000, 332 0x00000000, 0xffffffff, 0xffffffff, 0x0fffffff, 0x0fffffff, 333 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xafe68e30, 334 0xfd14e000, 0x9c0a9f6b, 0x00000000, 0x0000a000, 0x00000000, 335 0x00200400, 0x0040233c, 0x0040233c, 0x00000044, 0x00000000, 336 0x00000000, 0x00000000, 0x00000000, 0x10002310, 0x10000fff, 337 0x04900000, 0x04900000, 0x00000001, 0x00000004, 0x00000000, 338 0x00000000, 0x1e1f2022, 0x0a0b0c0d, 0x00000000, 0x9280c00a, 339 0x00020028, 0x5f3ca3de, 0x0108ecff, 0x14750604, 0x004b6a8e, 340 0x990bb514, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 341 0x00000001, 0x201fff00, 0x0c6f0000, 0x03051000, 0x00000820, 342 0x06336f77, 0x6af6532f, 0x08f186c8, 0x00046384, 0x00000000, 343 0x00000000, 0xaaaaaaaa, 0x3c466478, 0x0cc80caa, 0x00000000, 344 0x00001042, 0x803e4788, 0x4080a333, 0x40206c10, 0x009c4060, 345 0x01834061, 0x00000400, 0x000003b5, 0x233f7180, 0x20202020, 346 0x20202020, 0x13c889af, 0x38490a20, 0x00000000, 0xfffffffc, 347 0x00000000, 0x00000000, 0x0cdbd380, 0x0f0f0f01, 0xdfa91f01, 348 0x00418a11, 0x00418a11, 0x00000000, 0x0e79e5c6, 0x0e79e5c6, 349 0x00820820, 0x1ce739ce, 0x050701ce, 0x07ffffef, 0x0fffffe7, 350 0x17ffffe5, 0x1fffffe4, 0x37ffffe3, 0x3fffffe3, 0x57ffffe3, 351 0x5fffffe2, 0x7fffffe2, 0x7f3c7bba, 0xf3307ff0, 0x0c000000, 352 0x20202020, 0x20202020, 0x1ce739ce, 0x000001ce, 0x000001ce, 353 0x00000001, 0x00000246, 0x20202020, 0x20202020, 0x20202020, 354 0x1ce739ce, 0x000001ce, 0x00000000, 0x18c43433, 0x00f70081, 355 0x01036a1e, 0x00000000, 0x00000000, 0x000003f1, 0x00000800, 356 0x6c35ffd2, 0x6db6c000, 0x6db6cb30, 0x6db6cb6c, 0x0501e200, 357 0x0094128d, 0x976ee392, 0xf75ff6fc, 0x00040000, 0xdb003012, 358 0x04924914, 0x21084210, 0x00140000, 0x0e4548d8, 0x54214514, 359 0x02025830, 0x71c0d388, 0x934934a8, 0x00000000, 0x00000800, 360 0x6c35ffd2, 0x6db6c000, 0x6db6cb30, 0x6db6cb6c, 0x0501e200, 361 0x0094128d, 0x976ee392, 0xf75ff6fc, 0x00040000, 0xdb003012, 362 0x04924914, 0x21084210, 0x001b6db0, 0x00376b63, 0x06db6db6, 363 0x006d8000, 0x48100000, 0x00000000, 0x08000000, 0x0007ffd8, 364 0x0007ffd8, 0x001c0020, 0x00060aeb, 0x40008080, 0x2a850160 365 }; 366 367 static const struct athn_ini ar9287_1_1_ini = { 368 nitems(ar9287_1_1_regs), 369 ar9287_1_1_regs, 370 NULL, /* 2GHz only. */ 371 NULL, /* 2GHz only. */ 372 ar9287_1_1_vals_2g40, 373 ar9287_1_1_vals_2g20, 374 nitems(ar9287_1_1_cm_regs), 375 ar9287_1_1_cm_regs, 376 ar9287_1_1_cm_vals 377 }; 378 379 /* 380 * AR9287 1.1 Tx gains. 381 */ 382 static const uint16_t ar9287_1_1_tx_gain_regs[] = { 383 P(0x0a300), P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310), 384 P(0x0a314), P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324), 385 P(0x0a328), P(0x0a32c), P(0x0a330), P(0x0a334), P(0x0a338), 386 P(0x0a33c), P(0x0a340), P(0x0a344), P(0x0a348), P(0x0a34c), 387 P(0x0a350), P(0x0a354), P(0x0a780), P(0x0a784), P(0x0a788), 388 P(0x0a78c), P(0x0a790), P(0x0a794), P(0x0a798), P(0x0a79c), 389 P(0x0a7a0), P(0x0a7a4), P(0x0a7a8), P(0x0a7ac), P(0x0a7b0), 390 P(0x0a7b4), P(0x0a7b8), P(0x0a7bc), P(0x0a7c0), P(0x0a7c4), 391 P(0x0a7c8), P(0x0a7cc), P(0x0a7d0), P(0x0a7d4), P(0x0a274) 392 }; 393 394 static const uint32_t ar9287_1_1_tx_gain_vals_2g[] = { 395 0x00000000, 0x00004002, 0x00008004, 0x0000c00a, 0x0001000c, 396 0x0001420b, 0x0001824a, 0x0001c44a, 0x0002064a, 0x0002484a, 397 0x00028a4a, 0x0002cc4a, 0x00030e4a, 0x00034e8a, 0x00038e8c, 398 0x0003cecc, 0x00040ed4, 0x00044edc, 0x00048ede, 0x0004cf1e, 399 0x00050f5e, 0x00054f9e, 0x00000062, 0x00004064, 0x000080a4, 400 0x0000c0aa, 0x000100ac, 0x000140b4, 0x000180f4, 0x0001c134, 401 0x00020174, 0x0002417c, 0x0002817e, 0x0002c1be, 0x000301fe, 402 0x000301fe, 0x000301fe, 0x000301fe, 0x000301fe, 0x000301fe, 403 0x000301fe, 0x000301fe, 0x000301fe, 0x000301fe, 0x0a1aa000 404 }; 405 406 static const struct athn_gain ar9287_1_1_tx_gain = { 407 nitems(ar9287_1_1_tx_gain_regs), 408 ar9287_1_1_tx_gain_regs, 409 NULL, /* 2GHz only. */ 410 ar9287_1_1_tx_gain_vals_2g 411 }; 412 413 /* 414 * AR9287 1.1 Rx gains. 415 */ 416 static const uint16_t ar9287_1_1_rx_gain_regs[] = { 417 P(0x09a00), P(0x09a04), P(0x09a08), P(0x09a0c), P(0x09a10), 418 P(0x09a14), P(0x09a18), P(0x09a1c), P(0x09a20), P(0x09a24), 419 P(0x09a28), P(0x09a2c), P(0x09a30), P(0x09a34), P(0x09a38), 420 P(0x09a3c), P(0x09a40), P(0x09a44), P(0x09a48), P(0x09a4c), 421 P(0x09a50), P(0x09a54), P(0x09a58), P(0x09a5c), P(0x09a60), 422 P(0x09a64), P(0x09a68), P(0x09a6c), P(0x09a70), P(0x09a74), 423 P(0x09a78), P(0x09a7c), P(0x09a80), P(0x09a84), P(0x09a88), 424 P(0x09a8c), P(0x09a90), P(0x09a94), P(0x09a98), P(0x09a9c), 425 P(0x09aa0), P(0x09aa4), P(0x09aa8), P(0x09aac), P(0x09ab0), 426 P(0x09ab4), P(0x09ab8), P(0x09abc), P(0x09ac0), P(0x09ac4), 427 P(0x09ac8), P(0x09acc), P(0x09ad0), P(0x09ad4), P(0x09ad8), 428 P(0x09adc), P(0x09ae0), P(0x09ae4), P(0x09ae8), P(0x09aec), 429 P(0x09af0), P(0x09af4), P(0x09af8), P(0x09afc), P(0x09b00), 430 P(0x09b04), P(0x09b08), P(0x09b0c), P(0x09b10), P(0x09b14), 431 P(0x09b18), P(0x09b1c), P(0x09b20), P(0x09b24), P(0x09b28), 432 P(0x09b2c), P(0x09b30), P(0x09b34), P(0x09b38), P(0x09b3c), 433 P(0x09b40), P(0x09b44), P(0x09b48), P(0x09b4c), P(0x09b50), 434 P(0x09b54), P(0x09b58), P(0x09b5c), P(0x09b60), P(0x09b64), 435 P(0x09b68), P(0x09b6c), P(0x09b70), P(0x09b74), P(0x09b78), 436 P(0x09b7c), P(0x09b80), P(0x09b84), P(0x09b88), P(0x09b8c), 437 P(0x09b90), P(0x09b94), P(0x09b98), P(0x09b9c), P(0x09ba0), 438 P(0x09ba4), P(0x09ba8), P(0x09bac), P(0x09bb0), P(0x09bb4), 439 P(0x09bb8), P(0x09bbc), P(0x09bc0), P(0x09bc4), P(0x09bc8), 440 P(0x09bcc), P(0x09bd0), P(0x09bd4), P(0x09bd8), P(0x09bdc), 441 P(0x09be0), P(0x09be4), P(0x09be8), P(0x09bec), P(0x09bf0), 442 P(0x09bf4), P(0x09bf8), P(0x09bfc), P(0x0aa00), P(0x0aa04), 443 P(0x0aa08), P(0x0aa0c), P(0x0aa10), P(0x0aa14), P(0x0aa18), 444 P(0x0aa1c), P(0x0aa20), P(0x0aa24), P(0x0aa28), P(0x0aa2c), 445 P(0x0aa30), P(0x0aa34), P(0x0aa38), P(0x0aa3c), P(0x0aa40), 446 P(0x0aa44), P(0x0aa48), P(0x0aa4c), P(0x0aa50), P(0x0aa54), 447 P(0x0aa58), P(0x0aa5c), P(0x0aa60), P(0x0aa64), P(0x0aa68), 448 P(0x0aa6c), P(0x0aa70), P(0x0aa74), P(0x0aa78), P(0x0aa7c), 449 P(0x0aa80), P(0x0aa84), P(0x0aa88), P(0x0aa8c), P(0x0aa90), 450 P(0x0aa94), P(0x0aa98), P(0x0aa9c), P(0x0aaa0), P(0x0aaa4), 451 P(0x0aaa8), P(0x0aaac), P(0x0aab0), P(0x0aab4), P(0x0aab8), 452 P(0x0aabc), P(0x0aac0), P(0x0aac4), P(0x0aac8), P(0x0aacc), 453 P(0x0aad0), P(0x0aad4), P(0x0aad8), P(0x0aadc), P(0x0aae0), 454 P(0x0aae4), P(0x0aae8), P(0x0aaec), P(0x0aaf0), P(0x0aaf4), 455 P(0x0aaf8), P(0x0aafc), P(0x0ab00), P(0x0ab04), P(0x0ab08), 456 P(0x0ab0c), P(0x0ab10), P(0x0ab14), P(0x0ab18), P(0x0ab1c), 457 P(0x0ab20), P(0x0ab24), P(0x0ab28), P(0x0ab2c), P(0x0ab30), 458 P(0x0ab34), P(0x0ab38), P(0x0ab3c), P(0x0ab40), P(0x0ab44), 459 P(0x0ab48), P(0x0ab4c), P(0x0ab50), P(0x0ab54), P(0x0ab58), 460 P(0x0ab5c), P(0x0ab60), P(0x0ab64), P(0x0ab68), P(0x0ab6c), 461 P(0x0ab70), P(0x0ab74), P(0x0ab78), P(0x0ab7c), P(0x0ab80), 462 P(0x0ab84), P(0x0ab88), P(0x0ab8c), P(0x0ab90), P(0x0ab94), 463 P(0x0ab98), P(0x0ab9c), P(0x0aba0), P(0x0aba4), P(0x0aba8), 464 P(0x0abac), P(0x0abb0), P(0x0abb4), P(0x0abb8), P(0x0abbc), 465 P(0x0abc0), P(0x0abc4), P(0x0abc8), P(0x0abcc), P(0x0abd0), 466 P(0x0abd4), P(0x0abd8), P(0x0abdc), P(0x0abe0), P(0x0abe4), 467 P(0x0abe8), P(0x0abec), P(0x0abf0), P(0x0abf4), P(0x0abf8), 468 P(0x0abfc), P(0x09848), P(0x0a848) 469 }; 470 471 static const uint32_t ar9287_1_1_rx_gain_vals_2g[] = { 472 0x0000a120, 0x0000a124, 0x0000a128, 0x0000a12c, 0x0000a130, 473 0x0000a194, 0x0000a198, 0x0000a20c, 0x0000a210, 0x0000a284, 474 0x0000a288, 0x0000a28c, 0x0000a290, 0x0000a294, 0x0000a2a0, 475 0x0000a2a4, 0x0000a2a8, 0x0000a2ac, 0x0000a2b0, 0x0000a2b4, 476 0x0000a2b8, 0x0000a2c4, 0x0000a708, 0x0000a70c, 0x0000a710, 477 0x0000ab04, 0x0000ab08, 0x0000ab0c, 0x0000ab10, 0x0000ab14, 478 0x0000ab18, 0x0000ab8c, 0x0000ab90, 0x0000ab94, 0x0000ab98, 479 0x0000aba4, 0x0000aba8, 0x0000cb04, 0x0000cb08, 0x0000cb0c, 480 0x0000cb10, 0x0000cb14, 0x0000cb18, 0x0000cb8c, 0x0000cb90, 481 0x0000cf18, 0x0000cf24, 0x0000cf28, 0x0000d314, 0x0000d318, 482 0x0000d38c, 0x0000d390, 0x0000d394, 0x0000d398, 0x0000d3a4, 483 0x0000d3a8, 0x0000d3ac, 0x0000d3b0, 0x0000f380, 0x0000f384, 484 0x0000f388, 0x0000f710, 0x0000f714, 0x0000f718, 0x0000fb10, 485 0x0000fb14, 0x0000fb18, 0x0000fb8c, 0x0000fb90, 0x0000fb94, 486 0x0000ff8c, 0x0000ff90, 0x0000ff94, 0x0000ffa0, 0x0000ffa4, 487 0x0000ffa8, 0x0000ffac, 0x0000ffb0, 0x0000ffb4, 0x0000ffa1, 488 0x0000ffa5, 0x0000ffa9, 0x0000ffad, 0x0000ffb1, 0x0000ffb5, 489 0x0000ffb9, 0x0000ffc5, 0x0000ffc9, 0x0000ffcd, 0x0000ffd1, 490 0x0000ffd5, 0x0000ffc2, 0x0000ffc6, 0x0000ffca, 0x0000ffce, 491 0x0000ffd2, 0x0000ffd6, 0x0000ffda, 0x0000ffc7, 0x0000ffcb, 492 0x0000ffcf, 0x0000ffd3, 0x0000ffd7, 0x0000ffdb, 0x0000ffdb, 493 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 494 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 495 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 496 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 497 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000a120, 0x0000a124, 498 0x0000a128, 0x0000a12c, 0x0000a130, 0x0000a194, 0x0000a198, 499 0x0000a20c, 0x0000a210, 0x0000a284, 0x0000a288, 0x0000a28c, 500 0x0000a290, 0x0000a294, 0x0000a2a0, 0x0000a2a4, 0x0000a2a8, 501 0x0000a2ac, 0x0000a2b0, 0x0000a2b4, 0x0000a2b8, 0x0000a2c4, 502 0x0000a708, 0x0000a70c, 0x0000a710, 0x0000ab04, 0x0000ab08, 503 0x0000ab0c, 0x0000ab10, 0x0000ab14, 0x0000ab18, 0x0000ab8c, 504 0x0000ab90, 0x0000ab94, 0x0000ab98, 0x0000aba4, 0x0000aba8, 505 0x0000cb04, 0x0000cb08, 0x0000cb0c, 0x0000cb10, 0x0000cb14, 506 0x0000cb18, 0x0000cb8c, 0x0000cb90, 0x0000cf18, 0x0000cf24, 507 0x0000cf28, 0x0000d314, 0x0000d318, 0x0000d38c, 0x0000d390, 508 0x0000d394, 0x0000d398, 0x0000d3a4, 0x0000d3a8, 0x0000d3ac, 509 0x0000d3b0, 0x0000f380, 0x0000f384, 0x0000f388, 0x0000f710, 510 0x0000f714, 0x0000f718, 0x0000fb10, 0x0000fb14, 0x0000fb18, 511 0x0000fb8c, 0x0000fb90, 0x0000fb94, 0x0000ff8c, 0x0000ff90, 512 0x0000ff94, 0x0000ffa0, 0x0000ffa4, 0x0000ffa8, 0x0000ffac, 513 0x0000ffb0, 0x0000ffb4, 0x0000ffa1, 0x0000ffa5, 0x0000ffa9, 514 0x0000ffad, 0x0000ffb1, 0x0000ffb5, 0x0000ffb9, 0x0000ffc5, 515 0x0000ffc9, 0x0000ffcd, 0x0000ffd1, 0x0000ffd5, 0x0000ffc2, 516 0x0000ffc6, 0x0000ffca, 0x0000ffce, 0x0000ffd2, 0x0000ffd6, 517 0x0000ffda, 0x0000ffc7, 0x0000ffcb, 0x0000ffcf, 0x0000ffd3, 518 0x0000ffd7, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 519 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 520 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 521 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 522 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 523 0x0000ffdb, 0x00001067, 0x00001067 524 }; 525 526 static const struct athn_gain ar9287_1_1_rx_gain = { 527 nitems(ar9287_1_1_rx_gain_regs), 528 ar9287_1_1_rx_gain_regs, 529 NULL, /* 2GHz only. */ 530 ar9287_1_1_rx_gain_vals_2g 531 }; 532