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