xref: /openbsd/sys/dev/ic/ar5416reg.h (revision 9d1f2812)
1 /*	$OpenBSD: ar5416reg.h,v 1.7 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 AR5416_MAX_CHAINS	3
21 
22 #define AR5416_PHY_CCA_MIN_GOOD_VAL_2GHZ	(-100)
23 #define AR5416_PHY_CCA_MIN_GOOD_VAL_5GHZ	(-110)
24 #define AR5416_PHY_CCA_MAX_GOOD_VAL_2GHZ	(-80)
25 #define AR5416_PHY_CCA_MAX_GOOD_VAL_5GHZ	(-90)
26 
27 /*
28  * ROM layout used by AR5416, AR9160 and AR9280.
29  */
30 #define AR5416_EEP_START_LOC		256
31 #define AR5416_NUM_5G_CAL_PIERS		8
32 #define AR5416_NUM_2G_CAL_PIERS		4
33 #define AR5416_NUM_5G_20_TARGET_POWERS	8
34 #define AR5416_NUM_5G_40_TARGET_POWERS	8
35 #define AR5416_NUM_2G_CCK_TARGET_POWERS	3
36 #define AR5416_NUM_2G_20_TARGET_POWERS	4
37 #define AR5416_NUM_2G_40_TARGET_POWERS	4
38 #define AR5416_NUM_CTLS			24
39 #define AR5416_NUM_BAND_EDGES		8
40 #define AR5416_NUM_PD_GAINS		4
41 #define AR5416_PD_GAINS_IN_MASK		4
42 #define AR5416_PD_GAIN_ICEPTS		5
43 
44 struct ar5416_base_eep_header {
45 	uint16_t	length;
46 	uint16_t	checksum;
47 	uint16_t	version;
48 	uint8_t		opCapFlags;
49 	uint8_t		eepMisc;
50 	uint16_t	regDmn[2];
51 	uint8_t		macAddr[6];
52 	uint8_t		rxMask;
53 	uint8_t		txMask;
54 	uint16_t	rfSilent;
55 	uint16_t	blueToothOptions;
56 	uint16_t	deviceCap;
57 	uint32_t	binBuildNumber;
58 	uint8_t		deviceType;
59 	/* End of common header. */
60 	uint8_t		pwdclkind;
61 	uint8_t		fastClk5g;
62 	uint8_t		divChain;
63 	uint8_t		rxGainType;
64 #define AR5416_EEP_RXGAIN_23DB_BACKOFF	0
65 #define AR5416_EEP_RXGAIN_13DB_BACKOFF	1
66 #define AR5416_EEP_RXGAIN_ORIG		2
67 
68 	uint8_t		dacHiPwrMode_5G;
69 	uint8_t		openLoopPwrCntl;
70 	uint8_t		dacLpMode;
71 	uint8_t		txGainType;
72 	uint8_t		rcChainMask;
73 	uint8_t		desiredScaleCCK;
74 	uint8_t		pwrTableOffset;
75 	uint8_t		frac_n_5g;
76 	uint8_t		futureBase[21];
77 } __packed;
78 
79 struct ar5416_modal_eep_header {
80 	uint32_t	antCtrlChain[AR5416_MAX_CHAINS];
81 	uint32_t	antCtrlCommon;
82 	uint8_t		antennaGainCh[AR5416_MAX_CHAINS];
83 	uint8_t		switchSettling;
84 	uint8_t		txRxAttenCh[AR5416_MAX_CHAINS];
85 	uint8_t		rxTxMarginCh[AR5416_MAX_CHAINS];
86 	uint8_t		adcDesiredSize;
87 	uint8_t		pgaDesiredSize;
88 	uint8_t		xlnaGainCh[AR5416_MAX_CHAINS];
89 	uint8_t		txEndToXpaOff;
90 	uint8_t		txEndToRxOn;
91 	uint8_t		txFrameToXpaOn;
92 	uint8_t		thresh62;
93 	uint8_t		noiseFloorThreshCh[AR5416_MAX_CHAINS];
94 	uint8_t		xpdGain;
95 	uint8_t		xpd;
96 	uint8_t		iqCalICh[AR5416_MAX_CHAINS];
97 	uint8_t		iqCalQCh[AR5416_MAX_CHAINS];
98 	uint8_t		pdGainOverlap;
99 	uint8_t		ob;
100 	uint8_t		db;
101 	uint8_t		xpaBiasLvl;
102 	uint8_t		pwrDecreaseFor2Chain;
103 	uint8_t		pwrDecreaseFor3Chain;
104 	uint8_t		txFrameToDataStart;
105 	uint8_t		txFrameToPaOn;
106 	uint8_t		ht40PowerIncForPdadc;
107 	uint8_t		bswAtten[AR5416_MAX_CHAINS];
108 	uint8_t		bswMargin[AR5416_MAX_CHAINS];
109 	uint8_t		swSettleHt40;
110 	uint8_t		xatten2Db[AR5416_MAX_CHAINS];
111 	uint8_t		xatten2Margin[AR5416_MAX_CHAINS];
112 	uint8_t		ob_ch1;
113 	uint8_t		db_ch1;
114 	uint8_t		flagBits;
115 #define AR5416_EEP_FLAG_USEANT1		0x01
116 #define AR5416_EEP_FLAG_FORCEXPAON	0x02
117 #define AR5416_EEP_FLAG_LOCALBIAS	0x04
118 #define AR5416_EEP_FLAG_FEMBANDSELECT	0x08
119 #define AR5416_EEP_FLAG_XLNABUFIN	0x10
120 #define AR5416_EEP_FLAG_XLNAISEL_M	0x60
121 #define AR5416_EEP_FLAG_XLNAISEL_S	5
122 #define AR5416_EEP_FLAG_XLNABUFMODE	0x80
123 
124 	uint8_t		miscBits;
125 #define AR5416_EEP_MISC_TX_DAC_SCALE_CCK_M	0x03
126 #define AR5416_EEP_MISC_TX_DAC_SCALE_CCK_S	0
127 #define AR5416_EEP_MISC_TX_CLIP_M		0xfc
128 #define AR5416_EEP_MISC_TX_CLIP_S		2
129 
130 	uint16_t	xpaBiasLvlFreq[3];
131 	uint8_t		futureModal[6];
132 	struct		ar_spur_chan spurChans[AR_EEPROM_MODAL_SPURS];
133 } __packed;
134 
135 struct ar5416_cal_data_per_freq {
136 	uint8_t	pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
137 	uint8_t	vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
138 } __packed;
139 
140 struct ar5416_cal_ctl_data {
141 	struct ar_cal_ctl_edges
142 	    ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES];
143 } __packed;
144 
145 struct ar5416_eeprom {
146 	struct	ar5416_base_eep_header baseEepHeader;
147 	uint8_t custData[64];
148 	struct	ar5416_modal_eep_header modalHeader[2];
149 	uint8_t calFreqPier5G[AR5416_NUM_5G_CAL_PIERS];
150 	uint8_t calFreqPier2G[AR5416_NUM_2G_CAL_PIERS];
151 	struct	ar5416_cal_data_per_freq
152 	    calPierData5G[AR5416_MAX_CHAINS][AR5416_NUM_5G_CAL_PIERS];
153 	struct	ar5416_cal_data_per_freq
154 	    calPierData2G[AR5416_MAX_CHAINS][AR5416_NUM_2G_CAL_PIERS];
155 	struct	ar_cal_target_power_leg
156 	    calTargetPower5G[AR5416_NUM_5G_20_TARGET_POWERS];
157 	struct	ar_cal_target_power_ht
158 	    calTargetPower5GHT20[AR5416_NUM_5G_20_TARGET_POWERS];
159 	struct	ar_cal_target_power_ht
160 	    calTargetPower5GHT40[AR5416_NUM_5G_40_TARGET_POWERS];
161 	struct	ar_cal_target_power_leg
162 	    calTargetPowerCck[AR5416_NUM_2G_CCK_TARGET_POWERS];
163 	struct	ar_cal_target_power_leg
164 	    calTargetPower2G[AR5416_NUM_2G_20_TARGET_POWERS];
165 	struct	ar_cal_target_power_ht
166 	    calTargetPower2GHT20[AR5416_NUM_2G_20_TARGET_POWERS];
167 	struct	ar_cal_target_power_ht
168 	    calTargetPower2GHT40[AR5416_NUM_2G_40_TARGET_POWERS];
169 	uint8_t	ctlIndex[AR5416_NUM_CTLS];
170 	struct	ar5416_cal_ctl_data ctlData[AR5416_NUM_CTLS];
171 	uint8_t padding;
172 } __packed;
173 
174 /* Macro to "pack" registers to 16-bit to save some .rodata space. */
175 #define P(x)	(x)
176 
177 /*
178  * AR5416 initialization values.
179  */
180 static const uint16_t ar5416_regs[] = {
181 	P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014),
182 	P(0x0801c), P(0x08120), P(0x081d0), P(0x09804), P(0x09820),
183 	P(0x09824), P(0x09828), P(0x09834), P(0x09838), P(0x09844),
184 	P(0x09848), P(0x0a848), P(0x0b848), P(0x09850), P(0x09858),
185 	P(0x0985c), P(0x09860), P(0x09864), P(0x09868), P(0x0986c),
186 	P(0x09914), P(0x09918), P(0x09924), P(0x09944), P(0x09960),
187 	P(0x0a960), P(0x0b960), P(0x09964), P(0x099bc), P(0x099c0),
188 	P(0x099c4), P(0x099c8), P(0x099cc), P(0x099d0), P(0x099d4),
189 	P(0x099d8), P(0x0a204), P(0x0a208), P(0x0a20c), P(0x0b20c),
190 	P(0x0c20c), P(0x0a21c), P(0x0a230), P(0x0a274), P(0x0a300),
191 	P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310), P(0x0a314),
192 	P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324), P(0x0a328),
193 	P(0x0a32c), P(0x0a330), P(0x0a334)
194 };
195 
196 static const uint32_t ar5416_vals_5g20[] = {
197 	0x00000230, 0x00000168, 0x00000e60, 0x0000a000, 0x03e803e8,
198 	0x128d93a7, 0x08f04800, 0x00003210, 0x00000300, 0x02020200,
199 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x1372161e,
200 	0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6c48b4e0, 0x7ec82d2e,
201 	0x31395d5e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081,
202 	0x000007d0, 0x000001b8, 0xd0058a0b, 0xffb81020, 0x00000900,
203 	0x00000900, 0x00000900, 0x00000000, 0x001a0a00, 0x038919be,
204 	0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000,
205 	0x00000000, 0x00000880, 0xd6be4788, 0x002ec1e0, 0x002ec1e0,
206 	0x002ec1e0, 0x1883800a, 0x00000000, 0x0a1a9caa, 0x18010000,
207 	0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f, 0x7a4f6e1b,
208 	0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbd07, 0x0000d7bf,
209 	0x00000000, 0x00000000, 0x00000000
210 };
211 
212 static const uint32_t ar5416_vals_5g40[] = {
213 	0x00000460, 0x000002d0, 0x00001cc0, 0x00014000, 0x07d007d0,
214 	0x128d93cf, 0x08f04800, 0x00003210, 0x000003c4, 0x02020200,
215 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x1372161e,
216 	0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6d48b4e0, 0x7ec82d2e,
217 	0x3139605e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081,
218 	0x00000fa0, 0x00000370, 0xd0058a0b, 0xffb81020, 0x00000900,
219 	0x00000900, 0x00000900, 0x00000000, 0x001a0a00, 0x038919be,
220 	0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000,
221 	0x00000000, 0x00000880, 0xd6be4788, 0x002ec1e0, 0x002ec1e0,
222 	0x002ec1e0, 0x1883800a, 0x00000000, 0x0a1a9caa, 0x18010000,
223 	0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f, 0x7a4f6e1b,
224 	0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbcbf, 0x0000d7bf,
225 	0x00000000, 0x00000000, 0x00000000
226 };
227 
228 static const uint32_t ar5416_vals_2g40[] = {
229 	0x000002c0, 0x00000318, 0x00007c70, 0x00016000, 0x10801600,
230 	0x12e013d7, 0x08f04810, 0x0000320a, 0x000003c4, 0x02020200,
231 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x137216a0,
232 	0x00197a68, 0x00197a68, 0x00197a68, 0x6d48b0de, 0x7ec82d2e,
233 	0x3139605e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081,
234 	0x00001130, 0x00000268, 0xd0058a0b, 0xffb81020, 0x00012d80,
235 	0x00012d80, 0x00012d80, 0x00001120, 0x001a0a00, 0x038919be,
236 	0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000,
237 	0x00000000, 0x00000880, 0xd03e4788, 0x002ac120, 0x002ac120,
238 	0x002ac120, 0x1883800a, 0x00000210, 0x0a1a7caa, 0x18010000,
239 	0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b, 0x845b7a5a,
240 	0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f, 0x00000000,
241 	0x00000000, 0x00000000, 0x00000000
242 };
243 
244 static const uint32_t ar5416_vals_2g20[] = {
245 	0x00000160, 0x0000018c, 0x00003e38, 0x0000b000, 0x08400b00,
246 	0x12e013ab, 0x08f04810, 0x0000320a, 0x00000300, 0x02020200,
247 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x137216a0,
248 	0x00197a68, 0x00197a68, 0x00197a68, 0x6c48b0de, 0x7ec82d2e,
249 	0x31395d5e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081,
250 	0x00000898, 0x00000134, 0xd0058a0b, 0xffb81020, 0x00012d80,
251 	0x00012d80, 0x00012d80, 0x00001120, 0x001a0a00, 0x038919be,
252 	0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000,
253 	0x00000000, 0x00000880, 0xd03e4788, 0x002ac120, 0x002ac120,
254 	0x002ac120, 0x1883800a, 0x00000108, 0x0a1a7caa, 0x18010000,
255 	0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b, 0x845b7a5a,
256 	0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f, 0x00000000,
257 	0x00000000, 0x00000000, 0x00000000
258 };
259 
260 static const uint16_t ar5416_cm_regs[] = {
261 	P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044),
262 	P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800),
263 	P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814),
264 	P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040),
265 	P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054),
266 	P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230),
267 	P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8),
268 	P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238),
269 	P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378),
270 	P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8),
271 	P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8),
272 	P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738),
273 	P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c),
274 	P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc),
275 	P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc),
276 	P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c),
277 	P(0x0147c), P(0x04030), P(0x0403c), P(0x07010), P(0x07038),
278 	P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020),
279 	P(0x08038), P(0x0803c), P(0x08048), P(0x08054), P(0x08058),
280 	P(0x0805c), P(0x08060), P(0x08064), P(0x080c0), P(0x080c4),
281 	P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8),
282 	P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec), P(0x080f0),
283 	P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100), P(0x08104),
284 	P(0x08108), P(0x0810c), P(0x08110), P(0x08118), P(0x0811c),
285 	P(0x08124), P(0x08128), P(0x0812c), P(0x08130), P(0x08134),
286 	P(0x08138), P(0x0813c), P(0x08144), P(0x08168), P(0x0816c),
287 	P(0x08170), P(0x08174), P(0x08178), P(0x0817c), P(0x081c4),
288 	P(0x081ec), P(0x081f0), P(0x081f4), P(0x081f8), P(0x081fc),
289 	P(0x08200), P(0x08204), P(0x08208), P(0x0820c), P(0x08210),
290 	P(0x08214), P(0x08218), P(0x0821c), P(0x08220), P(0x08224),
291 	P(0x08228), P(0x0822c), P(0x08230), P(0x08234), P(0x08238),
292 	P(0x0823c), P(0x08240), P(0x08244), P(0x08248), P(0x0824c),
293 	P(0x08250), P(0x08254), P(0x08258), P(0x0825c), P(0x08260),
294 	P(0x08264), P(0x08270), P(0x08274), P(0x08278), P(0x0827c),
295 	P(0x08284), P(0x08288), P(0x0828c), P(0x08294), P(0x08298),
296 	P(0x08300), P(0x08304), P(0x08308), P(0x0830c), P(0x08310),
297 	P(0x08314), P(0x08318), P(0x08328), P(0x0832c), P(0x08330),
298 	P(0x08334), P(0x08338), P(0x0833c), P(0x08340), P(0x09808),
299 	P(0x0980c), P(0x09810), P(0x09814), P(0x0981c), P(0x0982c),
300 	P(0x09830), P(0x0983c), P(0x09840), P(0x0984c), P(0x09854),
301 	P(0x09900), P(0x09904), P(0x09908), P(0x0990c), P(0x0991c),
302 	P(0x09920), P(0x0a920), P(0x0b920), P(0x09928), P(0x0992c),
303 	P(0x09934), P(0x09938), P(0x0993c), P(0x09948), P(0x0994c),
304 	P(0x09954), P(0x09958), P(0x0c95c), P(0x0c968), P(0x09970),
305 	P(0x09974), P(0x09978), P(0x0997c), P(0x09980), P(0x09984),
306 	P(0x09988), P(0x0998c), P(0x09990), P(0x09994), P(0x09998),
307 	P(0x0999c), P(0x099a0), P(0x099a4), P(0x099a8), P(0x099ac),
308 	P(0x099b0), P(0x099dc), P(0x099e0), P(0x099e4), P(0x099e8),
309 	P(0x099ec), P(0x099fc), P(0x09b00), P(0x09b04), P(0x09b08),
310 	P(0x09b0c), P(0x09b10), P(0x09b14), P(0x09b18), P(0x09b1c),
311 	P(0x09b20), P(0x09b24), P(0x09b28), P(0x09b2c), P(0x09b30),
312 	P(0x09b34), P(0x09b38), P(0x09b3c), P(0x09b40), P(0x09b44),
313 	P(0x09b48), P(0x09b4c), P(0x09b50), P(0x09b54), P(0x09b58),
314 	P(0x09b5c), P(0x09b60), P(0x09b64), P(0x09b68), P(0x09b6c),
315 	P(0x09b70), P(0x09b74), P(0x09b78), P(0x09b7c), P(0x09b80),
316 	P(0x09b84), P(0x09b88), P(0x09b8c), P(0x09b90), P(0x09b94),
317 	P(0x09b98), P(0x09b9c), P(0x09ba0), P(0x09ba4), P(0x09ba8),
318 	P(0x09bac), P(0x09bb0), P(0x09bb4), P(0x09bb8), P(0x09bbc),
319 	P(0x09bc0), P(0x09bc4), P(0x09bc8), P(0x09bcc), P(0x09bd0),
320 	P(0x09bd4), P(0x09bd8), P(0x09bdc), P(0x09be0), P(0x09be4),
321 	P(0x09be8), P(0x09bec), P(0x09bf0), P(0x09bf4), P(0x09bf8),
322 	P(0x09bfc), P(0x0a210), P(0x0a214), P(0x0a218), P(0x0a220),
323 	P(0x0a224), P(0x0a228), P(0x0a22c), P(0x0a234), P(0x0a238),
324 	P(0x0a23c), P(0x0a240), P(0x0a244), P(0x0a248), P(0x0a24c),
325 	P(0x0a250), P(0x0a254), P(0x0a258), P(0x0a25c), P(0x0a260),
326 	P(0x0a268), P(0x0a26c), P(0x0b26c), P(0x0c26c), P(0x0d270),
327 	P(0x0a278), P(0x0a27c), P(0x0a338), P(0x0a33c), P(0x0a340),
328 	P(0x0a344), P(0x0a348), P(0x0a34c), P(0x0a350), P(0x0a354),
329 	P(0x0a358), P(0x0d35c), P(0x0d360), P(0x0d364), P(0x0d368),
330 	P(0x0d36c), P(0x0d370), P(0x0d374), P(0x0d378), P(0x0d37c),
331 	P(0x0d380), P(0x0d384), P(0x0a388), P(0x0a38c), P(0x0a390),
332 	P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0), P(0x0a3a4),
333 	P(0x0a3a8), P(0x0a3ac), P(0x0a3b0), P(0x0a3b4), P(0x0a3b8),
334 	P(0x0a3bc), P(0x0a3c0), P(0x0a3c4), P(0x0a3c8), P(0x0a3cc),
335 	P(0x0a3d0), P(0x0a3d4), P(0x0a3dc), P(0x0a3e0)
336 };
337 
338 static const uint32_t ar5416_cm_vals[] = {
339 	0x00000000, 0x00020015, 0x00000005, 0x00000000, 0x00000008,
340 	0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000,
341 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
342 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f,
343 	0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
344 	0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000,
345 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
346 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
347 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
348 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
349 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
350 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
351 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
352 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
353 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
354 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
355 	0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x000004c2,
356 	0x00000000, 0x00000000, 0x00000000, 0x00000700, 0x00000000,
357 	0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000,
358 	0x000fc78f, 0x0000000f, 0x00000000, 0x2a82301a, 0x05dc01e0,
359 	0x1f402710, 0x01f40000, 0x00001e00, 0x00000000, 0x00400000,
360 	0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000, 0x00000000,
361 	0x00000000, 0x00000000, 0x00020000, 0x00020000, 0x00000001,
362 	0x00000052, 0x00000000, 0x00000168, 0x000100aa, 0x00003210,
363 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
364 	0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
365 	0x32143320, 0xfaa4fa50, 0x00000100, 0x00000000, 0x00000000,
366 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
367 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
368 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
369 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
370 	0x00000000, 0x00100000, 0x0010f400, 0x00000100, 0x0001e800,
371 	0x00000000, 0x00000000, 0x00000000, 0x400000ff, 0x00080922,
372 	0x88000010, 0x00000000, 0x40000000, 0x003e4180, 0x00000000,
373 	0x0000002c, 0x0000002c, 0x00000000, 0x00000000, 0x00000000,
374 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
375 	0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000302,
376 	0x00000e00, 0x00070000, 0x00000000, 0x000107ff, 0x00000000,
377 	0xad848e19, 0x7d14e000, 0x9c0a9f6b, 0x00000000, 0x0000a000,
378 	0x00000000, 0x00200400, 0x206a002e, 0x1284233c, 0x00000859,
379 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000fff,
380 	0x05100000, 0x05100000, 0x05100000, 0x00000001, 0x00000004,
381 	0x1e1f2022, 0x0a0b0c0d, 0x00000000, 0x9280b212, 0x00020028,
382 	0x5d50e188, 0x00081fff, 0x004b6a8e, 0x000003ce, 0x190fb515,
383 	0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
384 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
385 	0x00000000, 0x00000000, 0x00000001, 0x001fff00, 0x00000000,
386 	0x03051000, 0x00000000, 0x00000200, 0xaaaaaaaa, 0x3c466478,
387 	0x000000aa, 0x00001042, 0x00000000, 0x00000001, 0x00000002,
388 	0x00000003, 0x00000004, 0x00000005, 0x00000008, 0x00000009,
389 	0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d, 0x00000010,
390 	0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015,
391 	0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c,
392 	0x0000001d, 0x00000020, 0x00000021, 0x00000022, 0x00000023,
393 	0x00000024, 0x00000025, 0x00000028, 0x00000029, 0x0000002a,
394 	0x0000002b, 0x0000002c, 0x0000002d, 0x00000030, 0x00000031,
395 	0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000035,
396 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
397 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
398 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
399 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000010,
400 	0x0000001a, 0x40806333, 0x00106c10, 0x009c4060, 0x018830c6,
401 	0x00000400, 0x00000bb5, 0x00000011, 0x20202020, 0x20202020,
402 	0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc, 0x00000001,
403 	0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01, 0xdfa91f01,
404 	0x00000000, 0x0e79e5c6, 0x0e79e5c6, 0x0e79e5c6, 0x00820820,
405 	0x1ce739ce, 0x051701ce, 0x00000000, 0x00000000, 0x00000000,
406 	0x00000000, 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff,
407 	0x79a8aa1f, 0x07ffffef, 0x0fffffe7, 0x17ffffe5, 0x1fffffe4,
408 	0x37ffffe3, 0x3fffffe3, 0x57ffffe3, 0x5fffffe2, 0x7fffffe2,
409 	0x7f3c7bba, 0xf3307ff0, 0x08000000, 0x20202020, 0x20202020,
410 	0x1ce739ce, 0x000001ce, 0x00000001, 0x00000000, 0x00000000,
411 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
412 	0x00000000, 0x00000000, 0x00000000, 0x00000246, 0x20202020,
413 	0x20202020, 0x20202020, 0x1ce739ce, 0x000001ce
414 };
415 
416 static const struct athn_ini ar5416_ini = {
417 	nitems(ar5416_regs),
418 	ar5416_regs,
419 	ar5416_vals_5g20,
420 	ar5416_vals_5g40,
421 	ar5416_vals_2g40,
422 	ar5416_vals_2g20,
423 	nitems(ar5416_cm_regs),
424 	ar5416_cm_regs,
425 	ar5416_cm_vals
426 };
427 
428 /*
429  * AR9160 initialization values.
430  */
431 static const uint16_t ar9160_regs[] = {
432 	P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014),
433 	P(0x0801c), P(0x08120), P(0x081d0), P(0x09804), P(0x09820),
434 	P(0x09824), P(0x09828), P(0x09834), P(0x09838), P(0x09844),
435 	P(0x09848), P(0x0a848), P(0x0b848), P(0x09850), P(0x09858),
436 	P(0x0985c), P(0x09860), P(0x09864), P(0x09868), P(0x0986c),
437 	P(0x09914), P(0x09918), P(0x09924), P(0x09944), P(0x09960),
438 	P(0x0a960), P(0x0b960), P(0x09964), P(0x0c968), P(0x099bc),
439 	P(0x099c0), P(0x099c4), P(0x099c8), P(0x099cc), P(0x099d0),
440 	P(0x099d4), P(0x099d8), P(0x0a204), P(0x0a208), P(0x0a20c),
441 	P(0x0b20c), P(0x0c20c), P(0x0a21c), P(0x0a230), P(0x0a274),
442 	P(0x0a300), P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310),
443 	P(0x0a314), P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324),
444 	P(0x0a328), P(0x0a32c), P(0x0a330), P(0x0a334)
445 };
446 
447 static const uint32_t ar9160_vals_5g20[] = {
448 	0x00000230, 0x00000168, 0x00000e60, 0x0000a000, 0x03e803e8,
449 	0x128d93a7, 0x08f04800, 0x00003210, 0x00000300, 0x02020200,
450 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x0372161e,
451 	0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6c48b4e2, 0x7ec82d2e,
452 	0x31395d5e, 0x00048d18, 0x0001ce00, 0x409a40d0, 0x050cb081,
453 	0x000007d0, 0x0000000a, 0xd00a8a07, 0xffb81020, 0x00009b40,
454 	0x00009b40, 0x00009b40, 0x00001120, 0x000003b5, 0x001a0600,
455 	0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384,
456 	0x00000000, 0x00000000, 0x00000880, 0xd6be4788, 0x002fc160,
457 	0x002fc160, 0x002fc160, 0x1883800a, 0x00000000, 0x0a1a9caa,
458 	0x18010000, 0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f,
459 	0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbd07,
460 	0x0000d7bf, 0x00000000, 0x00000000, 0x00000000
461 };
462 
463 static const uint32_t ar9160_vals_5g40[] = {
464 	0x00000460, 0x000002d0, 0x00001cc0, 0x00014000, 0x07d007d0,
465 	0x128d93cf, 0x08f04800, 0x00003210, 0x000003c4, 0x02020200,
466 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x0372161e,
467 	0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6d48b4e2, 0x7ec82d2e,
468 	0x3139605e, 0x00048d18, 0x0001ce00, 0x409a40d0, 0x050cb081,
469 	0x00000fa0, 0x00000014, 0xd00a8a07, 0xffb81020, 0x00009b40,
470 	0x00009b40, 0x00009b40, 0x00001120, 0x000003b5, 0x001a0600,
471 	0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384,
472 	0x00000000, 0x00000000, 0x00000880, 0xd6be4788, 0x002fc160,
473 	0x002fc160, 0x002fc160, 0x1883800a, 0x00000000, 0x0a1a9caa,
474 	0x18010000, 0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f,
475 	0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbcbf,
476 	0x0000d7bf, 0x00000000, 0x00000000, 0x00000000
477 };
478 
479 static const uint32_t ar9160_vals_2g40[] = {
480 	0x000002c0, 0x00000318, 0x00007c70, 0x00016000, 0x10801600,
481 	0x12e013d7, 0x08f04810, 0x0000320a, 0x000003c4, 0x02020200,
482 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x037216a0,
483 	0x00197a68, 0x00197a68, 0x00197a68, 0x6d48b0e2, 0x7ec82d2e,
484 	0x3139605e, 0x00048d20, 0x0001ce00, 0x409a40d0, 0x050cb081,
485 	0x00001130, 0x00000016, 0xd00a8a0d, 0xffb81020, 0x00009b40,
486 	0x00009b40, 0x00009b40, 0x00001120, 0x000003ce, 0x001a0c00,
487 	0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384,
488 	0x00000000, 0x00000000, 0x00000880, 0xd03e4788, 0x002ac120,
489 	0x002ac120, 0x002ac120, 0x1883800a, 0x00000210, 0x0a1a7caa,
490 	0x18010000, 0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b,
491 	0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f,
492 	0x00000000, 0x00000000, 0x00000000, 0x00000000
493 };
494 
495 static const uint32_t ar9160_vals_2g20[] = {
496 	0x00000160, 0x0000018c, 0x00003e38, 0x0000b000, 0x08400b00,
497 	0x12e013ab, 0x08f04810, 0x0000320a, 0x00000300, 0x02020200,
498 	0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x037216a0,
499 	0x00197a68, 0x00197a68, 0x00197a68, 0x6c48b0e2, 0x7ec82d2e,
500 	0x31395d5e, 0x00048d20, 0x0001ce00, 0x409a40d0, 0x050cb081,
501 	0x00000898, 0x0000000b, 0xd00a8a0d, 0xffb81020, 0x00009b40,
502 	0x00009b40, 0x00009b40, 0x00001120, 0x000003ce, 0x001a0c00,
503 	0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384,
504 	0x00000000, 0x00000000, 0x00000880, 0xd03e4788, 0x002ac120,
505 	0x002ac120, 0x002ac120, 0x1883800a, 0x00000108, 0x0a1a7caa,
506 	0x18010000, 0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b,
507 	0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f,
508 	0x00000000, 0x00000000, 0x00000000, 0x00000000
509 };
510 
511 static const uint16_t ar9160_cm_regs[] = {
512 	P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044),
513 	P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800),
514 	P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814),
515 	P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040),
516 	P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054),
517 	P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230),
518 	P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8),
519 	P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238),
520 	P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378),
521 	P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8),
522 	P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8),
523 	P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738),
524 	P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c),
525 	P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc),
526 	P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc),
527 	P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c),
528 	P(0x0147c), P(0x04030), P(0x0403c), P(0x07010), P(0x07038),
529 	P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020),
530 	P(0x08038), P(0x0803c), P(0x08048), P(0x08054), P(0x08058),
531 	P(0x0805c), P(0x08060), P(0x08064), P(0x080c0), P(0x080c4),
532 	P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8),
533 	P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec), P(0x080f0),
534 	P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100), P(0x08104),
535 	P(0x08108), P(0x0810c), P(0x08110), P(0x08118), P(0x0811c),
536 	P(0x08124), P(0x08128), P(0x0812c), P(0x08130), P(0x08134),
537 	P(0x08138), P(0x0813c), P(0x08144), P(0x08168), P(0x0816c),
538 	P(0x08170), P(0x08174), P(0x08178), P(0x0817c), P(0x081c4),
539 	P(0x081ec), P(0x081f0), P(0x081f4), P(0x081f8), P(0x081fc),
540 	P(0x08200), P(0x08204), P(0x08208), P(0x0820c), P(0x08210),
541 	P(0x08214), P(0x08218), P(0x0821c), P(0x08220), P(0x08224),
542 	P(0x08228), P(0x0822c), P(0x08230), P(0x08234), P(0x08238),
543 	P(0x0823c), P(0x08240), P(0x08244), P(0x08248), P(0x0824c),
544 	P(0x08250), P(0x08254), P(0x08258), P(0x0825c), P(0x08260),
545 	P(0x08264), P(0x08270), P(0x08274), P(0x08278), P(0x0827c),
546 	P(0x08284), P(0x08288), P(0x0828c), P(0x08294), P(0x08298),
547 	P(0x08300), P(0x08304), P(0x08308), P(0x0830c), P(0x08310),
548 	P(0x08314), P(0x08318), P(0x08328), P(0x0832c), P(0x08330),
549 	P(0x08334), P(0x08338), P(0x0833c), P(0x08340), P(0x09808),
550 	P(0x0980c), P(0x09810), P(0x09814), P(0x0981c), P(0x0982c),
551 	P(0x09830), P(0x0983c), P(0x09840), P(0x0984c), P(0x09854),
552 	P(0x09900), P(0x09904), P(0x09908), P(0x0990c), P(0x0991c),
553 	P(0x09920), P(0x0a920), P(0x0b920), P(0x09928), P(0x0992c),
554 	P(0x09934), P(0x09938), P(0x0993c), P(0x09948), P(0x0994c),
555 	P(0x09954), P(0x09958), P(0x09940), P(0x0c95c), P(0x09970),
556 	P(0x09974), P(0x09978), P(0x0997c), P(0x09980), P(0x09984),
557 	P(0x09988), P(0x0998c), P(0x09990), P(0x09994), P(0x09998),
558 	P(0x0999c), P(0x099a0), P(0x099a4), P(0x099a8), P(0x099ac),
559 	P(0x099b0), P(0x099dc), P(0x099e0), P(0x099e4), P(0x099e8),
560 	P(0x099ec), P(0x099fc), P(0x09b00), P(0x09b04), P(0x09b08),
561 	P(0x09b0c), P(0x09b10), P(0x09b14), P(0x09b18), P(0x09b1c),
562 	P(0x09b20), P(0x09b24), P(0x09b28), P(0x09b2c), P(0x09b30),
563 	P(0x09b34), P(0x09b38), P(0x09b3c), P(0x09b40), P(0x09b44),
564 	P(0x09b48), P(0x09b4c), P(0x09b50), P(0x09b54), P(0x09b58),
565 	P(0x09b5c), P(0x09b60), P(0x09b64), P(0x09b68), P(0x09b6c),
566 	P(0x09b70), P(0x09b74), P(0x09b78), P(0x09b7c), P(0x09b80),
567 	P(0x09b84), P(0x09b88), P(0x09b8c), P(0x09b90), P(0x09b94),
568 	P(0x09b98), P(0x09b9c), P(0x09ba0), P(0x09ba4), P(0x09ba8),
569 	P(0x09bac), P(0x09bb0), P(0x09bb4), P(0x09bb8), P(0x09bbc),
570 	P(0x09bc0), P(0x09bc4), P(0x09bc8), P(0x09bcc), P(0x09bd0),
571 	P(0x09bd4), P(0x09bd8), P(0x09bdc), P(0x09be0), P(0x09be4),
572 	P(0x09be8), P(0x09bec), P(0x09bf0), P(0x09bf4), P(0x09bf8),
573 	P(0x09bfc), P(0x0a210), P(0x0a214), P(0x0a218), P(0x0a220),
574 	P(0x0a224), P(0x0a228), P(0x0a22c), P(0x0a234), P(0x0a238),
575 	P(0x0a23c), P(0x0a240), P(0x0a244), P(0x0a248), P(0x0a24c),
576 	P(0x0a250), P(0x0a254), P(0x0a258), P(0x0a25c), P(0x0a260),
577 	P(0x0a268), P(0x0a26c), P(0x0b26c), P(0x0c26c), P(0x0d270),
578 	P(0x0a278), P(0x0a27c), P(0x0a338), P(0x0a33c), P(0x0a340),
579 	P(0x0a344), P(0x0a348), P(0x0a34c), P(0x0a350), P(0x0a354),
580 	P(0x0a358), P(0x0d35c), P(0x0d360), P(0x0d364), P(0x0d368),
581 	P(0x0d36c), P(0x0d370), P(0x0d374), P(0x0d378), P(0x0d37c),
582 	P(0x0d380), P(0x0d384), P(0x0a388), P(0x0a38c), P(0x0a390),
583 	P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0), P(0x0a3a4),
584 	P(0x0a3a8), P(0x0a3ac), P(0x0a3b0), P(0x0a3b4), P(0x0a3b8),
585 	P(0x0a3bc), P(0x0a3c0), P(0x0a3c4), P(0x0a3c8), P(0x0a3cc),
586 	P(0x0a3d0), P(0x0a3d4), P(0x0a3dc), P(0x0a3e0)
587 };
588 
589 static const uint32_t ar9160_cm_vals[] = {
590 	0x00000000, 0x00020015, 0x00000005, 0x00000000, 0x00000008,
591 	0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000,
592 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
593 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f,
594 	0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
595 	0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000,
596 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
597 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
598 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
599 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
600 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
601 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
602 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
603 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
604 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
605 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
606 	0x00000000, 0x00000002, 0x00000002, 0x00000020, 0x000004c2,
607 	0x00000000, 0x00000000, 0x00000000, 0x00000700, 0x00000000,
608 	0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000,
609 	0x000fc78f, 0x0000000f, 0x00000000, 0x2a82301a, 0x05dc01e0,
610 	0x1f402710, 0x01f40000, 0x00001e00, 0x00000000, 0x00400000,
611 	0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000, 0x00000000,
612 	0x00000000, 0x00000000, 0x00020000, 0x00020000, 0x00000001,
613 	0x00000052, 0x00000000, 0x00000168, 0x000100aa, 0x00003210,
614 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
615 	0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
616 	0x32143320, 0xfaa4fa50, 0x00000100, 0x00000000, 0x00000000,
617 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
618 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
619 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
620 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
621 	0x00000000, 0x00100000, 0x0010f400, 0x00000100, 0x0001e800,
622 	0x00000000, 0x00000000, 0x00000000, 0x400000ff, 0x00080922,
623 	0x88a00010, 0x00000000, 0x40000000, 0x003e4180, 0x00000000,
624 	0x0000002c, 0x0000002c, 0x00000000, 0x00000000, 0x00000000,
625 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
626 	0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000302,
627 	0x00000e00, 0x00ff0000, 0x00000000, 0x000107ff, 0x00000000,
628 	0xad848e19, 0x7d14e000, 0x9c0a9f6b, 0x00000000, 0x0000a000,
629 	0x00000000, 0x00200400, 0x206a01ae, 0x1284233c, 0x00000859,
630 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000fff,
631 	0x05100000, 0x05100000, 0x05100000, 0x00000001, 0x00000004,
632 	0x1e1f2022, 0x0a0b0c0d, 0x00000000, 0x9280b212, 0x00020028,
633 	0x5f3ca3de, 0x2108ecff, 0x00750604, 0x004b6a8e, 0x190fb515,
634 	0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
635 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
636 	0x00000000, 0x00000000, 0x00000001, 0x201fff00, 0x006f0000,
637 	0x03051000, 0x00000000, 0x00000200, 0xaaaaaaaa, 0x3c466478,
638 	0x0cc80caa, 0x00001042, 0x00000000, 0x00000001, 0x00000002,
639 	0x00000003, 0x00000004, 0x00000005, 0x00000008, 0x00000009,
640 	0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d, 0x00000010,
641 	0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015,
642 	0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c,
643 	0x0000001d, 0x00000020, 0x00000021, 0x00000022, 0x00000023,
644 	0x00000024, 0x00000025, 0x00000028, 0x00000029, 0x0000002a,
645 	0x0000002b, 0x0000002c, 0x0000002d, 0x00000030, 0x00000031,
646 	0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000035,
647 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
648 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
649 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
650 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000010,
651 	0x0000001a, 0x40806333, 0x00106c10, 0x009c4060, 0x018830c6,
652 	0x00000400, 0x001a0bb5, 0x00000000, 0x20202020, 0x20202020,
653 	0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc, 0x00000001,
654 	0x0000e000, 0x00000000, 0x0cc75380, 0x0f0f0f01, 0xdfa91f01,
655 	0x00000001, 0x0e79e5c6, 0x0e79e5c6, 0x0e79e5c6, 0x00820820,
656 	0x1ce739ce, 0x050701ce, 0x00000000, 0x00000000, 0x00000000,
657 	0x00000000, 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff,
658 	0x79bfaa03, 0x07ffffef, 0x0fffffe7, 0x17ffffe5, 0x1fffffe4,
659 	0x37ffffe3, 0x3fffffe3, 0x57ffffe3, 0x5fffffe2, 0x7fffffe2,
660 	0x7f3c7bba, 0xf3307ff0, 0x0c000000, 0x20202020, 0x20202020,
661 	0x1ce739ce, 0x000001ce, 0x00000001, 0x00000000, 0x00000000,
662 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
663 	0x00000000, 0x00000000, 0x00000000, 0x00000246, 0x20202020,
664 	0x20202020, 0x20202020, 0x1ce739ce, 0x000001ce
665 };
666 
667 static const struct athn_ini ar9160_ini = {
668 	nitems(ar9160_regs),
669 	ar9160_regs,
670 	ar9160_vals_5g20,
671 	ar9160_vals_5g40,
672 	ar9160_vals_2g40,
673 	ar9160_vals_2g20,
674 	nitems(ar9160_cm_regs),
675 	ar9160_cm_regs,
676 	ar9160_cm_vals
677 };
678 
679 /*
680  * BB/RF Gains common to AR5416 and AR9160.
681  */
682 static const uint32_t ar5416_bb_rfgain_vals_5g[] = {
683 	0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1,
684 	0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8,
685 	0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009,
686 	0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0,
687 	0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011,
688 	0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038,
689 	0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059,
690 	0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9,
691 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
692 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
693 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
694 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
695 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9
696 };
697 
698 static const uint32_t ar5416_bb_rfgain_vals_2g[] = {
699 	0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181,
700 	0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8,
701 	0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9,
702 	0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0,
703 	0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191,
704 	0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8,
705 	0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199,
706 	0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9,
707 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
708 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
709 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
710 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
711 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9
712 };
713 
714 static const uint32_t ar5416_2_1_addac_vals[] = {
715 	0x00000000, 0x00000003, 0x00000000, 0x0000000c, 0x00000000,
716 	0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
717 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
718 	0x00000000, 0x00000000, 0x00000000, 0x00000060, 0x00000000,
719 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
720 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
721 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
722 	0x00000000
723 };
724 
725 static const struct athn_addac ar5416_2_1_addac = {
726 	nitems(ar5416_2_1_addac_vals),
727 	ar5416_2_1_addac_vals
728 };
729 
730 static const uint32_t ar5416_2_2_addac_vals[] = {
731 	0x00000000, 0x00000003, 0x00000000, 0x0000000c, 0x00000000,
732 	0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
733 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
734 	0x00000000, 0x00000000, 0x00000000, 0x00000060, 0x00000000,
735 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
736 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
737 	0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000,
738 	0x00000000
739 };
740 
741 static const struct athn_addac ar5416_2_2_addac = {
742 	nitems(ar5416_2_2_addac_vals),
743 	ar5416_2_2_addac_vals
744 };
745 
746 static const uint32_t ar9160_1_0_addac_vals[] = {
747 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
748 	0x00000000, 0x000000c0, 0x00000018, 0x00000004, 0x00000000,
749 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
750 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
751 	0x00000000, 0x000000c0, 0x00000019, 0x00000004, 0x00000000,
752 	0x00000000, 0x00000000, 0x00000004, 0x00000003, 0x00000008,
753 	0x00000000
754 };
755 
756 static const struct athn_addac ar9160_1_0_addac = {
757 	nitems(ar9160_1_0_addac_vals),
758 	ar9160_1_0_addac_vals
759 };
760 
761 static const uint32_t ar9160_1_1_addac_vals[] = {
762 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
763 	0x00000000, 0x000000c0, 0x00000018, 0x00000004, 0x00000000,
764 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
765 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
766 	0x00000000, 0x000000c0, 0x00000019, 0x00000004, 0x00000000,
767 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
768 	0x00000000
769 };
770 
771 static const struct athn_addac ar9160_1_1_addac = {
772 	nitems(ar9160_1_1_addac_vals),
773 	ar9160_1_1_addac_vals
774 };
775 
776 static const uint32_t ar5416_bank6tpc_vals[] = {
777 	0x00000000, 0x00000000, 0x00000000, 0x00e00000, 0x005e0000,
778 	0x00120000, 0x00620000, 0x00020000, 0x00ff0000, 0x00ff0000,
779 	0x00ff0000, 0x40ff0000, 0x005f0000, 0x00870000, 0x00f90000,
780 	0x007b0000, 0x00ff0000, 0x00f50000, 0x00dc0000, 0x00110000,
781 	0x006100a8, 0x00423022, 0x201400df, 0x00c40002, 0x003000f2,
782 	0x00440016, 0x00410040, 0x0001805e, 0x0000c0ab, 0x000000e1,
783 	0x00007081, 0x000000d4
784 };
785 
786 static const uint32_t ar9160_bank6tpc_vals[] = {
787 	0x00000000, 0x00000000, 0x00000000, 0x00e00000, 0x005e0000,
788 	0x00120000, 0x00620000, 0x00020000, 0x00ff0000, 0x00ff0000,
789 	0x00ff0000, 0x40ff0000, 0x005f0000, 0x00870000, 0x00f90000,
790 	0x007b0000, 0x00ff0000, 0x00f50000, 0x00dc0000, 0x00110000,
791 	0x006100a8, 0x00423022, 0x2014008f, 0x00c40002, 0x003000f2,
792 	0x00440016, 0x00410040, 0x0001805e, 0x0000c0ab, 0x000000e1,
793 	0x00007080, 0x000000d4
794 };
795 
796 static const uint32_t ar5416_bank6_vals[] = {
797 	0x00000000, 0x00000000, 0x00000000, 0x00e00000, 0x005e0000,
798 	0x00120000, 0x00620000, 0x00020000, 0x00ff0000, 0x00ff0000,
799 	0x00ff0000, 0x40ff0000, 0x005f0000, 0x00870000, 0x00f90000,
800 	0x007b0000, 0x00ff0000, 0x00f50000, 0x00dc0000, 0x00110000,
801 	0x006100a8, 0x004210a2, 0x0014008f, 0x00c40003, 0x003000f2,
802 	0x00440016, 0x00410040, 0x0001805e, 0x0000c0ab, 0x000000f1,
803 	0x00002081, 0x000000d4
804 };
805 
806 /*
807  * Serializer/Deserializer programming.
808  */
809 
810 static const uint32_t ar5416_serdes_regs[] = {
811 	AR_PCIE_SERDES,
812 	AR_PCIE_SERDES,
813 	AR_PCIE_SERDES,
814 	AR_PCIE_SERDES,
815 	AR_PCIE_SERDES,
816 	AR_PCIE_SERDES,
817 	AR_PCIE_SERDES,
818 	AR_PCIE_SERDES,
819 	AR_PCIE_SERDES,
820 	AR_PCIE_SERDES2
821 };
822 
823 static const uint32_t ar5416_serdes_vals[] = {
824 	0x9248fc00,
825 	0x24924924,
826 	/* RX shut off when elecidle is asserted. */
827 	0x28000039,
828 	0x53160824,
829 	0xe5980579,
830 	0x001defff,
831 	0x1aaabe40,
832 	0xbe105554,
833 	0x000e3007,
834 	0x00000000
835 };
836 
837 static const struct athn_serdes ar5416_serdes = {
838 	nitems(ar5416_serdes_vals),
839 	ar5416_serdes_regs,
840 	ar5416_serdes_vals,
841 };
842