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