xref: /freebsd/sys/dev/rtwn/rtl8812a/r12a_priv.h (revision 62cfcf62f627e5093fb37026a6d8c98e4d2ef04c)
1 /*-
2  * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  */
28 
29 #ifndef R12A_PRIV_H
30 #define R12A_PRIV_H
31 
32 /*
33  * MAC initialization values.
34  */
35 #define RTL8812AU_MAC_PROG_START \
36 	{ 0x010, 0x0c },
37 
38 #define RTL8812AU_MAC_PROG_END \
39 	{ 0x025, 0x0f }, { 0x072, 0x00 }, { 0x420, 0x80 }, { 0x428, 0x0a }, \
40 	{ 0x429, 0x10 }, { 0x430, 0x00 }, { 0x431, 0x00 }, { 0x432, 0x00 }, \
41 	{ 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 }, { 0x436, 0x07 }, \
42 	{ 0x437, 0x08 }, { 0x43c, 0x04 }, { 0x43d, 0x05 }, { 0x43e, 0x07 }, \
43 	{ 0x43f, 0x08 }, { 0x440, 0x5d }, { 0x441, 0x01 }, { 0x442, 0x00 }, \
44 	{ 0x444, 0x10 }, { 0x445, 0x00 }, { 0x446, 0x00 }, { 0x447, 0x00 }, \
45 	{ 0x448, 0x00 }, { 0x449, 0xf0 }, { 0x44a, 0x0f }, { 0x44b, 0x3e }, \
46 	{ 0x44c, 0x10 }, { 0x44d, 0x00 }, { 0x44e, 0x00 }, { 0x44f, 0x00 }, \
47 	{ 0x450, 0x00 }, { 0x451, 0xf0 }, { 0x452, 0x0f }, { 0x453, 0x00 }, \
48 	{ 0x45b, 0x80 }, { 0x460, 0x66 }, { 0x461, 0x66 }, { 0x4c8, 0xff }, \
49 	{ 0x4c9, 0x08 }, { 0x4cc, 0xff }, { 0x4cd, 0xff }, { 0x4ce, 0x01 }, \
50 	{ 0x500, 0x26 }, { 0x501, 0xa2 }, { 0x502, 0x2f }, { 0x503, 0x00 }, \
51 	{ 0x504, 0x28 }, { 0x505, 0xa3 }, { 0x506, 0x5e }, { 0x507, 0x00 }, \
52 	{ 0x508, 0x2b }, { 0x509, 0xa4 }, { 0x50a, 0x5e }, { 0x50b, 0x00 }, \
53 	{ 0x50c, 0x4f }, { 0x50d, 0xa4 }, { 0x50e, 0x00 }, { 0x50f, 0x00 }, \
54 	{ 0x512, 0x1c }, { 0x514, 0x0a }, { 0x516, 0x0a }, { 0x525, 0x4f }, \
55 	{ 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55c, 0x50 }, \
56 	{ 0x55d, 0xff }, { 0x604, 0x09 }, { 0x605, 0x30 }, { 0x607, 0x03 }, \
57 	{ 0x608, 0x0e }, { 0x609, 0x2a }, { 0x620, 0xff }, { 0x621, 0xff }, \
58 	{ 0x622, 0xff }, { 0x623, 0xff }, { 0x624, 0xff }, { 0x625, 0xff }, \
59 	{ 0x626, 0xff }, { 0x627, 0xff }, { 0x638, 0x50 }, { 0x63c, 0x0a }, \
60 	{ 0x63d, 0x0a }, { 0x63e, 0x0e }, { 0x63f, 0x0e }, { 0x640, 0x80 }, \
61 	{ 0x642, 0x40 }, { 0x643, 0x00 }, { 0x652, 0xc8 }, { 0x66e, 0x05 }, \
62 	{ 0x700, 0x21 }, { 0x701, 0x43 }, { 0x702, 0x65 }, { 0x703, 0x87 }, \
63 	{ 0x708, 0x21 }, { 0x709, 0x43 }, { 0x70a, 0x65 }, { 0x70b, 0x87 }, \
64 	{ 0x718, 0x40 }
65 
66 static const struct rtwn_mac_prog rtl8812au_mac_no_ext_pa_lna[] = {
67 	RTL8812AU_MAC_PROG_START
68 	{ 0x11, 0x66 },
69 	RTL8812AU_MAC_PROG_END
70 }, rtl8812au_mac[] = {
71 	RTL8812AU_MAC_PROG_START
72 	{ 0x11, 0x5a },
73 	RTL8812AU_MAC_PROG_END
74 };
75 
76 
77 /*
78  * Baseband initialization values.
79  */
80 #define R12A_COND_GPA		0x01
81 #define R12A_COND_APA		0x02
82 #define R12A_COND_GLNA		0x04
83 #define R12A_COND_ALNA		0x08
84 #define R12A_COND_TYPE(t)	((t) << 4)
85 
86 static const uint16_t rtl8812au_bb_regs0[] = {
87 	0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x820, 0x824,
88 	0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 0x840, 0x844, 0x848,
89 	0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 0x864, 0x868, 0x86c,
90 	0x870, 0x874, 0x878, 0x87c, 0x8a0, 0x8a4, 0x8a8, 0x8ac, 0x8b0,
91 	0x8b4, 0x8b8, 0x8bc, 0x8c0, 0x8c4, 0x8c8, 0x8cc, 0x8d0, 0x8dc,
92 	0x8d4, 0x8d8, 0x8f8, 0x8fc, 0x900, 0x90c, 0x910, 0x914, 0x918,
93 	0x91c, 0x920, 0x924, 0x928, 0x92c, 0x930, 0x934, 0x960, 0x964,
94 	0x968, 0x96c, 0x970, 0x978, 0x97c, 0x980, 0x984, 0x988, 0x990,
95 	0x994, 0x998, 0x99c, 0x9a0, 0x9a4, 0x9a8, 0x9ac, 0x9b0, 0x9b4,
96 	0x9b8, 0x9bc, 0x9d0, 0x9d4, 0x9d8, 0x9dc, 0x9e4, 0x9e8, 0xa00,
97 	0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 0xa20, 0xa24,
98 	0xa28, 0xa2c, 0xa70, 0xa74, 0xa78, 0xa7c, 0xa80, 0xa84, 0xb00,
99 	0xb04, 0xb08, 0xb0c, 0xb10, 0xb14, 0xb18, 0xb1c, 0xb20, 0xb24,
100 	0xb28, 0xb2c, 0xb30, 0xb34, 0xb38, 0xb3c, 0xb40, 0xb44, 0xb48,
101 	0xb4c, 0xb50, 0xb54, 0xb58, 0xb5c, 0xc00, 0xc04, 0xc08, 0xc0c,
102 	0xc10, 0xc14, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 0xc30, 0xc34,
103 	0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 0xc54, 0xc58,
104 	0xc5c, 0xc60, 0xc64
105 }, rtl8812au_bb_regs1[] = {
106 	0xc68
107 }, rtl8812au_bb_regs2[] = {
108 	0xc6c, 0xc70, 0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc94, 0xc98,
109 	0xc9c, 0xca0, 0xca4, 0xca8, 0xcb0, 0xcb4, 0xcb8, 0xe00, 0xe04,
110 	0xe08, 0xe0c, 0xe10, 0xe14, 0xe1c, 0xe20, 0xe24, 0xe28, 0xe2c,
111 	0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 0xe48, 0xe4c, 0xe50,
112 	0xe54, 0xe58, 0xe5c, 0xe60, 0xe64, 0xe68, 0xe6c, 0xe70, 0xe74,
113 	0xe78, 0xe7c, 0xe80, 0xe84, 0xe94, 0xe98, 0xe9c, 0xea0, 0xea4,
114 	0xea8, 0xeb0, 0xeb4, 0xeb8
115 };
116 
117 static const uint32_t rtl8812au_bb_vals0[] = {
118 	0x8020d010, 0x080112e0, 0x0e028233, 0x12131113, 0x20101263,
119 	0x020c3d10, 0x03a00385, 0x00000000, 0x00030fe0, 0x00000000,
120 	0x002083dd, 0x2eaaeeb8, 0x0037a706, 0x06c89b44, 0x0000095b,
121 	0xc0000001, 0x40003cde, 0x6210ff8b, 0x6cfdffb8, 0x28874706,
122 	0x0001520c, 0x8060e000, 0x74210168, 0x6929c321, 0x79727432,
123 	0x8ca7a314, 0x338c2878, 0x03333333, 0x31602c2e, 0x00003152,
124 	0x000fc000, 0x00000013, 0x7f7f7f7f, 0xa202033e, 0x0ff0fa0a,
125 	0x00000600, 0x000fc080, 0x6c0057ff, 0x4ca520a3, 0x27f00020,
126 	0x00000000, 0x00012d69, 0x08248492, 0x0000b800, 0x00000000,
127 	0x940008a0, 0x290b5612, 0x400002c0, 0x00000000, 0x00000701,
128 	0x00000000, 0x0000fc00, 0x00000404, 0x1c1028c0, 0x64b11a1c,
129 	0xe0767233, 0x055aa500, 0x00000004, 0xfffe0000, 0xfffffffe,
130 	0x001fffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
131 	0x801fffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
132 	0x00000000, 0x27100000, 0xffff0100, 0xffffff5c, 0xffffffff,
133 	0x000000ff, 0x00080080, 0x00000000, 0x00000000, 0x81081008,
134 	0x00000000, 0x01081008, 0x01081008, 0x00000000, 0x00000000,
135 	0x00000000, 0x00000000, 0x00000003, 0x000002d5, 0x00d047c8,
136 	0x01ff000c, 0x8c838300, 0x2e7f000f, 0x9500bb78, 0x11144028,
137 	0x00881117, 0x89140f00, 0x1a1b0000, 0x090e1217, 0x00000305,
138 	0x00900000, 0x101fff00, 0x00000008, 0x00000900, 0x225b0606,
139 	0x218075b2, 0x001f8c80, 0x03100000, 0x0000b000, 0xae0201eb,
140 	0x01003207, 0x00009807, 0x01000000, 0x00000002, 0x00000002,
141 	0x0000001f, 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c,
142 	0x13121110, 0x17161514, 0x0000003a, 0x00000000, 0x00000000,
143 	0x13000032, 0x48080000, 0x00000000, 0x00000000, 0x00000000,
144 	0x00000000, 0x00000007, 0x00042020, 0x80410231, 0x00000000,
145 	0x00000100, 0x01000000, 0x40000003, 0x12121212, 0x12121212,
146 	0x12121212, 0x12121212, 0x12121212, 0x12121212, 0x12121212,
147 	0x12121212, 0x12121212, 0x12121212, 0x12121212, 0x12121212,
148 	0x00000020, 0x0008121c, 0x30000c1c, 0x00000058, 0x34344443,
149 	0x07003333
150 }, rtl8812au_bb_vals1_ext_pa_lna[] = {
151 	0x59791979
152 }, rtl8812au_bb_vals1[] = {
153 	0x59799979
154 }, rtl8812au_bb_vals2[] = {
155 	0x59795979, 0x19795979, 0x19795979, 0x19791979, 0x19791979,
156 	0x19791979, 0x19791979, 0x0100005c, 0x00000000, 0x00000000,
157 	0x00000029, 0x08040201, 0x80402010, 0x77547777, 0x00000077,
158 	0x00508242, 0x00000007, 0x00042020, 0x80410231, 0x00000000,
159 	0x00000100, 0x01000000, 0x40000003, 0x12121212, 0x12121212,
160 	0x12121212, 0x12121212, 0x12121212, 0x12121212, 0x12121212,
161 	0x12121212, 0x12121212, 0x12121212, 0x12121212, 0x12121212,
162 	0x00000020, 0x0008121c, 0x30000c1c, 0x00000058, 0x34344443,
163 	0x07003333, 0x59791979, 0x59795979, 0x19795979, 0x19795979,
164 	0x19791979, 0x19791979, 0x19791979, 0x19791979, 0x0100005c,
165 	0x00000000, 0x00000000, 0x00000029, 0x08040201, 0x80402010,
166 	0x77547777, 0x00000077, 0x00508242
167 };
168 
169 static const struct rtwn_bb_prog rtl8812au_bb[] = {
170 	{
171 		nitems(rtl8812au_bb_regs0),
172 		rtl8812au_bb_regs0,
173 		rtl8812au_bb_vals0,
174 		{ 0 },
175 		NULL
176 	},
177 	/*
178 	 * Devices with:
179 	 * * External 2GHz PA, type 0;
180 	 * * External 5GHz PA, type 0 or 5;
181 	 * * External 2GHz LNA, type 0 or 5;
182 	 * * External 5GHz LNA, type 0;
183 	 */
184 	{
185 		nitems(rtl8812au_bb_regs1),
186 		rtl8812au_bb_regs1,
187 		rtl8812au_bb_vals1_ext_pa_lna,
188 		{
189 			R12A_COND_GPA | R12A_COND_GLNA |
190 			R12A_COND_APA | R12A_COND_ALNA |
191 			R12A_COND_TYPE(0x0),
192 			R12A_COND_APA | R12A_COND_GLNA |
193 			R12A_COND_TYPE(0x5), 0
194 		},
195 		/*
196 		 * Others.
197 		 */
198 		&(const struct rtwn_bb_prog){
199 			nitems(rtl8812au_bb_regs1),
200 			rtl8812au_bb_regs1,
201 			rtl8812au_bb_vals1,
202 			{ 0 },
203 			NULL
204 		}
205 	},
206 	{
207 		nitems(rtl8812au_bb_regs2),
208 		rtl8812au_bb_regs2,
209 		rtl8812au_bb_vals2,
210 		{ 0 },
211 		NULL
212 	}
213 };
214 
215 
216 static const uint32_t rtl8812au_agc_vals0_lna_g0[] = {
217 	0xfc000001, 0xfb020001, 0xfa040001, 0xf9060001, 0xf8080001,
218 	0xf70a0001, 0xf60c0001, 0xf50e0001, 0xf4100001, 0xf3120001,
219 	0xf2140001, 0xf1160001, 0xf0180001, 0xef1a0001, 0xee1c0001,
220 	0xed1e0001, 0xec200001, 0xeb220001, 0xea240001, 0xcd260001,
221 	0xcc280001, 0xcb2a0001, 0xca2c0001, 0xc92e0001, 0xc8300001,
222 	0xa6320001, 0xa5340001, 0xa4360001, 0xa3380001, 0xa23a0001,
223 	0x883c0001, 0x873e0001, 0x86400001, 0x85420001, 0x84440001,
224 	0x83460001, 0x82480001, 0x814a0001, 0x484c0001, 0x474e0001,
225 	0x46500001, 0x45520001, 0x44540001, 0x43560001, 0x42580001,
226 	0x415a0001, 0x255c0001, 0x245e0001, 0x23600001, 0x22620001,
227 	0x21640001, 0x21660001, 0x21680001, 0x216a0001, 0x216c0001,
228 	0x216e0001, 0x21700001, 0x21720001, 0x21740001, 0x21760001,
229 	0x21780001, 0x217a0001, 0x217c0001, 0x217e0001
230 }, rtl8812au_agc_vals0_lna_g5[] = {
231 	0xf9000001, 0xf8020001, 0xf7040001, 0xf6060001, 0xf5080001,
232 	0xf40a0001, 0xf30c0001, 0xf20e0001, 0xf1100001, 0xf0120001,
233 	0xef140001, 0xee160001, 0xed180001, 0xec1a0001, 0xeb1c0001,
234 	0xea1e0001, 0xcd200001, 0xcc220001, 0xcb240001, 0xca260001,
235 	0xc9280001, 0xc82a0001, 0xc72c0001, 0xc62e0001, 0xa5300001,
236 	0xa4320001, 0xa3340001, 0xa2360001, 0x88380001, 0x873a0001,
237 	0x863c0001, 0x853e0001, 0x84400001, 0x83420001, 0x82440001,
238 	0x81460001, 0x48480001, 0x474a0001, 0x464c0001, 0x454e0001,
239 	0x44500001, 0x43520001, 0x42540001, 0x41560001, 0x25580001,
240 	0x245a0001, 0x235c0001, 0x225e0001, 0x21600001, 0x21620001,
241 	0x21640001, 0x21660001, 0x21680001, 0x216a0001, 0x236c0001,
242 	0x226e0001, 0x21700001, 0x21720001, 0x21740001, 0x21760001,
243 	0x21780001, 0x217a0001, 0x217c0001, 0x217e0001
244 }, rtl8812au_agc_vals0[] = {
245 	0xff000001, 0xff020001, 0xff040001, 0xff060001, 0xff080001,
246 	0xfe0a0001, 0xfd0c0001, 0xfc0e0001, 0xfb100001, 0xfa120001,
247 	0xf9140001, 0xf8160001, 0xf7180001, 0xf61a0001, 0xf51c0001,
248 	0xf41e0001, 0xf3200001, 0xf2220001, 0xf1240001, 0xf0260001,
249 	0xef280001, 0xee2a0001, 0xed2c0001, 0xec2e0001, 0xeb300001,
250 	0xea320001, 0xe9340001, 0xe8360001, 0xe7380001, 0xe63a0001,
251 	0xe53c0001, 0xc73e0001, 0xc6400001, 0xc5420001, 0xc4440001,
252 	0xc3460001, 0xc2480001, 0xc14a0001, 0xa74c0001, 0xa64e0001,
253 	0xa5500001, 0xa4520001, 0xa3540001, 0xa2560001, 0xa1580001,
254 	0x675a0001, 0x665c0001, 0x655e0001, 0x64600001, 0x63620001,
255 	0x48640001, 0x47660001, 0x46680001, 0x456a0001, 0x446c0001,
256 	0x436e0001, 0x42700001, 0x41720001, 0x41740001, 0x41760001,
257 	0x41780001, 0x417a0001, 0x417c0001, 0x417e0001
258 }, rtl8812au_agc_vals1_lna_a0[] = {
259 	0xfc800001, 0xfb820001, 0xfa840001, 0xf9860001, 0xf8880001,
260 	0xf78a0001, 0xf68c0001, 0xf58e0001, 0xf4900001, 0xf3920001,
261 	0xf2940001, 0xf1960001, 0xf0980001, 0xef9a0001, 0xee9c0001,
262 	0xed9e0001, 0xeca00001, 0xeba20001, 0xeaa40001, 0xe9a60001,
263 	0xe8a80001, 0xe7aa0001, 0xe6ac0001, 0xe5ae0001, 0xe4b00001,
264 	0xe3b20001, 0xa8b40001, 0xa7b60001, 0xa6b80001, 0xa5ba0001,
265 	0xa4bc0001, 0xa3be0001, 0xa2c00001, 0xa1c20001, 0x68c40001,
266 	0x67c60001, 0x66c80001, 0x65ca0001, 0x64cc0001, 0x47ce0001,
267 	0x46d00001, 0x45d20001, 0x44d40001, 0x43d60001, 0x42d80001,
268 	0x08da0001, 0x07dc0001, 0x06de0001, 0x05e00001, 0x04e20001,
269 	0x03e40001, 0x02e60001, 0x01e80001, 0x01ea0001, 0x01ec0001,
270 	0x01ee0001, 0x01f00001, 0x01f20001, 0x01f40001, 0x01f60001,
271 	0x01f80001, 0x01fa0001, 0x01fc0001, 0x01fe0001
272 }, rtl8812au_agc_vals1[] = {
273 	0xff800001, 0xff820001, 0xff840001, 0xfe860001, 0xfd880001,
274 	0xfc8a0001, 0xfb8c0001, 0xfa8e0001, 0xf9900001, 0xf8920001,
275 	0xf7940001, 0xf6960001, 0xf5980001, 0xf49a0001, 0xf39c0001,
276 	0xf29e0001, 0xf1a00001, 0xf0a20001, 0xefa40001, 0xeea60001,
277 	0xeda80001, 0xecaa0001, 0xebac0001, 0xeaae0001, 0xe9b00001,
278 	0xe8b20001, 0xe7b40001, 0xe6b60001, 0xe5b80001, 0xe4ba0001,
279 	0xe3bc0001, 0xa8be0001, 0xa7c00001, 0xa6c20001, 0xa5c40001,
280 	0xa4c60001, 0xa3c80001, 0xa2ca0001, 0xa1cc0001, 0x68ce0001,
281 	0x67d00001, 0x66d20001, 0x65d40001, 0x64d60001, 0x47d80001,
282 	0x46da0001, 0x45dc0001, 0x44de0001, 0x43e00001, 0x42e20001,
283 	0x08e40001, 0x07e60001, 0x06e80001, 0x05ea0001, 0x04ec0001,
284 	0x03ee0001, 0x02f00001, 0x01f20001, 0x01f40001, 0x01f60001,
285 	0x01f80001, 0x01fa0001, 0x01fc0001, 0x01fe0001
286 };
287 
288 static const struct rtwn_agc_prog rtl8812au_agc[] = {
289 	/*
290 	 * External 2GHz LNA (type 0).
291 	 */
292 	{
293 		nitems(rtl8812au_agc_vals0_lna_g0),
294 		rtl8812au_agc_vals0_lna_g0,
295 		{ R12A_COND_GLNA | R12A_COND_TYPE(0x0), 0 },
296 		/*
297 		 * External 2GHz LNA (type 5).
298 		 */
299 		&(const struct rtwn_agc_prog){
300 			nitems(rtl8812au_agc_vals0_lna_g5),
301 			rtl8812au_agc_vals0_lna_g5,
302 			{ R12A_COND_GLNA | R12A_COND_TYPE(0x5), 0 },
303 			/*
304 			 * Others.
305 			 */
306 			&(const struct rtwn_agc_prog){
307 				nitems(rtl8812au_agc_vals0),
308 				rtl8812au_agc_vals0,
309 				{ 0 },
310 				NULL
311 			}
312 		}
313 	},
314 	/*
315 	 * External 5GHz LNA (type 0).
316 	 */
317 	{
318 		nitems(rtl8812au_agc_vals1_lna_a0),
319 		rtl8812au_agc_vals1_lna_a0,
320 		{ R12A_COND_ALNA | R12A_COND_TYPE(0x0), 0 },
321 		/*
322 		 * Others.
323 		 */
324 		&(const struct rtwn_agc_prog){
325 			nitems(rtl8812au_agc_vals1),
326 			rtl8812au_agc_vals1,
327 			{ 0 },
328 			NULL
329 		}
330 	}
331 };
332 
333 /*
334  * RF initialization values.
335  */
336 static const uint8_t rtl8812au_rf0_regs0[] = {
337 	0x00, 0x18, 0x56, 0x66, 0x1e, 0x89
338 }, rtl8812au_rf0_regs1[] = {
339 	0x86
340 }, rtl8812au_rf0_regs2[] = {
341 	0x8b
342 }, rtl8812au_rf0_regs3[] = {
343 	0xb1, 0xb3, 0xb4, 0xba,	0x18, 0xef
344 }, rtl8812au_rf0_regs4[] = {
345 	0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b
346 }, rtl8812au_rf0_regs5[] = {
347 	0xef, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
348 	0x34
349 }, rtl8812au_rf0_regs6[] = {
350 	0xef, 0xef, 0xdf, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0xef,
351 	0x51, 0x52, 0x53, 0x54, 0xef, 0x08, 0x18, 0xef, 0x3a, 0x3b, 0x3c,
352 	0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b,
353 	0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a,
354 	0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c,
355 	0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b,
356 	0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a,
357 	0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c,
358 	0x3a, 0x3b, 0x3c, 0xef
359 }, rtl8812au_rf0_regs7[] = {
360 	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
361 	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
362 	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34
363 }, rtl8812au_rf0_regs8[] = {
364 	0xef, 0x18, 0xef, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
365 	0x35, 0xef, 0x18, 0xef, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
366 	0x36, 0x36, 0x36, 0x36, 0x36, 0xef, 0xef, 0x3c, 0x3c, 0x3c,
367 }, rtl8812au_rf0_regs9[] = {
368 	0xef, 0x18, 0xef, 0xdf, 0x1f
369 }, rtl8812au_rf0_regs10[] = {
370 	0x61, 0x62, 0x63, 0x64, 0x65
371 }, rtl8812au_rf0_regs11[] = {
372 	0x08, 0x1c, 0xb4, 0x18, 0xfe, 0xfe, 0xfe, 0xfe, 0xb4, 0x18
373 }, rtl8812au_rf1_regs0[] = {
374 	0x56, 0x66, 0x89
375 }, rtl8812au_rf1_regs3[] = {
376 	0xb1, 0xb3, 0xb4, 0xba, 0x18, 0xef
377 };
378 
379 static const uint32_t rtl8812au_rf0_vals0[] = {
380 	0x10000, 0x1712a, 0x51cf2, 0x40000, 0x80000, 0x00080
381 }, rtl8812au_rf0_vals1_lna_g0_g5[] = {
382 	0x14b3a
383 }, rtl8812au_rf0_vals1[] = {
384 	0x14b38
385 }, rtl8812au_rf0_vals2_lna_a0[] = {
386 	0x80180
387 }, rtl8812au_rf0_vals2[] = {
388 	0x87180
389 }, rtl8812au_rf0_vals3[] = {
390 	0x1fc1a, 0xf0810, 0x1a78d, 0x86180, 0x00006, 0x02000
391 }, rtl8812au_rf0_vals4_lna_g0_g5[] = {
392 	0x3f218, 0x30a58, 0x2fa58, 0x22590, 0x1fa50, 0x10248, 0x08240
393 }, rtl8812au_rf0_vals4[] = {
394 	0x38a58, 0x37a58, 0x2a590, 0x27a50, 0x18248, 0x10240, 0x08240
395 }, rtl8812au_rf0_vals5_pa_g0[] = {
396 	0x00100, 0x0a4ee, 0x09076, 0x08073, 0x07070, 0x0606d, 0x0506a,
397 	0x04049, 0x03046, 0x02028, 0x01025, 0x00022
398 }, rtl8812au_rf0_vals5[] = {
399 	0x00100, 0x0adf4, 0x09df1, 0x08dee, 0x07deb, 0x06de8, 0x05de5,
400 	0x04de2, 0x03ce6, 0x024e7, 0x014e4, 0x004e1
401 }, rtl8812au_rf0_vals6[] = {
402 	0x00000, 0x020a2, 0x00080, 0x00192, 0x08192, 0x10192, 0x00024,
403 	0x08024, 0x10024, 0x18024, 0x00000, 0x00c21, 0x006d9, 0xfc649,
404 	0x0017e, 0x00002, 0x08400, 0x1712a, 0x01000, 0x00080, 0x3a02c,
405 	0x04000, 0x00400, 0x3202c, 0x10000, 0x000a0, 0x2b064, 0x04000,
406 	0x000d8, 0x23070, 0x04000, 0x00468, 0x1b870, 0x10000, 0x00098,
407 	0x12085, 0xe4000, 0x00418, 0x0a080, 0xf0000, 0x00418, 0x02080,
408 	0x10000, 0x00080, 0x7a02c, 0x04000, 0x00400, 0x7202c, 0x10000,
409 	0x000a0, 0x6b064, 0x04000, 0x000d8, 0x63070, 0x04000, 0x00468,
410 	0x5b870, 0x10000, 0x00098, 0x52085, 0xe4000, 0x00418, 0x4a080,
411 	0xf0000, 0x00418, 0x42080, 0x10000, 0x00080, 0xba02c, 0x04000,
412 	0x00400, 0xb202c, 0x10000, 0x000a0, 0xab064, 0x04000, 0x000d8,
413 	0xa3070, 0x04000, 0x00468, 0x9b870, 0x10000, 0x00098, 0x92085,
414 	0xe4000, 0x00418, 0x8a080, 0xf0000, 0x00418, 0x82080, 0x10000,
415 	0x01100
416 }, rtl8812au_rf0_vals7_pa_a0[] = {
417 	0x4a0b2, 0x490af, 0x48070, 0x4706d, 0x46050, 0x4504d, 0x4404a,
418 	0x43047, 0x4200a, 0x41007, 0x40004, 0x2a0b2, 0x290af, 0x28070,
419 	0x2706d, 0x26050, 0x2504d, 0x2404a, 0x23047, 0x2200a, 0x21007,
420 	0x20004, 0x0a0b2, 0x090af, 0x08070, 0x0706d, 0x06050, 0x0504d,
421 	0x0404a, 0x03047, 0x0200a, 0x01007, 0x00004
422 }, rtl8812au_rf0_vals7_pa_a5[] = {
423 	0x4a0b2, 0x490af, 0x48070, 0x4706d, 0x4604d, 0x4504a, 0x44047,
424 	0x43044, 0x42007, 0x41004, 0x40001, 0x2a0b4, 0x290b1, 0x28072,
425 	0x2706f, 0x2604f, 0x2504c, 0x24049, 0x23046, 0x22009, 0x21006,
426 	0x20003, 0x0a0b2, 0x090af, 0x08070, 0x0706d, 0x0604d, 0x0504a,
427 	0x04047, 0x03044, 0x02007, 0x01004, 0x00001
428 }, rtl8812au_rf0_vals7[] = {
429 	0x4adf5, 0x49df2, 0x48def, 0x47dec, 0x46de9, 0x45de6, 0x44de3,
430 	0x438c8, 0x428c5, 0x418c2, 0x408c0, 0x2adf5, 0x29df2, 0x28def,
431 	0x27dec, 0x26de9, 0x25de6, 0x24de3, 0x238c8, 0x228c5, 0x218c2,
432 	0x208c0, 0x0aff7, 0x09df7, 0x08df4, 0x07df1, 0x06dee, 0x05deb,
433 	0x04de8, 0x038cc, 0x028c9, 0x018c6, 0x008c3
434 }, rtl8812au_rf0_vals8_pa_a0_a5[] = {
435 	0x00000, 0x1712a, 0x00040, 0x001d4, 0x081d4, 0x101d4, 0x201b4,
436 	0x281b4, 0x301b4, 0x401b4, 0x481b4, 0x501b4, 0x00000, 0x1712a,
437 	0x00010, 0x04bfb, 0x0cbfb, 0x14bfb, 0x1cbfb, 0x24f4b, 0x2cf4b,
438 	0x34f4b, 0x3cf4b, 0x44f4b, 0x4cf4b, 0x54f4b, 0x5cf4b, 0x00000,
439 	0x00008, 0x002cc, 0x00522, 0x00902
440 }, rtl8812au_rf0_vals8[] = {
441 	0x00000, 0x1712a, 0x00040, 0x00188, 0x08147, 0x10147, 0x201d7,
442 	0x281d7, 0x301d7, 0x401d8, 0x481d8, 0x501d8, 0x00000, 0x1712a,
443 	0x00010, 0x84eb4, 0x8cc35, 0x94c35, 0x9cc35, 0xa4c35, 0xacc35,
444 	0xb4c35, 0xbcc35, 0xc4c34, 0xccc35, 0xd4c35, 0xdcc35, 0x00000,
445 	0x00008, 0x002a8, 0x005a2, 0x00880
446 }, rtl8812au_rf0_vals9[] = {
447 	0x00000, 0x1712a, 0x00002, 0x00080, 0x00064
448 }, rtl8812au_rf0_vals10_pa_a0[] = {
449 	0xfdd43, 0x38f4b, 0x32117, 0x194ac, 0x931d1
450 }, rtl8812au_rf0_vals10_pa_a5[] = {
451 	0xfdd43, 0x38f4b, 0x32117, 0x194ac, 0x931d2
452 }, rtl8812au_rf0_vals10[] = {
453 	0xe5d53, 0x38fcd, 0x114eb, 0x196ac, 0x911d7
454 }, rtl8812au_rf0_vals11[] = {
455 	0x08400, 0x739d2, 0x1e78d, 0x1f12a, 0x0c350, 0x0c350, 0x0c350,
456 	0x0c350, 0x1a78d, 0x1712a
457 }, rtl8812au_rf1_vals0[] = {
458 	0x51cf2, 0x40000, 0x00080
459 }, rtl8812au_rf1_vals3[] = {
460 	0x1fc1a, 0xf0810, 0x1a78d, 0x86180, 0x00006, 0x02000
461 }, rtl8812au_rf1_vals6[] = {
462 	0x00000, 0x020a2, 0x00080, 0x00192, 0x08192, 0x10192, 0x00024,
463 	0x08024, 0x10024, 0x18024, 0x00000, 0x00c21, 0x006d9, 0xfc649,
464 	0x0017e, 0x00002, 0x08400, 0x1712a, 0x01000, 0x00080, 0x3a02c,
465 	0x04000, 0x00400, 0x3202c, 0x10000, 0x000a0, 0x2b064, 0x04000,
466 	0x000d8, 0x23070, 0x04000, 0x00468, 0x1b870, 0x10000, 0x00098,
467 	0x12085, 0xe4000, 0x00418, 0x0a080, 0xf0000, 0x00418, 0x02080,
468 	0x10000, 0x00080, 0x7a02c, 0x04000, 0x00400, 0x7202c, 0x10000,
469 	0x000a0, 0x6b064, 0x04000, 0x000d8, 0x63070, 0x04000, 0x00468,
470 	0x5b870, 0x10000, 0x00098, 0x52085, 0xe4000, 0x00418, 0x4a080,
471 	0xf0000, 0x00418, 0x42080, 0x10000, 0x00080, 0xba02c, 0x04000,
472 	0x00400, 0xb202c, 0x10000, 0x000a0, 0xab064, 0x04000, 0x000d8,
473 	0xa3070, 0x04000, 0x00468, 0x9b870, 0x10000, 0x00098, 0x92085,
474 	0xe4000, 0x00418, 0x8a080, 0xf0000, 0x00418, 0x82080, 0x10000,
475 	0x01100
476 }, rtl8812au_rf1_vals7_pa_a5[] = {
477 	0x4a0b1, 0x490ae, 0x4806f, 0x4706c, 0x4604c, 0x45049, 0x44046,
478 	0x43043, 0x42006, 0x41003, 0x40000, 0x2a0b3, 0x290b0, 0x28071,
479 	0x2706e, 0x2604e, 0x2504b, 0x24048, 0x23045, 0x22008, 0x21005,
480 	0x20002, 0x0a0b3, 0x090b0, 0x08070, 0x0706d, 0x0604d, 0x0504a,
481 	0x04047, 0x03044, 0x02007, 0x01004, 0x00001
482 }, rtl8812au_rf1_vals8_pa_a0_a5[] = {
483 	0x00000, 0x1712a, 0x00040, 0x001c5, 0x081c5, 0x101c5, 0x20174,
484 	0x28174, 0x30174, 0x40185, 0x48185, 0x50185, 0x00000, 0x1712a,
485 	0x00010, 0x05b8b, 0x0db8b, 0x15b8b, 0x1db8b, 0x262db, 0x2e2db,
486 	0x362db, 0x3e2db, 0x4553b, 0x4d53b, 0x5553b, 0x5d53b, 0x00000,
487 	0x00008, 0x002dc, 0x00524, 0x00902
488 }, rtl8812au_rf1_vals10_pa_g0_a0[] = {
489 	0xeac43, 0x38f47, 0x31157, 0x1c4ac, 0x931d1
490 }, rtl8812au_rf1_vals10_pa_a5[] = {
491 	0xeac43, 0x38f47, 0x31157, 0x1c4ac, 0x931d2
492 };
493 
494 static const struct rtwn_rf_prog rtl8812au_rf[] = {
495 	/* RF chain 0. */
496 	{
497 		nitems(rtl8812au_rf0_regs0),
498 		rtl8812au_rf0_regs0,
499 		rtl8812au_rf0_vals0,
500 		{ 0 },
501 		NULL
502 	},
503 	/* External 2GHz LNA, type 0 or 5. */
504 	{
505 		nitems(rtl8812au_rf0_regs1),
506 		rtl8812au_rf0_regs1,
507 		rtl8812au_rf0_vals1_lna_g0_g5,
508 		{
509 			R12A_COND_GLNA | R12A_COND_TYPE(0x0),
510 			R12A_COND_GLNA | R12A_COND_TYPE(0x5), 0
511 		},
512 		/* Others. */
513 		&(const struct rtwn_rf_prog){
514 			nitems(rtl8812au_rf0_regs1),
515 			rtl8812au_rf0_regs1,
516 			rtl8812au_rf0_vals1,
517 			{ 0 },
518 			NULL
519 		}
520 	},
521 	/* External 5GHz LNA, type 0. */
522 	{
523 		nitems(rtl8812au_rf0_regs2),
524 		rtl8812au_rf0_regs2,
525 		rtl8812au_rf0_vals2_lna_a0,
526 		{ R12A_COND_ALNA | R12A_COND_TYPE(0x0), 0 },
527 		/* Others. */
528 		&(const struct rtwn_rf_prog){
529 			nitems(rtl8812au_rf0_regs2),
530 			rtl8812au_rf0_regs2,
531 			rtl8812au_rf0_vals2,
532 			{ 0 },
533 			NULL
534 		}
535 	},
536 	{
537 		nitems(rtl8812au_rf0_regs3),
538 		rtl8812au_rf0_regs3,
539 		rtl8812au_rf0_vals3,
540 		{ 0 },
541 		NULL
542 	},
543 	/* External 2GHz LNA, type 0 or 5. */
544 	{
545 		nitems(rtl8812au_rf0_regs4),
546 		rtl8812au_rf0_regs4,
547 		rtl8812au_rf0_vals4_lna_g0_g5,
548 		{
549 			R12A_COND_GLNA | R12A_COND_TYPE(0x0),
550 			R12A_COND_GLNA | R12A_COND_TYPE(0x5), 0
551 		},
552 		/* Others */
553 		&(const struct rtwn_rf_prog){
554 			nitems(rtl8812au_rf0_regs4),
555 			rtl8812au_rf0_regs4,
556 			rtl8812au_rf0_vals4,
557 			{ 0 },
558 			NULL
559 		}
560 	},
561 	/* External 2GHz PA, type 0. */
562 	{
563 		nitems(rtl8812au_rf0_regs5),
564 		rtl8812au_rf0_regs5,
565 		rtl8812au_rf0_vals5_pa_g0,
566 		{ R12A_COND_GPA | R12A_COND_TYPE(0x0), 0 },
567 		/* Others. */
568 		&(const struct rtwn_rf_prog){
569 			nitems(rtl8812au_rf0_regs5),
570 			rtl8812au_rf0_regs5,
571 			rtl8812au_rf0_vals5,
572 			{ 0 },
573 			NULL
574 		}
575 	},
576 	{
577 		nitems(rtl8812au_rf0_regs6),
578 		rtl8812au_rf0_regs6,
579 		rtl8812au_rf0_vals6,
580 		{ 0 },
581 		NULL
582 	},
583 	/* External 5GHz PA, type 0. */
584 	{
585 		nitems(rtl8812au_rf0_regs7),
586 		rtl8812au_rf0_regs7,
587 		rtl8812au_rf0_vals7_pa_a0,
588 		{ R12A_COND_APA | R12A_COND_TYPE(0x0), 0 },
589 		/* External 5GHz PA, type 5. */
590 		&(const struct rtwn_rf_prog){
591 			nitems(rtl8812au_rf0_regs7),
592 			rtl8812au_rf0_regs7,
593 			rtl8812au_rf0_vals7_pa_a5,
594 			{ R12A_COND_APA | R12A_COND_TYPE(0x5), 0 },
595 			/* Others. */
596 			&(const struct rtwn_rf_prog){
597 				nitems(rtl8812au_rf0_regs7),
598 				rtl8812au_rf0_regs7,
599 				rtl8812au_rf0_vals7,
600 				{ 0 },
601 				NULL
602 			}
603 		}
604 	},
605 	/* External 5GHz PA, type 0 or 5. */
606 	{
607 		nitems(rtl8812au_rf0_regs8),
608 		rtl8812au_rf0_regs8,
609 		rtl8812au_rf0_vals8_pa_a0_a5,
610 		{
611 			R12A_COND_APA | R12A_COND_TYPE(0x0),
612 			R12A_COND_APA | R12A_COND_TYPE(0x5), 0
613 		},
614 		/* Others. */
615 		&(const struct rtwn_rf_prog){
616 			nitems(rtl8812au_rf0_regs8),
617 			rtl8812au_rf0_regs8,
618 			rtl8812au_rf0_vals8,
619 			{ 0 },
620 			NULL
621 		}
622 	},
623 	{
624 		nitems(rtl8812au_rf0_regs9),
625 		rtl8812au_rf0_regs9,
626 		rtl8812au_rf0_vals9,
627 		{ 0 },
628 		NULL
629 	},
630 	/* External 5GHz PA, type 0. */
631 	{
632 		nitems(rtl8812au_rf0_regs10),
633 		rtl8812au_rf0_regs10,
634 		rtl8812au_rf0_vals10_pa_a0,
635 		{ R12A_COND_APA | R12A_COND_TYPE(0x0), 0 },
636 		/* External 5GHz PA, type 5. */
637 		&(const struct rtwn_rf_prog){
638 			nitems(rtl8812au_rf0_regs10),
639 			rtl8812au_rf0_regs10,
640 			rtl8812au_rf0_vals10_pa_a5,
641 			{ R12A_COND_APA | R12A_COND_TYPE(0x5), 0 },
642 			/* Others. */
643 			&(const struct rtwn_rf_prog){
644 				nitems(rtl8812au_rf0_regs10),
645 				rtl8812au_rf0_regs10,
646 				rtl8812au_rf0_vals10,
647 				{ 0 },
648 				NULL
649 			}
650 		}
651 	},
652 	{
653 		nitems(rtl8812au_rf0_regs11),
654 		rtl8812au_rf0_regs11,
655 		rtl8812au_rf0_vals11,
656 		{ 0 },
657 		NULL
658 	},
659 	{ 0, NULL, NULL, { 0 },	NULL },
660 	/* RF chain 1. */
661 	{
662 		nitems(rtl8812au_rf1_regs0),
663 		rtl8812au_rf1_regs0,
664 		rtl8812au_rf1_vals0,
665 		{ 0 },
666 		NULL
667 	},
668 	/* rtl8812au_rf[1] */
669 	/* External 2GHz LNA, type 0 or 5. */
670 	{
671 		nitems(rtl8812au_rf0_regs1),
672 		rtl8812au_rf0_regs1,
673 		rtl8812au_rf0_vals1_lna_g0_g5,
674 		{
675 			R12A_COND_GLNA | R12A_COND_TYPE(0x0),
676 			R12A_COND_GLNA | R12A_COND_TYPE(0x5), 0
677 		},
678 		/* Others. */
679 		&(const struct rtwn_rf_prog){
680 			nitems(rtl8812au_rf0_regs1),
681 			rtl8812au_rf0_regs1,
682 			rtl8812au_rf0_vals1,
683 			{ 0 },
684 			NULL
685 		}
686 	},
687 	/* rtl8812au_rf[2] */
688 	/* External 5GHz LNA, type 0. */
689 	{
690 		nitems(rtl8812au_rf0_regs2),
691 		rtl8812au_rf0_regs2,
692 		rtl8812au_rf0_vals2_lna_a0,
693 		{ R12A_COND_ALNA | R12A_COND_TYPE(0x0), 0 },
694 		/* Others. */
695 		&(const struct rtwn_rf_prog){
696 			nitems(rtl8812au_rf0_regs2),
697 			rtl8812au_rf0_regs2,
698 			rtl8812au_rf0_vals2,
699 			{ 0 },
700 			NULL
701 		}
702 	},
703 	{
704 		nitems(rtl8812au_rf1_regs3),
705 		rtl8812au_rf1_regs3,
706 		rtl8812au_rf1_vals3,
707 		{ 0 },
708 		NULL
709 	},
710 	/* rtl8812au_rf[4] */
711 	/* External 2GHz LNA, type 0 or 5. */
712 	{
713 		nitems(rtl8812au_rf0_regs4),
714 		rtl8812au_rf0_regs4,
715 		rtl8812au_rf0_vals4_lna_g0_g5,
716 		{
717 			R12A_COND_GLNA | R12A_COND_TYPE(0x0),
718 			R12A_COND_GLNA | R12A_COND_TYPE(0x5), 0
719 		},
720 		/* Others */
721 		&(const struct rtwn_rf_prog){
722 			nitems(rtl8812au_rf0_regs4),
723 			rtl8812au_rf0_regs4,
724 			rtl8812au_rf0_vals4,
725 			{ 0 },
726 			NULL
727 		}
728 	},
729 	/* rtl8812au_rf[5] */
730 	/* External 2GHz PA, type 0. */
731 	{
732 		nitems(rtl8812au_rf0_regs5),
733 		rtl8812au_rf0_regs5,
734 		rtl8812au_rf0_vals5_pa_g0,
735 		{ R12A_COND_GPA | R12A_COND_TYPE(0x0), 0 },
736 		/* Others. */
737 		&(const struct rtwn_rf_prog){
738 			nitems(rtl8812au_rf0_regs5),
739 			rtl8812au_rf0_regs5,
740 			rtl8812au_rf0_vals5,
741 			{ 0 },
742 			NULL
743 		}
744 	},
745 	{
746 		nitems(rtl8812au_rf0_regs6),
747 		rtl8812au_rf0_regs6,
748 		rtl8812au_rf1_vals6,
749 		{ 0 },
750 		NULL
751 	},
752 	/* External 5GHz PA, type 0. */
753 	{
754 		nitems(rtl8812au_rf0_regs7),
755 		rtl8812au_rf0_regs7,
756 		rtl8812au_rf0_vals7_pa_a0,
757 		{ R12A_COND_APA | R12A_COND_TYPE(0x0), 0 },
758 		/* External 5GHz PA, type 5. */
759 		&(const struct rtwn_rf_prog){
760 			nitems(rtl8812au_rf0_regs7),
761 			rtl8812au_rf0_regs7,
762 			rtl8812au_rf1_vals7_pa_a5,
763 			{ R12A_COND_APA | R12A_COND_TYPE(0x5), 0 },
764 			/* Others. */
765 			&(const struct rtwn_rf_prog){
766 				nitems(rtl8812au_rf0_regs7),
767 				rtl8812au_rf0_regs7,
768 				rtl8812au_rf0_vals7,
769 				{ 0 },
770 				NULL
771 			}
772 		}
773 	},
774 	/* External 5GHz PA, type 0 or 5. */
775 	{
776 		nitems(rtl8812au_rf0_regs8),
777 		rtl8812au_rf0_regs8,
778 		rtl8812au_rf1_vals8_pa_a0_a5,
779 		{
780 			R12A_COND_APA | R12A_COND_TYPE(0x0),
781 			R12A_COND_APA | R12A_COND_TYPE(0x5), 0
782 		},
783 		/* Others. */
784 		&(const struct rtwn_rf_prog){
785 			nitems(rtl8812au_rf0_regs8),
786 			rtl8812au_rf0_regs8,
787 			rtl8812au_rf0_vals8,
788 			{ 0 },
789 			NULL
790 		}
791 	},
792 	{
793 		nitems(rtl8812au_rf0_regs9) - 1,
794 		rtl8812au_rf0_regs9,
795 		rtl8812au_rf0_vals9,
796 		{ 0 },
797 		NULL
798 	},
799 
800 	/* External 2GHz or 5GHz PA, type 0. */
801 	{
802 		nitems(rtl8812au_rf0_regs10),
803 		rtl8812au_rf0_regs10,
804 		rtl8812au_rf1_vals10_pa_g0_a0,
805 		{
806 			R12A_COND_GPA | R12A_COND_TYPE(0x0),
807 			R12A_COND_APA | R12A_COND_TYPE(0x0), 0
808 		},
809 		/* External 5GHz PA, type 5. */
810 		&(const struct rtwn_rf_prog){
811 			nitems(rtl8812au_rf0_regs10),
812 			rtl8812au_rf0_regs10,
813 			rtl8812au_rf1_vals10_pa_a5,
814 			{ R12A_COND_APA | R12A_COND_TYPE(0x5), 0 },
815 			/* Others. */
816 			&(const struct rtwn_rf_prog){
817 				nitems(rtl8812au_rf0_regs10),
818 				rtl8812au_rf0_regs10,
819 				rtl8812au_rf0_vals10,
820 				{ 0 },
821 				NULL
822 			}
823 		}
824 	},
825 	{
826 		1,
827 		rtl8812au_rf0_regs11,
828 		rtl8812au_rf0_vals11,
829 		{ 0 },
830 		NULL
831 	},
832 	{ 0, NULL, NULL, { 0 }, NULL }
833 };
834 
835 
836 /*
837  * Registers to save before IQ calibration.
838  */
839 static const uint16_t r12a_iq_bb_regs[] = {
840 	0x520, 0x550, 0x808, 0xa04, 0x90c, 0xc00, 0xe00, 0x838, 0x82c
841 };
842 
843 static const uint16_t r12a_iq_afe_regs[] = {
844 	0xc5c, 0xc60, 0xc64, 0xc68, 0xcb0, 0xcb4, 0xe5c, 0xe60, 0xe64,
845 	0xe68, 0xeb0, 0xeb4
846 };
847 
848 static const uint8_t r12a_iq_rf_regs[] = {
849 	0x65, 0x8f, 0x0
850 };
851 
852 #endif	/* R12A_PRIV_H */
853