xref: /freebsd/sys/dev/rtwn/rtl8821a/r21a_priv.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1*7453645fSAndriy Voskoboinyk /*-
2*7453645fSAndriy Voskoboinyk  * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org>
3*7453645fSAndriy Voskoboinyk  * All rights reserved.
4*7453645fSAndriy Voskoboinyk  *
5*7453645fSAndriy Voskoboinyk  * Redistribution and use in source and binary forms, with or without
6*7453645fSAndriy Voskoboinyk  * modification, are permitted provided that the following conditions
7*7453645fSAndriy Voskoboinyk  * are met:
8*7453645fSAndriy Voskoboinyk  * 1. Redistributions of source code must retain the above copyright
9*7453645fSAndriy Voskoboinyk  *    notice, this list of conditions and the following disclaimer.
10*7453645fSAndriy Voskoboinyk  * 2. Redistributions in binary form must reproduce the above copyright
11*7453645fSAndriy Voskoboinyk  *    notice, this list of conditions and the following disclaimer in the
12*7453645fSAndriy Voskoboinyk  *    documentation and/or other materials provided with the distribution.
13*7453645fSAndriy Voskoboinyk  *
14*7453645fSAndriy Voskoboinyk  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*7453645fSAndriy Voskoboinyk  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*7453645fSAndriy Voskoboinyk  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*7453645fSAndriy Voskoboinyk  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*7453645fSAndriy Voskoboinyk  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*7453645fSAndriy Voskoboinyk  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*7453645fSAndriy Voskoboinyk  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*7453645fSAndriy Voskoboinyk  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*7453645fSAndriy Voskoboinyk  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*7453645fSAndriy Voskoboinyk  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*7453645fSAndriy Voskoboinyk  * SUCH DAMAGE.
25*7453645fSAndriy Voskoboinyk  */
26*7453645fSAndriy Voskoboinyk 
27*7453645fSAndriy Voskoboinyk #ifndef R21A_PRIV_H
28*7453645fSAndriy Voskoboinyk #define R21A_PRIV_H
29*7453645fSAndriy Voskoboinyk 
30*7453645fSAndriy Voskoboinyk /*
31*7453645fSAndriy Voskoboinyk  * MAC initialization values.
32*7453645fSAndriy Voskoboinyk  */
33*7453645fSAndriy Voskoboinyk static const struct rtwn_mac_prog rtl8821au_mac[] = {
34*7453645fSAndriy Voskoboinyk 	{ 0x421, 0x0f }, { 0x428, 0x0a }, { 0x429, 0x10 }, { 0x430, 0x00 },
35*7453645fSAndriy Voskoboinyk 	{ 0x431, 0x00 }, { 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 },
36*7453645fSAndriy Voskoboinyk 	{ 0x435, 0x05 }, { 0x436, 0x07 }, { 0x437, 0x08 }, { 0x43c, 0x04 },
37*7453645fSAndriy Voskoboinyk 	{ 0x43d, 0x05 }, { 0x43e, 0x07 }, { 0x43f, 0x08 }, { 0x440, 0x5d },
38*7453645fSAndriy Voskoboinyk 	{ 0x441, 0x01 }, { 0x442, 0x00 }, { 0x444, 0x10 }, { 0x445, 0x00 },
39*7453645fSAndriy Voskoboinyk 	{ 0x446, 0x00 }, { 0x447, 0x00 }, { 0x448, 0x00 }, { 0x449, 0xf0 },
40*7453645fSAndriy Voskoboinyk 	{ 0x44a, 0x0f }, { 0x44b, 0x3e }, { 0x44c, 0x10 }, { 0x44d, 0x00 },
41*7453645fSAndriy Voskoboinyk 	{ 0x44e, 0x00 }, { 0x44f, 0x00 }, { 0x450, 0x00 }, { 0x451, 0xf0 },
42*7453645fSAndriy Voskoboinyk 	{ 0x452, 0x0f }, { 0x453, 0x00 }, { 0x456, 0x5e }, { 0x460, 0x66 },
43*7453645fSAndriy Voskoboinyk 	{ 0x461, 0x66 }, { 0x4c8, 0x3f }, { 0x4c9, 0xff }, { 0x4cc, 0xff },
44*7453645fSAndriy Voskoboinyk 	{ 0x4cd, 0xff }, { 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 },
45*7453645fSAndriy Voskoboinyk 	{ 0x502, 0x2f }, { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 },
46*7453645fSAndriy Voskoboinyk 	{ 0x506, 0x5e }, { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 },
47*7453645fSAndriy Voskoboinyk 	{ 0x50a, 0x5e }, { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 },
48*7453645fSAndriy Voskoboinyk 	{ 0x50e, 0x00 }, { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a },
49*7453645fSAndriy Voskoboinyk 	{ 0x516, 0x0a }, { 0x525, 0x4f }, { 0x550, 0x10 }, { 0x551, 0x10 },
50*7453645fSAndriy Voskoboinyk 	{ 0x559, 0x02 }, { 0x55c, 0x50 }, { 0x55d, 0xff }, { 0x605, 0x30 },
51*7453645fSAndriy Voskoboinyk 	{ 0x607, 0x07 }, { 0x608, 0x0e }, { 0x609, 0x2a }, { 0x620, 0xff },
52*7453645fSAndriy Voskoboinyk 	{ 0x621, 0xff }, { 0x622, 0xff }, { 0x623, 0xff }, { 0x624, 0xff },
53*7453645fSAndriy Voskoboinyk 	{ 0x625, 0xff }, { 0x626, 0xff }, { 0x627, 0xff }, { 0x638, 0x50 },
54*7453645fSAndriy Voskoboinyk 	{ 0x63c, 0x0a }, { 0x63d, 0x0a }, { 0x63e, 0x0e }, { 0x63f, 0x0e },
55*7453645fSAndriy Voskoboinyk 	{ 0x640, 0x40 }, { 0x642, 0x40 }, { 0x643, 0x00 }, { 0x652, 0xc8 },
56*7453645fSAndriy Voskoboinyk 	{ 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 }, { 0x702, 0x65 },
57*7453645fSAndriy Voskoboinyk 	{ 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, { 0x70a, 0x65 },
58*7453645fSAndriy Voskoboinyk 	{ 0x70b, 0x87 }, { 0x718, 0x40 }
59*7453645fSAndriy Voskoboinyk };
60*7453645fSAndriy Voskoboinyk 
61*7453645fSAndriy Voskoboinyk /*
62*7453645fSAndriy Voskoboinyk  * Baseband initialization values.
63*7453645fSAndriy Voskoboinyk  */
64*7453645fSAndriy Voskoboinyk #define R21A_COND_EXT_PA_5G	0x01
65*7453645fSAndriy Voskoboinyk #define R21A_COND_EXT_LNA_5G	0x02
66*7453645fSAndriy Voskoboinyk #define R21A_COND_BOARD_DEF	0x04
67*7453645fSAndriy Voskoboinyk #define R21A_COND_BT		0x08
68*7453645fSAndriy Voskoboinyk 
69*7453645fSAndriy Voskoboinyk static const uint16_t rtl8821au_bb_regs[] = {
70*7453645fSAndriy Voskoboinyk 	0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x820, 0x824,
71*7453645fSAndriy Voskoboinyk 	0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 0x840, 0x844, 0x848,
72*7453645fSAndriy Voskoboinyk 	0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 0x864, 0x868, 0x86c,
73*7453645fSAndriy Voskoboinyk 	0x870, 0x874, 0x878, 0x87c, 0x8a0, 0x8a4, 0x8a8, 0x8ac, 0x8b4,
74*7453645fSAndriy Voskoboinyk 	0x8b8, 0x8bc, 0x8c0, 0x8c4, 0x8c8, 0x8cc, 0x8d4, 0x8d8, 0x8f8,
75*7453645fSAndriy Voskoboinyk 	0x8fc, 0x900, 0x90c, 0x910, 0x914, 0x918, 0x91c, 0x920, 0x924,
76*7453645fSAndriy Voskoboinyk 	0x928, 0x92c, 0x930, 0x934, 0x960, 0x964, 0x968, 0x96c, 0x970,
77*7453645fSAndriy Voskoboinyk 	0x974, 0x978, 0x97c, 0x980, 0x984, 0x988, 0x990, 0x994, 0x998,
78*7453645fSAndriy Voskoboinyk 	0x99c, 0x9a0, 0x9a4, 0x9a8, 0x9ac, 0x9b0, 0x9b4, 0x9b8, 0x9bc,
79*7453645fSAndriy Voskoboinyk 	0x9d0, 0x9d4, 0x9d8, 0x9dc, 0x9e0, 0x9e4, 0x9e8, 0xa00, 0xa04,
80*7453645fSAndriy Voskoboinyk 	0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 0xa20, 0xa24, 0xa28,
81*7453645fSAndriy Voskoboinyk 	0xa2c, 0xa70, 0xa74, 0xa78, 0xa7c, 0xa80, 0xa84, 0xb00, 0xb04,
82*7453645fSAndriy Voskoboinyk 	0xb08, 0xb0c, 0xb10, 0xb14, 0xb18, 0xb1c, 0xb20, 0xb24, 0xb28,
83*7453645fSAndriy Voskoboinyk 	0xb2c, 0xb30, 0xb34, 0xb38, 0xb3c, 0xb40, 0xb44, 0xb48, 0xb4c,
84*7453645fSAndriy Voskoboinyk 	0xb50, 0xb54, 0xb58, 0xb5c, 0xc00, 0xc04, 0xc08, 0xc0c, 0xc10,
85*7453645fSAndriy Voskoboinyk 	0xc14, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 0xc30, 0xc34, 0xc38,
86*7453645fSAndriy Voskoboinyk 	0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 0xc54, 0xc58, 0xc5c,
87*7453645fSAndriy Voskoboinyk 	0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74, 0xc78, 0xc7c, 0xc80,
88*7453645fSAndriy Voskoboinyk 	0xc84, 0xc94, 0xc98, 0xc9c, 0xca0, 0xca4, 0xca8, 0xcb0, 0xcb4,
89*7453645fSAndriy Voskoboinyk 	0xcb8
90*7453645fSAndriy Voskoboinyk };
91*7453645fSAndriy Voskoboinyk 
92*7453645fSAndriy Voskoboinyk static const uint32_t rtl8821au_bb_vals[] = {
93*7453645fSAndriy Voskoboinyk 	0x0020d090, 0x080112e0, 0x0e028211, 0x92131111, 0x20101261,
94*7453645fSAndriy Voskoboinyk 	0x020c3d10, 0x03a00385, 0x00000000, 0x00030fe0, 0x00000000,
95*7453645fSAndriy Voskoboinyk 	0x002081dd, 0x2aaaeec8, 0x0037a706, 0x06489b44, 0x0000095b,
96*7453645fSAndriy Voskoboinyk 	0xc0000001, 0x40003cde, 0x62103f8b, 0x6cfdffb8, 0x28874706,
97*7453645fSAndriy Voskoboinyk 	0x0001520c, 0x8060e000, 0x74210168, 0x6929c321, 0x79727432,
98*7453645fSAndriy Voskoboinyk 	0x8ca7a314, 0x888c2878, 0x08888888, 0x31612c2e, 0x00000152,
99*7453645fSAndriy Voskoboinyk 	0x000fd000, 0x00000013, 0x7f7f7f7f, 0xa2000338, 0x0ff0fa0a,
100*7453645fSAndriy Voskoboinyk 	0x000fc080, 0x6c10d7ff, 0x0ca52090, 0x1bf00020, 0x00000000,
101*7453645fSAndriy Voskoboinyk 	0x00013169, 0x08248492, 0x940008a0, 0x290b5612, 0x400002c0,
102*7453645fSAndriy Voskoboinyk 	0x00000000, 0x00000700, 0x00000000, 0x0000fc00, 0x00000404,
103*7453645fSAndriy Voskoboinyk 	0x1c1028c0, 0x64b11a1c, 0xe0767233, 0x055aa500, 0x00000004,
104*7453645fSAndriy Voskoboinyk 	0xfffe0000, 0xfffffffe, 0x001fffff, 0x00000000, 0x00000000,
105*7453645fSAndriy Voskoboinyk 	0x00000000, 0x00000000, 0x801fffff, 0x000003ff, 0x00000000,
106*7453645fSAndriy Voskoboinyk 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x27100000,
107*7453645fSAndriy Voskoboinyk 	0xffff0100, 0xffffff5c, 0xffffffff, 0x000000ff, 0x00480080,
108*7453645fSAndriy Voskoboinyk 	0x00000000, 0x00000000, 0x81081008, 0x01081008, 0x01081008,
109*7453645fSAndriy Voskoboinyk 	0x01081008, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
110*7453645fSAndriy Voskoboinyk 	0x00005d00, 0x00000003, 0x00000001, 0x00d047c8, 0x01ff800c,
111*7453645fSAndriy Voskoboinyk 	0x8c8a8300, 0x2e68000f, 0x9500bb78, 0x11144028, 0x00881117,
112*7453645fSAndriy Voskoboinyk 	0x89140f00, 0x1a1b0000, 0x090e1317, 0x00000204, 0x00900000,
113*7453645fSAndriy Voskoboinyk 	0x101fff00, 0x00000008, 0x00000900, 0x225b0606, 0x21805490,
114*7453645fSAndriy Voskoboinyk 	0x001f0000, 0x03100040, 0x0000b000, 0xae0201eb, 0x01003207,
115*7453645fSAndriy Voskoboinyk 	0x00009807, 0x01000000, 0x00000002, 0x00000002, 0x0000001f,
116*7453645fSAndriy Voskoboinyk 	0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c, 0x13121110,
117*7453645fSAndriy Voskoboinyk 	0x17161514, 0x0000003a, 0x00000000, 0x00000000, 0x13000032,
118*7453645fSAndriy Voskoboinyk 	0x48080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
119*7453645fSAndriy Voskoboinyk 	0x00000007, 0x00042020, 0x80410231, 0x00000000, 0x00000100,
120*7453645fSAndriy Voskoboinyk 	0x01000000, 0x40000003, 0x2c2c2c2c, 0x30303030, 0x30303030,
121*7453645fSAndriy Voskoboinyk 	0x2c2c2c2c, 0x2c2c2c2c, 0x2c2c2c2c, 0x2c2c2c2c, 0x2a2a2a2a,
122*7453645fSAndriy Voskoboinyk 	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000020,
123*7453645fSAndriy Voskoboinyk 	0x001c1208, 0x30000c1c, 0x00000058, 0x34344443, 0x07003333,
124*7453645fSAndriy Voskoboinyk 	0x19791979, 0x19791979, 0x19791979, 0x19791979, 0x19791979,
125*7453645fSAndriy Voskoboinyk 	0x19791979, 0x19791979, 0x19791979, 0x0100005c, 0x00000000,
126*7453645fSAndriy Voskoboinyk 	0x00000000, 0x00000029, 0x08040201, 0x80402010, 0x77775747,
127*7453645fSAndriy Voskoboinyk 	0x10000077, 0x00508240
128*7453645fSAndriy Voskoboinyk };
129*7453645fSAndriy Voskoboinyk 
130*7453645fSAndriy Voskoboinyk static const struct rtwn_bb_prog rtl8821au_bb[] = {
131*7453645fSAndriy Voskoboinyk 	{
132*7453645fSAndriy Voskoboinyk 		nitems(rtl8821au_bb_regs),
133*7453645fSAndriy Voskoboinyk 		rtl8821au_bb_regs,
134*7453645fSAndriy Voskoboinyk 		rtl8821au_bb_vals,
135*7453645fSAndriy Voskoboinyk 		{ 0 },
136*7453645fSAndriy Voskoboinyk 		NULL
137*7453645fSAndriy Voskoboinyk 	}
138*7453645fSAndriy Voskoboinyk };
139*7453645fSAndriy Voskoboinyk 
140*7453645fSAndriy Voskoboinyk static const uint32_t rtl8821au_agc_vals0[] = {
141*7453645fSAndriy Voskoboinyk 	0xbf000001, 0xbf020001, 0xbf040001, 0xbf060001, 0xbe080001,
142*7453645fSAndriy Voskoboinyk 	0xbd0a0001, 0xbc0c0001, 0xba0e0001, 0xb9100001, 0xb8120001,
143*7453645fSAndriy Voskoboinyk 	0xb7140001, 0xb6160001, 0xb5180001, 0xb41a0001, 0xb31c0001,
144*7453645fSAndriy Voskoboinyk 	0xb21e0001, 0xb1200001, 0xb0220001, 0xaf240001, 0xae260001,
145*7453645fSAndriy Voskoboinyk 	0xad280001, 0xac2a0001, 0xab2c0001, 0xaa2e0001, 0xa9300001,
146*7453645fSAndriy Voskoboinyk 	0xa8320001, 0xa7340001, 0xa6360001, 0xa5380001, 0xa43a0001,
147*7453645fSAndriy Voskoboinyk 	0x683c0001, 0x673e0001, 0x66400001, 0x65420001, 0x64440001,
148*7453645fSAndriy Voskoboinyk 	0x63460001, 0x62480001, 0x614a0001, 0x474c0001, 0x464e0001,
149*7453645fSAndriy Voskoboinyk 	0x45500001, 0x44520001, 0x43540001, 0x42560001, 0x41580001,
150*7453645fSAndriy Voskoboinyk 	0x285a0001, 0x275c0001, 0x265e0001, 0x25600001, 0x24620001,
151*7453645fSAndriy Voskoboinyk 	0x0a640001, 0x09660001, 0x08680001, 0x076a0001, 0x066c0001,
152*7453645fSAndriy Voskoboinyk 	0x056e0001, 0x04700001, 0x03720001, 0x02740001, 0x01760001,
153*7453645fSAndriy Voskoboinyk 	0x01780001, 0x017a0001, 0x017c0001, 0x017e0001
154*7453645fSAndriy Voskoboinyk }, rtl8821au_agc_vals1_pa_lna_5g[] = {
155*7453645fSAndriy Voskoboinyk 	0xfb000101, 0xfa020101, 0xf9040101, 0xf8060101, 0xf7080101,
156*7453645fSAndriy Voskoboinyk 	0xf60a0101, 0xf50c0101, 0xf40e0101, 0xf3100101, 0xf2120101,
157*7453645fSAndriy Voskoboinyk 	0xf1140101, 0xf0160101, 0xef180101, 0xee1a0101, 0xed1c0101,
158*7453645fSAndriy Voskoboinyk 	0xec1e0101, 0xeb200101, 0xea220101, 0xe9240101, 0xe8260101,
159*7453645fSAndriy Voskoboinyk 	0xe7280101, 0xe62a0101, 0xe52c0101, 0xe42e0101, 0xe3300101,
160*7453645fSAndriy Voskoboinyk 	0xa5320101, 0xa4340101, 0xa3360101, 0x87380101, 0x863a0101,
161*7453645fSAndriy Voskoboinyk 	0x853c0101, 0x843e0101, 0x69400101, 0x68420101, 0x67440101,
162*7453645fSAndriy Voskoboinyk 	0x66460101, 0x49480101, 0x484a0101, 0x474c0101, 0x2a4e0101,
163*7453645fSAndriy Voskoboinyk 	0x29500101, 0x28520101, 0x27540101, 0x26560101, 0x25580101,
164*7453645fSAndriy Voskoboinyk 	0x245a0101, 0x235c0101, 0x055e0101, 0x04600101, 0x03620101,
165*7453645fSAndriy Voskoboinyk 	0x02640101, 0x01660101, 0x01680101, 0x016a0101, 0x016c0101,
166*7453645fSAndriy Voskoboinyk 	0x016e0101, 0x01700101, 0x01720101
167*7453645fSAndriy Voskoboinyk }, rtl8821au_agc_vals1[] = {
168*7453645fSAndriy Voskoboinyk 	0xff000101, 0xff020101, 0xfe040101, 0xfd060101, 0xfc080101,
169*7453645fSAndriy Voskoboinyk 	0xfd0a0101, 0xfc0c0101, 0xfb0e0101, 0xfa100101, 0xf9120101,
170*7453645fSAndriy Voskoboinyk 	0xf8140101, 0xf7160101, 0xf6180101, 0xf51a0101, 0xf41c0101,
171*7453645fSAndriy Voskoboinyk 	0xf31e0101, 0xf2200101, 0xf1220101, 0xf0240101, 0xef260101,
172*7453645fSAndriy Voskoboinyk 	0xee280101, 0xed2a0101, 0xec2c0101, 0xeb2e0101, 0xea300101,
173*7453645fSAndriy Voskoboinyk 	0xe9320101, 0xe8340101, 0xe7360101, 0xe6380101, 0xe53a0101,
174*7453645fSAndriy Voskoboinyk 	0xe43c0101, 0xe33e0101, 0xa5400101, 0xa4420101, 0xa3440101,
175*7453645fSAndriy Voskoboinyk 	0x87460101, 0x86480101, 0x854a0101, 0x844c0101, 0x694e0101,
176*7453645fSAndriy Voskoboinyk 	0x68500101, 0x67520101, 0x66540101, 0x49560101, 0x48580101,
177*7453645fSAndriy Voskoboinyk 	0x475a0101, 0x2a5c0101, 0x295e0101, 0x28600101, 0x27620101,
178*7453645fSAndriy Voskoboinyk 	0x26640101, 0x25660101, 0x24680101, 0x236a0101, 0x056c0101,
179*7453645fSAndriy Voskoboinyk 	0x046e0101, 0x03700101, 0x02720101
180*7453645fSAndriy Voskoboinyk }, rtl8821au_agc_vals2[] = {
181*7453645fSAndriy Voskoboinyk 	0x01740101, 0x01760101, 0x01780101, 0x017a0101, 0x017c0101,
182*7453645fSAndriy Voskoboinyk 	0x017e0101
183*7453645fSAndriy Voskoboinyk };
184*7453645fSAndriy Voskoboinyk 
185*7453645fSAndriy Voskoboinyk static const struct rtwn_agc_prog rtl8821au_agc[] = {
186*7453645fSAndriy Voskoboinyk 	{
187*7453645fSAndriy Voskoboinyk 		nitems(rtl8821au_agc_vals0),
188*7453645fSAndriy Voskoboinyk 		rtl8821au_agc_vals0,
189*7453645fSAndriy Voskoboinyk 		{ 0 },
190*7453645fSAndriy Voskoboinyk 		NULL
191*7453645fSAndriy Voskoboinyk 	},
192*7453645fSAndriy Voskoboinyk 	/*
193*7453645fSAndriy Voskoboinyk 	 * For devices with external 5GHz PA / LNA.
194*7453645fSAndriy Voskoboinyk 	 */
195*7453645fSAndriy Voskoboinyk 	{
196*7453645fSAndriy Voskoboinyk 		nitems(rtl8821au_agc_vals1_pa_lna_5g),
197*7453645fSAndriy Voskoboinyk 		rtl8821au_agc_vals1_pa_lna_5g,
198*7453645fSAndriy Voskoboinyk 		{ R21A_COND_EXT_PA_5G | R21A_COND_EXT_LNA_5G, 0 },
199*7453645fSAndriy Voskoboinyk 		/*
200*7453645fSAndriy Voskoboinyk 		 * Others.
201*7453645fSAndriy Voskoboinyk 		 */
202*7453645fSAndriy Voskoboinyk 		&(const struct rtwn_agc_prog){
203*7453645fSAndriy Voskoboinyk 			nitems(rtl8821au_agc_vals1),
204*7453645fSAndriy Voskoboinyk 			rtl8821au_agc_vals1,
205*7453645fSAndriy Voskoboinyk 			{ 0 },
206*7453645fSAndriy Voskoboinyk 			NULL
207*7453645fSAndriy Voskoboinyk 		}
208*7453645fSAndriy Voskoboinyk 	},
209*7453645fSAndriy Voskoboinyk 	{
210*7453645fSAndriy Voskoboinyk 		nitems(rtl8821au_agc_vals2),
211*7453645fSAndriy Voskoboinyk 		rtl8821au_agc_vals2,
212*7453645fSAndriy Voskoboinyk 		{ 0 },
213*7453645fSAndriy Voskoboinyk 		NULL
214*7453645fSAndriy Voskoboinyk 	}
215*7453645fSAndriy Voskoboinyk };
216*7453645fSAndriy Voskoboinyk 
217*7453645fSAndriy Voskoboinyk /*
218*7453645fSAndriy Voskoboinyk  * RF initialization values.
219*7453645fSAndriy Voskoboinyk  */
220*7453645fSAndriy Voskoboinyk static const uint8_t rtl8821au_rf_regs0[] = {
221*7453645fSAndriy Voskoboinyk 	0x18, 0x56, 0x66, 0x00, 0x1e, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
222*7453645fSAndriy Voskoboinyk 	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0xef, 0x3e, 0x3f,
223*7453645fSAndriy Voskoboinyk 	0x3e, 0x3f, 0x3e, 0x3f, 0x3e, 0x3f, 0xef, 0x18, 0x89, 0x8b, 0xef,
224*7453645fSAndriy Voskoboinyk 	0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b,
225*7453645fSAndriy Voskoboinyk 	0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a,
226*7453645fSAndriy Voskoboinyk 	0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c,
227*7453645fSAndriy Voskoboinyk 	0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b,
228*7453645fSAndriy Voskoboinyk 	0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a,
229*7453645fSAndriy Voskoboinyk 	0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0x3a, 0x3b, 0x3c, 0xef, 0xef
230*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_regs1[] = {
231*7453645fSAndriy Voskoboinyk 	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
232*7453645fSAndriy Voskoboinyk 	0x34, 0x34
233*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_regs2[] = {
234*7453645fSAndriy Voskoboinyk 	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
235*7453645fSAndriy Voskoboinyk 	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0xef, 0x18,
236*7453645fSAndriy Voskoboinyk 	0xef
237*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_regs3[] = {
238*7453645fSAndriy Voskoboinyk 	0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0xef, 0x18,
239*7453645fSAndriy Voskoboinyk 	0xef, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
240*7453645fSAndriy Voskoboinyk 	0x36, 0x36, 0xef, 0xef, 0x3c, 0x3c
241*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_regs4[] = {
242*7453645fSAndriy Voskoboinyk 	0x3c, 0xef, 0x18, 0xef, 0x08, 0xef, 0xdf, 0x1f, 0x58, 0x59, 0x61,
243*7453645fSAndriy Voskoboinyk 	0x62, 0x63, 0x64, 0x65
244*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_regs5[] = {
245*7453645fSAndriy Voskoboinyk 	0x18, 0xef, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
246*7453645fSAndriy Voskoboinyk 	0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xef, 0xef, 0x34, 0x34,
247*7453645fSAndriy Voskoboinyk 	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0xef, 0xed,
248*7453645fSAndriy Voskoboinyk 	0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
249*7453645fSAndriy Voskoboinyk 	0xed, 0xed, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xed,
250*7453645fSAndriy Voskoboinyk 	0xef, 0xdf, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0xef, 0x51,
251*7453645fSAndriy Voskoboinyk 	0x52, 0x53, 0x54, 0x56, 0x51, 0x52, 0x53, 0x70, 0x71, 0x72, 0x74,
252*7453645fSAndriy Voskoboinyk 	0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0xed, 0x45, 0x45, 0x45,
253*7453645fSAndriy Voskoboinyk 	0x46, 0x46, 0x46, 0x46, 0xdf, 0xb3, 0xb4, 0xb7, 0x1c, 0xc4, 0x18,
254*7453645fSAndriy Voskoboinyk 	0xfe, 0xfe, 0x18,
255*7453645fSAndriy Voskoboinyk };
256*7453645fSAndriy Voskoboinyk 
257*7453645fSAndriy Voskoboinyk static const uint32_t rtl8821au_rf_vals0[] = {
258*7453645fSAndriy Voskoboinyk 	0x1712a, 0x51cf2, 0x40000, 0x10000, 0x80000, 0x00830, 0x21800,
259*7453645fSAndriy Voskoboinyk 	0x28000, 0x48000, 0x94838, 0x44980, 0x48000, 0x0d480, 0x42240,
260*7453645fSAndriy Voskoboinyk 	0xf0380, 0x90000, 0x22852, 0x65540, 0x88001, 0x20000, 0x00380,
261*7453645fSAndriy Voskoboinyk 	0x90018, 0x20380, 0xa0018, 0x40308, 0xa0018, 0x60018, 0xa0018,
262*7453645fSAndriy Voskoboinyk 	0x00000, 0x1712a, 0x00080, 0x80180, 0x01000, 0x00244, 0x38027,
263*7453645fSAndriy Voskoboinyk 	0x82000, 0x00244, 0x30113, 0x82000, 0x0014c, 0x28027, 0x82000,
264*7453645fSAndriy Voskoboinyk 	0x000cc, 0x27027, 0x42000, 0x0014c, 0x1f913, 0x42000, 0x0010c,
265*7453645fSAndriy Voskoboinyk 	0x17f10, 0x12000, 0x000d0, 0x08027, 0xca000, 0x00244, 0x78027,
266*7453645fSAndriy Voskoboinyk 	0x82000, 0x00244, 0x70113, 0x82000, 0x0014c, 0x68027, 0x82000,
267*7453645fSAndriy Voskoboinyk 	0x000cc, 0x67027, 0x42000, 0x0014c, 0x5f913, 0x42000, 0x0010c,
268*7453645fSAndriy Voskoboinyk 	0x57f10, 0x12000, 0x000d0, 0x48027, 0xca000, 0x00244, 0xb8027,
269*7453645fSAndriy Voskoboinyk 	0x82000, 0x00244, 0xb0113, 0x82000, 0x0014c, 0xa8027, 0x82000,
270*7453645fSAndriy Voskoboinyk 	0x000cc, 0xa7027, 0x42000, 0x0014c, 0x9f913, 0x42000, 0x0010c,
271*7453645fSAndriy Voskoboinyk 	0x97f10, 0x12000, 0x000d0, 0x88027, 0xca000, 0x00000, 0x01100
272*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals1_def_or_bt[] = {
273*7453645fSAndriy Voskoboinyk 	0x4adf5, 0x49df2, 0x48def, 0x47dec, 0x46de9, 0x45ccb, 0x4488d,
274*7453645fSAndriy Voskoboinyk 	0x4348d, 0x4248a, 0x4108d, 0x4008a, 0x2adf4, 0x29df1
275*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals1_ext_5g[] = {
276*7453645fSAndriy Voskoboinyk 	0x4a0f3, 0x490b1, 0x480ae, 0x470ab, 0x4608b, 0x45069, 0x44048,
277*7453645fSAndriy Voskoboinyk 	0x43045, 0x42026, 0x41023, 0x40002, 0x2a0f3, 0x290f0
278*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals1[] = {
279*7453645fSAndriy Voskoboinyk 	0x4adf7, 0x49df3, 0x48def, 0x47dec, 0x46de9, 0x45ccb, 0x4488d,
280*7453645fSAndriy Voskoboinyk 	0x4348d, 0x4248a, 0x4108d, 0x4008a, 0x2adf7, 0x29df2
281*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals2_ext_5g[] = {
282*7453645fSAndriy Voskoboinyk 	0x280af, 0x270ac, 0x2608b, 0x25069, 0x24048, 0x23045, 0x22026,
283*7453645fSAndriy Voskoboinyk 	0x21023, 0x20002, 0x0a0d7, 0x090d3, 0x080b1, 0x070ae, 0x0608d,
284*7453645fSAndriy Voskoboinyk 	0x0506b, 0x0404a, 0x03047, 0x02044, 0x01025, 0x00004, 0x00000,
285*7453645fSAndriy Voskoboinyk 	0x1712a, 0x00040
286*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals2[] = {
287*7453645fSAndriy Voskoboinyk 	0x28dee, 0x27deb, 0x26ccd, 0x25cca, 0x2488c, 0x2384c, 0x22849,
288*7453645fSAndriy Voskoboinyk 	0x21449, 0x2004d, 0x0adf7, 0x09df4, 0x08df1, 0x07dee, 0x06dcd,
289*7453645fSAndriy Voskoboinyk 	0x05ccd, 0x04cca, 0x0388c, 0x02888, 0x01488, 0x00486, 0x00000,
290*7453645fSAndriy Voskoboinyk 	0x1712a, 0x00040
291*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals3_def_or_bt[] = {
292*7453645fSAndriy Voskoboinyk 	0x00128, 0x08128, 0x10128, 0x201c8, 0x281c8, 0x301c8, 0x401c8,
293*7453645fSAndriy Voskoboinyk 	0x481c8, 0x501c8, 0x00000, 0x1712a, 0x00010, 0x063b5, 0x0e3b5,
294*7453645fSAndriy Voskoboinyk 	0x163b5, 0x1e3b5, 0x263b5, 0x2e3b5, 0x363b5, 0x3e3b5, 0x463b5,
295*7453645fSAndriy Voskoboinyk 	0x4e3b5, 0x563b5, 0x5e3b5, 0x00000, 0x00008, 0x001b6, 0x00492
296*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals3[] = {
297*7453645fSAndriy Voskoboinyk 	0x00145, 0x08145, 0x10145, 0x20196, 0x28196, 0x30196, 0x401c7,
298*7453645fSAndriy Voskoboinyk 	0x481c7, 0x501c7, 0x00000, 0x1712a, 0x00010, 0x056b3, 0x0d6b3,
299*7453645fSAndriy Voskoboinyk 	0x156b3, 0x1d6b3, 0x26634, 0x2e634, 0x36634, 0x3e634, 0x467b4,
300*7453645fSAndriy Voskoboinyk 	0x4e7b4, 0x567b4, 0x5e7b4, 0x00000, 0x00008, 0x0022a, 0x00594
301*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals4_def_or_bt[] = {
302*7453645fSAndriy Voskoboinyk 	0x00800, 0x00000, 0x1712a, 0x00002, 0x02000, 0x00000, 0x000c0,
303*7453645fSAndriy Voskoboinyk 	0x00064, 0x81184, 0x6016c, 0xefd83, 0x93fcc, 0x110eb, 0x1c27c,
304*7453645fSAndriy Voskoboinyk 	0x93016
305*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals4_ext_5g[] = {
306*7453645fSAndriy Voskoboinyk 	0x00820, 0x00000, 0x1712a, 0x00002, 0x02000, 0x00000, 0x000c0,
307*7453645fSAndriy Voskoboinyk 	0x00064, 0x81184, 0x6016c, 0xead53, 0x93bc4, 0x110e9, 0x1c67c,
308*7453645fSAndriy Voskoboinyk 	0x93015
309*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals4[] = {
310*7453645fSAndriy Voskoboinyk 	0x00900, 0x00000, 0x1712a, 0x00002, 0x02000, 0x00000, 0x000c0,
311*7453645fSAndriy Voskoboinyk 	0x00064, 0x81184, 0x6016c, 0xead53, 0x93bc4, 0x714e9, 0x1c67c,
312*7453645fSAndriy Voskoboinyk 	0x91016
313*7453645fSAndriy Voskoboinyk }, rtl8821au_rf_vals5[] = {
314*7453645fSAndriy Voskoboinyk 	0x00006, 0x02000, 0x3824b, 0x3024b, 0x2844b, 0x20f4b, 0x18f4b,
315*7453645fSAndriy Voskoboinyk 	0x104b2, 0x08049, 0x00148, 0x7824b, 0x7024b, 0x6824b, 0x60f4b,
316*7453645fSAndriy Voskoboinyk 	0x58f4b, 0x504b2, 0x48049, 0x40148, 0x00000, 0x00100, 0x0adf3,
317*7453645fSAndriy Voskoboinyk 	0x09df0, 0x08d70, 0x07d6d, 0x06cee, 0x05ccc, 0x044ec, 0x034ac,
318*7453645fSAndriy Voskoboinyk 	0x0246d, 0x0106f, 0x0006c, 0x00000, 0x00010, 0x0adf2, 0x09def,
319*7453645fSAndriy Voskoboinyk 	0x08dec, 0x07de9, 0x06cec, 0x05ce9, 0x044ec, 0x034e9, 0x0246c,
320*7453645fSAndriy Voskoboinyk 	0x01469, 0x0006c, 0x00000, 0x00001, 0x38da7, 0x300c2, 0x288e2,
321*7453645fSAndriy Voskoboinyk 	0x200b8, 0x188a5, 0x10fbc, 0x08f71, 0x00240, 0x00000, 0x020a2,
322*7453645fSAndriy Voskoboinyk 	0x00080, 0x00120, 0x08120, 0x10120, 0x00085, 0x08085, 0x10085,
323*7453645fSAndriy Voskoboinyk 	0x18085, 0x00000, 0x00c31, 0x00622, 0xfc70b, 0x0017e, 0x51df3,
324*7453645fSAndriy Voskoboinyk 	0x00c01, 0x006d6, 0xfc649, 0x49661, 0x7843e, 0x00382, 0x51400,
325*7453645fSAndriy Voskoboinyk 	0x00160, 0x08160, 0x10160, 0x00124, 0x08124, 0x10124, 0x18124,
326*7453645fSAndriy Voskoboinyk 	0x0000c, 0x00140, 0x08140, 0x10140, 0x00124, 0x08124, 0x10124,
327*7453645fSAndriy Voskoboinyk 	0x18124, 0x00088, 0xf0e18, 0x1214c, 0x3000c, 0x539d2, 0xafe00,
328*7453645fSAndriy Voskoboinyk 	0x1f12a, 0x0c350, 0x0c350, 0x1712a,
329*7453645fSAndriy Voskoboinyk };
330*7453645fSAndriy Voskoboinyk 
331*7453645fSAndriy Voskoboinyk static const struct rtwn_rf_prog rtl8821au_rf[] = {
332*7453645fSAndriy Voskoboinyk 	/* RF chain 0. */
333*7453645fSAndriy Voskoboinyk 	{
334*7453645fSAndriy Voskoboinyk 		nitems(rtl8821au_rf_regs0),
335*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_regs0,
336*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_vals0,
337*7453645fSAndriy Voskoboinyk 		{ 0 },
338*7453645fSAndriy Voskoboinyk 		NULL
339*7453645fSAndriy Voskoboinyk 	},
340*7453645fSAndriy Voskoboinyk 	/*
341*7453645fSAndriy Voskoboinyk 	 * No external PA/LNA; with or without BT.
342*7453645fSAndriy Voskoboinyk 	 */
343*7453645fSAndriy Voskoboinyk 	{
344*7453645fSAndriy Voskoboinyk 		nitems(rtl8821au_rf_regs1),
345*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_regs1,
346*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_vals1_def_or_bt,
347*7453645fSAndriy Voskoboinyk 		{ R21A_COND_BOARD_DEF, R21A_COND_BT, 0 },
348*7453645fSAndriy Voskoboinyk 		/*
349*7453645fSAndriy Voskoboinyk 		 * With external 5GHz PA and LNA.
350*7453645fSAndriy Voskoboinyk 		 */
351*7453645fSAndriy Voskoboinyk 		&(const struct rtwn_rf_prog){
352*7453645fSAndriy Voskoboinyk 			nitems(rtl8821au_rf_regs1),
353*7453645fSAndriy Voskoboinyk 			rtl8821au_rf_regs1,
354*7453645fSAndriy Voskoboinyk 			rtl8821au_rf_vals1_ext_5g,
355*7453645fSAndriy Voskoboinyk 			{ R21A_COND_EXT_PA_5G | R21A_COND_EXT_LNA_5G, 0 },
356*7453645fSAndriy Voskoboinyk 			/*
357*7453645fSAndriy Voskoboinyk 			 * Others.
358*7453645fSAndriy Voskoboinyk 			 */
359*7453645fSAndriy Voskoboinyk 			&(const struct rtwn_rf_prog){
360*7453645fSAndriy Voskoboinyk 				nitems(rtl8821au_rf_regs1),
361*7453645fSAndriy Voskoboinyk 				rtl8821au_rf_regs1,
362*7453645fSAndriy Voskoboinyk 				rtl8821au_rf_vals1,
363*7453645fSAndriy Voskoboinyk 				{ 0 },
364*7453645fSAndriy Voskoboinyk 				NULL
365*7453645fSAndriy Voskoboinyk 			}
366*7453645fSAndriy Voskoboinyk 		}
367*7453645fSAndriy Voskoboinyk 	},
368*7453645fSAndriy Voskoboinyk 	/*
369*7453645fSAndriy Voskoboinyk 	 * With external 5GHz PA and LNA.
370*7453645fSAndriy Voskoboinyk 	 */
371*7453645fSAndriy Voskoboinyk 	{
372*7453645fSAndriy Voskoboinyk 		nitems(rtl8821au_rf_regs2),
373*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_regs2,
374*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_vals2_ext_5g,
375*7453645fSAndriy Voskoboinyk 		{ R21A_COND_EXT_PA_5G | R21A_COND_EXT_LNA_5G, 0 },
376*7453645fSAndriy Voskoboinyk 		/*
377*7453645fSAndriy Voskoboinyk 		 * Others.
378*7453645fSAndriy Voskoboinyk 		 */
379*7453645fSAndriy Voskoboinyk 		&(const struct rtwn_rf_prog){
380*7453645fSAndriy Voskoboinyk 			nitems(rtl8821au_rf_regs2),
381*7453645fSAndriy Voskoboinyk 			rtl8821au_rf_regs2,
382*7453645fSAndriy Voskoboinyk 			rtl8821au_rf_vals2,
383*7453645fSAndriy Voskoboinyk 			{ 0 },
384*7453645fSAndriy Voskoboinyk 			NULL
385*7453645fSAndriy Voskoboinyk 		}
386*7453645fSAndriy Voskoboinyk 	},
387*7453645fSAndriy Voskoboinyk 	/*
388*7453645fSAndriy Voskoboinyk 	 * No external PA/LNA; with or without BT.
389*7453645fSAndriy Voskoboinyk 	 */
390*7453645fSAndriy Voskoboinyk 	{
391*7453645fSAndriy Voskoboinyk 		nitems(rtl8821au_rf_regs3),
392*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_regs3,
393*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_vals3_def_or_bt,
394*7453645fSAndriy Voskoboinyk 		{ R21A_COND_BOARD_DEF, R21A_COND_BT, 0 },
395*7453645fSAndriy Voskoboinyk 		/*
396*7453645fSAndriy Voskoboinyk 		 * Others.
397*7453645fSAndriy Voskoboinyk 		 */
398*7453645fSAndriy Voskoboinyk 		&(const struct rtwn_rf_prog){
399*7453645fSAndriy Voskoboinyk 			nitems(rtl8821au_rf_regs3),
400*7453645fSAndriy Voskoboinyk 			rtl8821au_rf_regs3,
401*7453645fSAndriy Voskoboinyk 			rtl8821au_rf_vals3,
402*7453645fSAndriy Voskoboinyk 			{ 0 },
403*7453645fSAndriy Voskoboinyk 			NULL
404*7453645fSAndriy Voskoboinyk 		}
405*7453645fSAndriy Voskoboinyk 	},
406*7453645fSAndriy Voskoboinyk 	/*
407*7453645fSAndriy Voskoboinyk 	 * No external PA/LNA; with or without BT.
408*7453645fSAndriy Voskoboinyk 	 */
409*7453645fSAndriy Voskoboinyk 	{
410*7453645fSAndriy Voskoboinyk 		nitems(rtl8821au_rf_regs4),
411*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_regs4,
412*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_vals4_def_or_bt,
413*7453645fSAndriy Voskoboinyk 		{ R21A_COND_BOARD_DEF, R21A_COND_BT, 0 },
414*7453645fSAndriy Voskoboinyk 		/*
415*7453645fSAndriy Voskoboinyk 		 * With external 5GHz PA and LNA.
416*7453645fSAndriy Voskoboinyk 		 */
417*7453645fSAndriy Voskoboinyk 		&(const struct rtwn_rf_prog){
418*7453645fSAndriy Voskoboinyk 			nitems(rtl8821au_rf_regs4),
419*7453645fSAndriy Voskoboinyk 			rtl8821au_rf_regs4,
420*7453645fSAndriy Voskoboinyk 			rtl8821au_rf_vals4_ext_5g,
421*7453645fSAndriy Voskoboinyk 			{ R21A_COND_EXT_PA_5G | R21A_COND_EXT_LNA_5G, 0 },
422*7453645fSAndriy Voskoboinyk 			/*
423*7453645fSAndriy Voskoboinyk 			 * Others.
424*7453645fSAndriy Voskoboinyk 			 */
425*7453645fSAndriy Voskoboinyk 			&(const struct rtwn_rf_prog){
426*7453645fSAndriy Voskoboinyk 				nitems(rtl8821au_rf_regs4),
427*7453645fSAndriy Voskoboinyk 				rtl8821au_rf_regs4,
428*7453645fSAndriy Voskoboinyk 				rtl8821au_rf_vals4,
429*7453645fSAndriy Voskoboinyk 				{ 0 },
430*7453645fSAndriy Voskoboinyk 				NULL
431*7453645fSAndriy Voskoboinyk 			}
432*7453645fSAndriy Voskoboinyk 		}
433*7453645fSAndriy Voskoboinyk 	},
434*7453645fSAndriy Voskoboinyk 	{
435*7453645fSAndriy Voskoboinyk 		nitems(rtl8821au_rf_regs5),
436*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_regs5,
437*7453645fSAndriy Voskoboinyk 		rtl8821au_rf_vals5,
438*7453645fSAndriy Voskoboinyk 		{ 0 },
439*7453645fSAndriy Voskoboinyk 		NULL
440*7453645fSAndriy Voskoboinyk 	},
441*7453645fSAndriy Voskoboinyk 	{ 0, NULL, NULL, { 0 }, NULL }
442*7453645fSAndriy Voskoboinyk };
443*7453645fSAndriy Voskoboinyk 
444*7453645fSAndriy Voskoboinyk /*
445*7453645fSAndriy Voskoboinyk  * Registers to save before IQ calibration.
446*7453645fSAndriy Voskoboinyk  */
447*7453645fSAndriy Voskoboinyk static const uint16_t r21a_iq_bb_regs[] = {
448*7453645fSAndriy Voskoboinyk 	0x520, 0x550, 0x808, 0xa04, 0x90c, 0xc00, 0x838, 0x82c
449*7453645fSAndriy Voskoboinyk };
450*7453645fSAndriy Voskoboinyk 
451*7453645fSAndriy Voskoboinyk static const uint16_t r21a_iq_afe_regs[] = {
452*7453645fSAndriy Voskoboinyk 	0xc5c, 0xc60, 0xc64, 0xc68
453*7453645fSAndriy Voskoboinyk };
454*7453645fSAndriy Voskoboinyk 
455*7453645fSAndriy Voskoboinyk static const uint8_t r21a_iq_rf_regs[] = {
456*7453645fSAndriy Voskoboinyk 	0x65, 0x8f, 0x0
457*7453645fSAndriy Voskoboinyk };
458*7453645fSAndriy Voskoboinyk 
459*7453645fSAndriy Voskoboinyk #endif	/* R21A_PRIV_H */
460