xref: /openbsd/sys/dev/ic/ar9285reg.h (revision 9d1f2812)
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