xref: /netbsd/sys/dev/ic/rtwn_data.h (revision cc1aa0e4)
1 /*	$NetBSD: rtwn_data.h,v 1.2 2022/09/26 19:04:49 martin Exp $	*/
2 /*	$OpenBSD: r92creg.h,v 1.16 2017/09/22 13:41:56 kevlo Exp $	*/
3 
4 /*-
5  * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr>
6  * Copyright (c) 2015 Stefan Sperling <stsp@openbsd.org>
7  * Copyright (c) 2016 Nathanial Sloss <nathanialsloss@yahoo.com.au>
8  *
9  * Permission to use, copy, modify, and distribute this software for any
10  * purpose with or without fee is hereby granted, provided that the above
11  * copyright notice and this permission notice appear in all copies.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
16  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20  */
21 
22 #ifndef _DEV_IC_RTWN_DATA_H_
23 #define	_DEV_IC_RTWN_DATA_H_
24 
25 /*
26  * MAC initialization values.
27  */
28 static const struct {
29 	uint16_t	reg;
30 	uint8_t		val;
31 } rtl8192ce_mac[] = {
32 	{ 0x420, 0x80 }, { 0x423, 0x00 }, { 0x430, 0x00 }, { 0x431, 0x00 },
33 	{ 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 },
34 	{ 0x436, 0x06 }, { 0x437, 0x07 }, { 0x438, 0x00 }, { 0x439, 0x00 },
35 	{ 0x43a, 0x00 }, { 0x43b, 0x01 }, { 0x43c, 0x04 }, { 0x43d, 0x05 },
36 	{ 0x43e, 0x06 }, { 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 },
37 	{ 0x442, 0x00 }, { 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f },
38 	{ 0x447, 0x00 }, { 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 },
39 	{ 0x45b, 0xb9 }, { 0x460, 0x88 }, { 0x461, 0x88 }, { 0x462, 0x06 },
40 	{ 0x463, 0x03 }, { 0x4c8, 0x04 }, { 0x4c9, 0x08 }, { 0x4cc, 0x02 },
41 	{ 0x4cd, 0x28 }, { 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 },
42 	{ 0x502, 0x2f }, { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 },
43 	{ 0x506, 0x5e }, { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 },
44 	{ 0x50a, 0x5e }, { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 },
45 	{ 0x50e, 0x00 }, { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a },
46 	{ 0x515, 0x10 }, { 0x516, 0x0a }, { 0x517, 0x10 }, { 0x51a, 0x16 },
47 	{ 0x524, 0x0f }, { 0x525, 0x4f }, { 0x546, 0x20 }, { 0x547, 0x00 },
48 	{ 0x559, 0x02 }, { 0x55a, 0x02 }, { 0x55d, 0xff }, { 0x605, 0x30 },
49 	{ 0x608, 0x0e }, { 0x609, 0x2a }, { 0x652, 0x20 }, { 0x63c, 0x0a },
50 	{ 0x63d, 0x0e }, { 0x700, 0x21 }, { 0x701, 0x43 }, { 0x702, 0x65 },
51 	{ 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, { 0x70a, 0x65 },
52 	{ 0x70b, 0x87 }
53 }, rtl8192eu_mac[] = {
54 	{ 0x011, 0xeb }, { 0x012, 0x07 }, { 0x014, 0x75 }, { 0x303, 0xa7 },
55 	{ 0x428, 0x0a }, { 0x429, 0x10 }, { 0x430, 0x00 }, { 0x431, 0x00 },
56 	{ 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 },
57 	{ 0x436, 0x07 }, { 0x437, 0x08 }, { 0x43c, 0x04 }, { 0x43d, 0x05 },
58 	{ 0x43e, 0x07 }, { 0x43f, 0x08 }, { 0x440, 0x5d }, { 0x441, 0x01 },
59 	{ 0x442, 0x00 }, { 0x444, 0x10 }, { 0x445, 0x00 }, { 0x446, 0x00 },
60 	{ 0x447, 0x00 }, { 0x448, 0x00 }, { 0x449, 0xf0 }, { 0x44a, 0x0f },
61 	{ 0x44b, 0x3e }, { 0x44c, 0x10 }, { 0x44d, 0x00 }, { 0x44e, 0x00 },
62 	{ 0x44f, 0x00 }, { 0x450, 0x00 }, { 0x451, 0xf0 }, { 0x452, 0x0f },
63 	{ 0x453, 0x00 }, { 0x456, 0x5e }, { 0x460, 0x66 }, { 0x461, 0x66 },
64 	{ 0x4c8, 0xff }, { 0x4c9, 0x08 }, { 0x4cc, 0xff }, { 0x4cd, 0xff },
65 	{ 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 }, { 0x502, 0x2f },
66 	{ 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 }, { 0x506, 0x5e },
67 	{ 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 }, { 0x50a, 0x5e },
68 	{ 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 }, { 0x50e, 0x00 },
69 	{ 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a }, { 0x516, 0x0a },
70 	{ 0x525, 0x4f }, { 0x540, 0x12 }, { 0x541, 0x64 }, { 0x550, 0x10 },
71 	{ 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55c, 0x50 }, { 0x55d, 0xff },
72 	{ 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a }, { 0x620, 0xff },
73 	{ 0x621, 0xff }, { 0x622, 0xff }, { 0x623, 0xff }, { 0x624, 0xff },
74 	{ 0x625, 0xff }, { 0x626, 0xff }, { 0x627, 0xff }, { 0x638, 0x50 },
75 	{ 0x63c, 0x0a }, { 0x63d, 0x0a }, { 0x63e, 0x0e }, { 0x63f, 0x0e },
76 	{ 0x640, 0x40 }, { 0x642, 0x40 }, { 0x643, 0x00 }, { 0x652, 0xc8 },
77 	{ 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 }, { 0x702, 0x65 },
78 	{ 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, { 0x70a, 0x65 },
79 	{ 0x70b, 0x87 },
80 }, rtl8188eu_mac[] = {
81 	{ 0x026, 0x41 }, { 0x027, 0x35 }, { 0x040, 0x00 }, { 0x428, 0x0a },
82 	{ 0x429, 0x10 }, { 0x430, 0x00 }, { 0x431, 0x01 }, { 0x432, 0x02 },
83 	{ 0x433, 0x04 }, { 0x434, 0x05 }, { 0x435, 0x06 }, { 0x436, 0x07 },
84 	{ 0x437, 0x08 }, { 0x438, 0x00 }, { 0x439, 0x00 }, { 0x43a, 0x01 },
85 	{ 0x43b, 0x02 }, { 0x43c, 0x04 }, { 0x43d, 0x05 }, { 0x43e, 0x06 },
86 	{ 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 }, { 0x442, 0x00 },
87 	{ 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f }, { 0x447, 0x00 },
88 	{ 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 }, { 0x45b, 0xb9 },
89 	{ 0x460, 0x66 }, { 0x461, 0x66 }, { 0x480, 0x08 }, { 0x4c8, 0xff },
90 	{ 0x4c9, 0x08 }, { 0x4cc, 0xff }, { 0x4cd, 0xff }, { 0x4ce, 0x01 },
91 	{ 0x4d3, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 }, { 0x502, 0x2f },
92 	{ 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 }, { 0x506, 0x5e },
93 	{ 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 }, { 0x50a, 0x5e },
94 	{ 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 }, { 0x50e, 0x00 },
95 	{ 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a }, { 0x516, 0x0a },
96 	{ 0x525, 0x4f }, { 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 },
97 	{ 0x55d, 0xff }, { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a },
98 	{ 0x620, 0xff }, { 0x621, 0xff }, { 0x622, 0xff }, { 0x623, 0xff },
99 	{ 0x624, 0xff }, { 0x625, 0xff }, { 0x626, 0xff }, { 0x627, 0xff },
100 	{ 0x652, 0x20 }, { 0x63c, 0x0a }, { 0x63d, 0x0a }, { 0x63e, 0x0e },
101 	{ 0x63f, 0x0e }, { 0x640, 0x40 }, { 0x66e, 0x05 }, { 0x700, 0x21 },
102 	{ 0x701, 0x43 }, { 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 },
103 	{ 0x709, 0x43 }, { 0x70a, 0x65 }, { 0x70b, 0x87 }
104 }, rtl8192cu_mac[] = {
105 	{ 0x420, 0x80 }, { 0x423, 0x00 }, { 0x430, 0x00 }, { 0x431, 0x00 },
106 	{ 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 },
107 	{ 0x436, 0x06 }, { 0x437, 0x07 }, { 0x438, 0x00 }, { 0x439, 0x00 },
108 	{ 0x43a, 0x00 }, { 0x43b, 0x01 }, { 0x43c, 0x04 }, { 0x43d, 0x05 },
109 	{ 0x43e, 0x06 }, { 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 },
110 	{ 0x442, 0x00 }, { 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f },
111 	{ 0x447, 0x00 }, { 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 },
112 	{ 0x45b, 0xb9 }, { 0x460, 0x66 }, { 0x461, 0x66 }, { 0x462, 0x08 },
113 	{ 0x463, 0x03 }, { 0x4c8, 0xff }, { 0x4c9, 0x08 }, { 0x4cc, 0xff },
114 	{ 0x4cd, 0xff }, { 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 },
115 	{ 0x502, 0x2f }, { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 },
116 	{ 0x506, 0x5e }, { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 },
117 	{ 0x50a, 0x5e }, { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 },
118 	{ 0x50e, 0x00 }, { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a },
119 	{ 0x515, 0x10 }, { 0x516, 0x0a }, { 0x517, 0x10 }, { 0x51a, 0x16 },
120 	{ 0x524, 0x0f }, { 0x525, 0x4f }, { 0x546, 0x40 }, { 0x547, 0x00 },
121 	{ 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55a, 0x02 },
122 	{ 0x55d, 0xff }, { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a },
123 	{ 0x652, 0x20 }, { 0x63c, 0x0a }, { 0x63d, 0x0e }, { 0x63e, 0x0a },
124 	{ 0x63f, 0x0e }, { 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 },
125 	{ 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 },
126 	{ 0x70a, 0x65 }, { 0x70b, 0x87 }
127 };
128 
129 /*
130  * Baseband initialization values.
131  */
132 struct rtwn_bb_prog {
133 	int		count;
134 	const uint16_t	*regs;
135 	const uint32_t	*vals;
136 	int		agccount;
137 	const uint32_t	*agcvals;
138 };
139 
140 /*
141  * RTL8192CU and RTL8192CE-VAU.
142  */
143 static const uint16_t rtl8192ce_bb_regs[] = {
144 	0x024, 0x028, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818,
145 	0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c,
146 	0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860,
147 	0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884,
148 	0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 0x908,
149 	0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c,
150 	0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 0xc08,
151 	0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c,
152 	0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50,
153 	0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74,
154 	0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98,
155 	0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc,
156 	0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 0xce0,
157 	0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 0xd14,
158 	0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 0xd48,
159 	0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 0xd6c,
160 	0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, 0xe18,
161 	0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 0xe48,
162 	0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 0xe70,
163 	0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 0xed4,
164 	0xed8, 0xedc, 0xee0, 0xeec, 0xf14, 0xf4c, 0xf00
165 };
166 
167 static const uint32_t rtl8192ce_bb_vals[] = {
168 	0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00,
169 	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
170 	0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727,
171 	0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000,
172 	0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a,
173 	0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27,
174 	0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070,
175 	0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe,
176 	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
177 	0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
178 	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
179 	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
180 	0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000,
181 	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
182 	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
183 	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
184 	0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000,
185 	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db,
186 	0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100,
187 	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
188 	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
189 	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
190 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
191 	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
192 	0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333,
193 	0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000,
194 	0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000,
195 	0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064,
196 	0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e,
197 	0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a,
198 	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000,
199 	0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00,
200 	0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f,
201 	0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4,
202 	0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4,
203 	0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4,
204 	0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003,
205 	0x00000000, 0x00000300
206 };
207 
208 static const uint32_t rtl8192ce_bb_vals_2t[] = {
209 	0x0011800f, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00,
210 	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
211 	0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727,
212 	0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000,
213 	0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a,
214 	0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27,
215 	0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070,
216 	0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe,
217 	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
218 	0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
219 	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
220 	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
221 	0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000,
222 	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
223 	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
224 	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
225 	0x69543420, 0x43bc0094, 0x69543420, 0x433c0094, 0x00000000,
226 	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db,
227 	0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100,
228 	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
229 	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
230 	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
231 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
232 	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
233 	0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333,
234 	0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000,
235 	0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000,
236 	0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064,
237 	0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e,
238 	0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a,
239 	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000,
240 	0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00,
241 	0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f,
242 	0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4,
243 	0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4,
244 	0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4,
245 	0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003,
246 	0x00000000, 0x00000300
247 };
248 
249 static const uint32_t rtl8192ce_bb_vals_1t[] = {
250 	0x0011800f, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00,
251 	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
252 	0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000,
253 	0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000,
254 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a,
255 	0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200,
256 	0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070,
257 	0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe,
258 	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
259 	0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
260 	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
261 	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
262 	0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000,
263 	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
264 	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
265 	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
266 	0x69543420, 0x43bc0094, 0x69543420, 0x433c0094, 0x00000000,
267 	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db,
268 	0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100,
269 	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
270 	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
271 	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
272 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
273 	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
274 	0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333,
275 	0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000,
276 	0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000,
277 	0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064,
278 	0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e,
279 	0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a,
280 	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000,
281 	0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00,
282 	0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f,
283 	0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x631b25a0,
284 	0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0,
285 	0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0,
286 	0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003,
287 	0x00000000, 0x00000300,
288 };
289 
290 static const uint32_t rtl8192ce_agc_vals[] = {
291 	0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001,
292 	0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001,
293 	0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001,
294 	0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001,
295 	0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001,
296 	0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001,
297 	0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001,
298 	0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001,
299 	0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001,
300 	0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001,
301 	0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001,
302 	0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001,
303 	0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001,
304 	0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001,
305 	0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001,
306 	0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001,
307 	0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001,
308 	0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001,
309 	0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001,
310 	0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001,
311 	0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001,
312 	0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001,
313 	0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001,
314 	0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001,
315 	0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001,
316 	0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e,
317 	0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e,
318 	0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e,
319 	0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e,
320 	0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e,
321 	0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e,
322 	0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e
323 };
324 
325 static const struct rtwn_bb_prog rtl8192ce_bb_prog = {
326 	__arraycount(rtl8192ce_bb_regs),
327 	rtl8192ce_bb_regs,
328 	rtl8192ce_bb_vals,
329 	__arraycount(rtl8192ce_agc_vals),
330 	rtl8192ce_agc_vals
331 };
332 
333 static const struct rtwn_bb_prog rtl8192ce_bb_prog_2t = {
334 	__arraycount(rtl8192ce_bb_regs),
335 	rtl8192ce_bb_regs,
336 	rtl8192ce_bb_vals_2t,
337 	__arraycount(rtl8192ce_agc_vals),
338 	rtl8192ce_agc_vals
339 };
340 
341 static const struct rtwn_bb_prog rtl8192ce_bb_prog_1t = {
342 	__arraycount(rtl8192ce_bb_regs),
343 	rtl8192ce_bb_regs,
344 	rtl8192ce_bb_vals_1t,
345 	__arraycount(rtl8192ce_agc_vals),
346 	rtl8192ce_agc_vals
347 };
348 
349 /*
350  * RTL8188CU.
351  */
352 static const uint32_t rtl8192cu_bb_vals[] = {
353 	0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00,
354 	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
355 	0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727,
356 	0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000,
357 	0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a,
358 	0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27,
359 	0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070,
360 	0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe,
361 	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
362 	0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
363 	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
364 	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
365 	0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000,
366 	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
367 	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
368 	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
369 	0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000,
370 	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x0186115b,
371 	0x0000001f, 0x00b99612, 0x40000100, 0x20f60000, 0x40000100,
372 	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
373 	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
374 	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
375 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
376 	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
377 	0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333,
378 	0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000,
379 	0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000,
380 	0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064,
381 	0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e,
382 	0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a,
383 	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000,
384 	0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00,
385 	0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f,
386 	0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4,
387 	0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4,
388 	0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4,
389 	0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003,
390 	0x00000000, 0x00000300
391 };
392 
393 static const struct rtwn_bb_prog rtl8192cu_bb_prog = {
394 	__arraycount(rtl8192ce_bb_regs),
395 	rtl8192ce_bb_regs,
396 	rtl8192cu_bb_vals,
397 	__arraycount(rtl8192ce_agc_vals),
398 	rtl8192ce_agc_vals
399 };
400 
401 /*
402  * RTL8188CE-VAU.
403  */
404 static const uint32_t rtl8188ce_bb_vals[] = {
405 	0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00,
406 	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
407 	0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000,
408 	0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000,
409 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a,
410 	0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200,
411 	0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070,
412 	0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe,
413 	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
414 	0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
415 	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
416 	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
417 	0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000,
418 	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
419 	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
420 	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
421 	0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000,
422 	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db,
423 	0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100,
424 	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
425 	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
426 	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
427 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
428 	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
429 	0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333,
430 	0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000,
431 	0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000,
432 	0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064,
433 	0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e,
434 	0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a,
435 	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000,
436 	0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00,
437 	0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f,
438 	0x02140102, 0x28160d05, 0x00000008, 0x001b25a4, 0x631b25a0,
439 	0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0,
440 	0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0,
441 	0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003,
442 	0x00000000, 0x00000300
443 };
444 
445 static const uint32_t rtl8188ce_agc_vals[] = {
446 	0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001,
447 	0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001,
448 	0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001,
449 	0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001,
450 	0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001,
451 	0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001,
452 	0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001,
453 	0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001,
454 	0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001,
455 	0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001,
456 	0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001,
457 	0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001,
458 	0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001,
459 	0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001,
460 	0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001,
461 	0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001,
462 	0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001,
463 	0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001,
464 	0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001,
465 	0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001,
466 	0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001,
467 	0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001,
468 	0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001,
469 	0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001,
470 	0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001,
471 	0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e,
472 	0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e,
473 	0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e,
474 	0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e,
475 	0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e,
476 	0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e,
477 	0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e
478 };
479 
480 static const struct rtwn_bb_prog rtl8188ce_bb_prog = {
481 	__arraycount(rtl8192ce_bb_regs),
482 	rtl8192ce_bb_regs,
483 	rtl8188ce_bb_vals,
484 	__arraycount(rtl8188ce_agc_vals),
485 	rtl8188ce_agc_vals
486 };
487 
488 static const uint32_t rtl8188cu_bb_vals[] = {
489 	0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00,
490 	0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000,
491 	0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000,
492 	0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000,
493 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a,
494 	0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200,
495 	0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070,
496 	0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe,
497 	0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000,
498 	0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f,
499 	0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000,
500 	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
501 	0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000,
502 	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
503 	0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994,
504 	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
505 	0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000,
506 	0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db,
507 	0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100,
508 	0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
509 	0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000,
510 	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
511 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
512 	0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c,
513 	0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333,
514 	0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000,
515 	0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000,
516 	0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064,
517 	0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e,
518 	0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a,
519 	0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000,
520 	0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00,
521 	0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f,
522 	0x02140102, 0x28160d05, 0x00000008, 0x001b25a4, 0x631b25a0,
523 	0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0,
524 	0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0,
525 	0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003,
526 	0x00000000, 0x00000300
527 };
528 
529 static const struct rtwn_bb_prog rtl8188cu_bb_prog = {
530 	__arraycount(rtl8192ce_bb_regs),
531 	rtl8192ce_bb_regs,
532 	rtl8188cu_bb_vals,
533 	__arraycount(rtl8188ce_agc_vals),
534 	rtl8188ce_agc_vals
535 };
536 
537 /*
538  * RTL8188EU.
539  */
540 static const uint16_t rtl8188eu_bb_regs[] = {
541 	0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x81c,
542 	0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c,
543 	0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c,
544 	0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c,
545 	0x880, 0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c,
546 	0x900, 0x904, 0x908, 0x90c, 0x910, 0x914, 0xa00, 0xa04,
547 	0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 0xa20, 0xa24,
548 	0xa28, 0xa2c, 0xa70, 0xa74, 0xa78, 0xa7c, 0xa80, 0xb2c,
549 	0xc00, 0xc04, 0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c,
550 	0xc20, 0xc24, 0xc28, 0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c,
551 	0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 0xc54, 0xc58, 0xc5c,
552 	0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74, 0xc78, 0xc7c,
553 	0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98, 0xc9c,
554 	0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc,
555 	0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc,
556 	0xce0, 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c,
557 	0xd10, 0xd14, 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c,
558 	0xd40, 0xd44, 0xd48, 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c,
559 	0xd60, 0xd64, 0xd68, 0xd6c, 0xd70, 0xd74, 0xd78, 0xe00,
560 	0xe04, 0xe08, 0xe10, 0xe14, 0xe18, 0xe1c, 0xe28, 0xe30,
561 	0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 0xe48, 0xe4c, 0xe50,
562 	0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 0xe70, 0xe74,
563 	0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 0xed4,
564 	0xed8, 0xedc, 0xee0, 0xee8, 0xeec, 0xf14, 0xf4c, 0xf00
565 };
566 
567 static const uint32_t rtl8188eu_bb_vals[] = {
568 	0x80040000, 0x00000003, 0x0000fc00, 0x0000000a, 0x10001331,
569 	0x020c3d10, 0x02200385, 0x00000000, 0x01000100, 0x00390204,
570 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
571 	0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000,
572 	0x00000000, 0x00000000, 0x569a11a9, 0x01000014, 0x66f60110,
573 	0x061f0649, 0x00000000, 0x27272700, 0x07000760, 0x25004000,
574 	0x00000808, 0x00000000, 0xb0000c1c, 0x00000001, 0x00000000,
575 	0xccc000c0, 0x00000800, 0xfffffffe, 0x40302010, 0x00706050,
576 	0x00000000, 0x00000023, 0x00000000, 0x81121111, 0x00000002,
577 	0x00000201, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e7f120f,
578 	0x9500bb78, 0x1114d028, 0x00881117, 0x89140f00, 0x1a1b0000,
579 	0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007,
580 	0x00000900, 0x225b0606, 0x218075b1, 0x80000000, 0x48071d40,
581 	0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000, 0x40000100,
582 	0x08800000, 0x40000100, 0x00000000, 0x00000000, 0x00000000,
583 	0x00000000, 0x69e9ac47, 0x469652af, 0x49795994, 0x0a97971c,
584 	0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 0x69553420,
585 	0x43bc0094, 0x00013169, 0x00250492, 0x00000000, 0x7112848b,
586 	0x47c00bff, 0x00000036, 0x2c7f000d, 0x020610db, 0x0000001f,
587 	0x00b91612, 0x390000e4, 0x20f60000, 0x40000100, 0x20200000,
588 	0x00091521, 0x00000000, 0x00121820, 0x00007f7f, 0x00000000,
589 	0x000300a0, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
590 	0x00000000, 0x28000000, 0x00000000, 0x00000000, 0x00000000,
591 	0x00000000, 0x00000000, 0x00000000, 0x64b22427, 0x00766932,
592 	0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 0x00000740,
593 	0x00020401, 0x0000907f, 0x20010201, 0xa0633333, 0x3333bc43,
594 	0x7a8f5b6f, 0xcc979975, 0x00000000, 0x80608000, 0x00000000,
595 	0x00127353, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
596 	0x6437140a, 0x00000000, 0x00000282, 0x30032064, 0x4653de68,
597 	0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 0x322c2220,
598 	0x000e3c24, 0x2d2d2d2d, 0x2d2d2d2d, 0x0390272d, 0x2d2d2d2d,
599 	0x2d2d2d2d, 0x2d2d2d2d, 0x2d2d2d2d, 0x00000000, 0x1000dc1f,
600 	0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 0x01004800,
601 	0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 0x02140102,
602 	0x28160d05, 0x00000008, 0x001b25a4, 0x00c00014, 0x00c00014,
603 	0x01000014, 0x01000014, 0x01000014, 0x01000014, 0x00c00014,
604 	0x01000014, 0x00c00014, 0x00c00014, 0x00c00014, 0x00c00014,
605 	0x00000014, 0x00000014, 0x21555448, 0x01c00014, 0x00000003,
606 	0x00000000, 0x00000300
607 };
608 
609 static const uint32_t rtl8188eu_agc_vals[] = {
610 	0xfb000001, 0xfb010001, 0xfb020001, 0xfb030001, 0xfb040001,
611 	0xfb050001, 0xfa060001, 0xf9070001, 0xf8080001, 0xf7090001,
612 	0xf60a0001, 0xf50b0001, 0xf40c0001, 0xf30d0001, 0xf20e0001,
613 	0xf10f0001, 0xf0100001, 0xef110001, 0xee120001, 0xed130001,
614 	0xec140001, 0xeb150001, 0xea160001, 0xe9170001, 0xe8180001,
615 	0xe7190001, 0xe61a0001, 0xe51b0001, 0xe41c0001, 0xe31d0001,
616 	0xe21e0001, 0xe11f0001, 0x8a200001, 0x89210001, 0x88220001,
617 	0x87230001, 0x86240001, 0x85250001, 0x84260001, 0x83270001,
618 	0x82280001, 0x6b290001, 0x6a2a0001, 0x692b0001, 0x682c0001,
619 	0x672d0001, 0x662e0001, 0x652f0001, 0x64300001, 0x63310001,
620 	0x62320001, 0x61330001, 0x46340001, 0x45350001, 0x44360001,
621 	0x43370001, 0x42380001, 0x41390001, 0x403a0001, 0x403b0001,
622 	0x403c0001, 0x403d0001, 0x403e0001, 0x403f0001, 0xfb400001,
623 	0xfb410001, 0xfb420001, 0xfb430001, 0xfb440001, 0xfb450001,
624 	0xfb460001, 0xfb470001, 0xfb480001, 0xfa490001, 0xf94a0001,
625 	0xf84B0001, 0xf74c0001, 0xf64d0001, 0xf54e0001, 0xf44f0001,
626 	0xf3500001, 0xf2510001, 0xf1520001, 0xf0530001, 0xef540001,
627 	0xee550001, 0xed560001, 0xec570001, 0xeb580001, 0xea590001,
628 	0xe95a0001, 0xe85b0001, 0xe75c0001, 0xe65d0001, 0xe55e0001,
629 	0xe45f0001, 0xe3600001, 0xe2610001, 0xc3620001, 0xc2630001,
630 	0xc1640001, 0x8b650001, 0x8a660001, 0x89670001, 0x88680001,
631 	0x87690001, 0x866a0001, 0x856b0001, 0x846c0001, 0x676d0001,
632 	0x666e0001, 0x656f0001, 0x64700001, 0x63710001, 0x62720001,
633 	0x61730001, 0x60740001, 0x46750001, 0x45760001, 0x44770001,
634 	0x43780001, 0x42790001, 0x417a0001, 0x407b0001, 0x407c0001,
635 	0x407d0001, 0x407e0001, 0x407f0001
636 };
637 
638 static const struct rtwn_bb_prog rtl8188eu_bb_prog = {
639 	__arraycount(rtl8188eu_bb_regs),
640 	rtl8188eu_bb_regs,
641 	rtl8188eu_bb_vals,
642 	__arraycount(rtl8188eu_agc_vals),
643 	rtl8188eu_agc_vals
644 };
645 
646 /*
647  * RTL819E.
648  */
649 static const uint16_t rtl8192eu_bb_regs[] = {
650 	0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x81c,
651 	0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c,
652 	0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c,
653 	0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c,
654 	0x880, 0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x900,
655 	0x904, 0x908, 0x90c, 0x910, 0x914, 0x918, 0x91c, 0x924,
656 	0x928, 0x92c, 0x930, 0x934, 0x938, 0x93c, 0x940, 0x944,
657 	0x94c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18,
658 	0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xa78,
659 	0xa7c, 0xa80, 0xb38, 0xc00, 0xc04, 0xc08, 0xc0c, 0xc10,
660 	0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 0xc30,
661 	0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50,
662 	0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70,
663 	0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90,
664 	0xc94, 0xc98, 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0,
665 	0xcb4, 0xcb8, 0xcbc, 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0,
666 	0xcd4, 0xcd8, 0xcdc, 0xce0, 0xce4, 0xce8, 0xcec, 0xd00,
667 	0xd04, 0xd08, 0xd0c, 0xd10, 0xd14, 0xd18, 0xd1c, 0xd2c,
668 	0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 0xd48, 0xd4c,
669 	0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 0xd6c,
670 	0xd70, 0xd74, 0xd78, 0xd80, 0xd84, 0xd88, 0xe00, 0xe04,
671 	0xe08, 0xe10, 0xe14, 0xe18, 0xe1c, 0xe28, 0xe30, 0xe34,
672 	0xe38, 0xe3c, 0xe40, 0xe44, 0xe48, 0xe4c, 0xe50, 0xe54,
673 	0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 0xe70, 0xe74, 0xe78,
674 	0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 0xed4, 0xed8,
675 	0xedc, 0xee0, 0xeec, 0xee4, 0xee8, 0xf14, 0xf4c, 0xf00,
676 };
677 
678 static const uint32_t rtl8192eu_bb_vals[] = {
679 	0x80040000, 0x00000003, 0x0000fc00, 0x0000000a, 0x10001331,
680 	0x020c3d10, 0x02220385, 0x00000000, 0x01000100, 0x00390204,
681 	0x01000100, 0x00390204, 0x32323232, 0x30303030, 0x30303030,
682 	0x30303030, 0x00010000, 0x00010000, 0x28282828, 0x28282828,
683 	0x00000000, 0x00000000, 0x009a009a, 0x01000014, 0x66f60000,
684 	0x061f0000, 0x30303030, 0x30303030, 0x00000000, 0x55004200,
685 	0x08080808, 0x00000000, 0xb0000c1c, 0x00000001, 0x00000000,
686 	0xcc0000c0, 0x00000800, 0xfffffffe, 0x40302010, 0x00000000,
687 	0x00000023, 0x00000000, 0x81121313, 0x806c0001, 0x00000001,
688 	0x00000000, 0x00010000, 0x00000001, 0x00000000, 0x00000000,
689 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
690 	0x00000000, 0x00000008, 0x00d0c7c8, 0x81ff000c, 0x8c838300,
691 	0x2e68120f, 0x95009b78, 0x1114d028, 0x00881117, 0x89140f00,
692 	0x1a1b0000, 0x090e1317, 0x00000204, 0x00d30000, 0x101fff00,
693 	0x00000007, 0x00000900, 0x225b0606, 0x218075b1, 0x00000000,
694 	0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000,
695 	0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000,
696 	0x00000000, 0x00000000, 0x69e9ac47, 0x469652af, 0x49795994,
697 	0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f,
698 	0x00340020, 0x0080801f, 0x00000020, 0x00248492, 0x00000000,
699 	0x7112848b, 0x47c00bff, 0x00000036, 0x00000600, 0x02013169,
700 	0x0000001f, 0x00b91612, 0x40000100, 0x21f60000, 0x40000100,
701 	0xa0e40000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f,
702 	0x00000000, 0x000300a0, 0x00000000, 0x00000000, 0x00000000,
703 	0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000,
704 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427,
705 	0x00766932, 0x00222222, 0x00040000, 0x77644302, 0x2f97d40c,
706 	0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333,
707 	0x3333bc43, 0x7a8f5b6b, 0x0000007f, 0xcc979975, 0x00000000,
708 	0x80608000, 0x00000000, 0x00127353, 0x00000000, 0x00000000,
709 	0x00000000, 0x00000000, 0x6437140a, 0x00000000, 0x00000282,
710 	0x30032064, 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16,
711 	0x1812362e, 0x322c2220, 0x000e3c24, 0x01081008, 0x00000800,
712 	0xf0b50000, 0x30303030, 0x30303030, 0x03903030, 0x30303030,
713 	0x30303030, 0x30303030, 0x30303030, 0x00000000, 0x1000dc1f,
714 	0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 0x01004800,
715 	0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 0x02140102,
716 	0x28160d05, 0x00000008, 0x0fc05656, 0x03c09696, 0x03c09696,
717 	0x0c005656, 0x0c005656, 0x0c005656, 0x0c005656, 0x03c09696,
718 	0x0c005656, 0x03c09696, 0x03c09696, 0x03c09696, 0x03c09696,
719 	0x0000d6d6, 0x0000d6d6, 0x0fc01616, 0xb0000c1c, 0x00000001,
720 	0x00000003, 0x00000000, 0x00000300,
721 };
722 
723 static const uint32_t rtl8192eu_agc_vals[] = {
724 	0xfb000001, 0xfb010001, 0xfb020001, 0xfb030001, 0xfb040001,
725 	0xfb050001, 0xfa060001, 0xf9070001, 0xf8080001, 0xf7090001,
726 	0xf60a0001, 0xf50b0001, 0xf40c0001, 0xf30d0001, 0xf20e0001,
727 	0xf10f0001, 0xf0100001, 0xef110001, 0xee120001, 0xed130001,
728 	0xec140001, 0xeb150001, 0xea160001, 0xe9170001, 0xe8180001,
729 	0xe7190001, 0xc81a0001, 0xc71b0001, 0xc61c0001, 0x071d0001,
730 	0x061e0001, 0x051f0001, 0x04200001, 0x03210001, 0xaa220001,
731 	0xa9230001, 0xa8240001, 0xa7250001, 0xa6260001, 0x85270001,
732 	0x84280001, 0x83290001, 0x252a0001, 0x242b0001, 0x232c0001,
733 	0x222d0001, 0x672e0001, 0x662f0001, 0x65300001, 0x64310001,
734 	0x63320001, 0x62330001, 0x61340001, 0x45350001, 0x44360001,
735 	0x43370001, 0x42380001, 0x41390001, 0x403a0001, 0x403b0001,
736 	0x403c0001, 0x403d0001, 0x403e0001, 0x403f0001, 0xfb400001,
737 	0xfb410001, 0xfb420001, 0xfb430001, 0xfb440001, 0xfb450001,
738 	0xfa460001, 0xf9470001, 0xf8480001, 0xf7490001, 0xf64a0001,
739 	0xf54b0001, 0xf44c0001, 0xf34d0001, 0xf24e0001, 0xf14f0001,
740 	0xf0500001, 0xef510001, 0xee520001, 0xed530001, 0xec540001,
741 	0xeb550001, 0xea560001, 0xe9570001, 0xe8580001, 0xe7590001,
742 	0xe65a0001, 0xe55b0001, 0xe45c0001, 0xe35d0001, 0xe25e0001,
743 	0xe15f0001, 0x8a600001, 0x89610001, 0x88620001, 0x87630001,
744 	0x86640001, 0x85650001, 0x84660001, 0x83670001, 0x82680001,
745 	0x6b690001, 0x6a6a0001, 0x696b0001, 0x686c0001, 0x676d0001,
746 	0x666e0001, 0x656f0001, 0x64700001, 0x63710001, 0x62720001,
747 	0x61730001, 0x49740001, 0x48750001, 0x47760001, 0x46770001,
748 	0x45780001, 0x44790001, 0x437a0001, 0x427b0001, 0x417c0001,
749 	0x407d0001, 0x407e0001, 0x407f0001,
750 };
751 
752 static const struct rtwn_bb_prog rtl8192eu_bb_prog = {
753 	__arraycount(rtl8192eu_bb_regs),
754 	rtl8192eu_bb_regs,
755 	rtl8192eu_bb_vals,
756 	__arraycount(rtl8192eu_agc_vals),
757 	rtl8192eu_agc_vals
758 };
759 
760 /*
761  * RTL8188RU.
762  */
763 static const uint16_t rtl8188ru_bb_regs[] = {
764 	0x024, 0x028, 0x040, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814,
765 	0x818, 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838,
766 	0x83c, 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c,
767 	0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880,
768 	0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904,
769 	0x908, 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18,
770 	0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04,
771 	0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28,
772 	0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c,
773 	0xc50, 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70,
774 	0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94,
775 	0xc98, 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8,
776 	0xcbc, 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc,
777 	0xce0, 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10,
778 	0xd14, 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44,
779 	0xd48, 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68,
780 	0xd6c, 0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14,
781 	0xe18, 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44,
782 	0xe48, 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c,
783 	0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0,
784 	0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xee8, 0xf14, 0xf4c, 0xf00
785 };
786 
787 static const uint32_t rtl8188ru_bb_vals[] = {
788 	0x0011800d, 0x00ffdb83, 0x000c0004, 0x80040000, 0x00000001,
789 	0x0000fc00, 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385,
790 	0x00000000, 0x01000100, 0x00390204, 0x00000000, 0x00000000,
791 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000,
792 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
793 	0x569a569a, 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000,
794 	0x32323200, 0x03000300, 0x22004000, 0x00000808, 0x00ffc3f1,
795 	0xc0083070, 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800,
796 	0xfffffffe, 0x40302010, 0x00706050, 0x00000000, 0x00000023,
797 	0x00000000, 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300,
798 	0x2e68120f, 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00,
799 	0x15160000, 0x070b0f12, 0x00000104, 0x00d30000, 0x101fbf00,
800 	0x00000007, 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c,
801 	0x08800000, 0x40000100, 0x08800000, 0x40000100, 0x00000000,
802 	0x00000000, 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf,
803 	0x49795994, 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107,
804 	0x007f037f, 0x6954342e, 0x43bc0094, 0x6954342f, 0x433c0094,
805 	0x00000000, 0x5116848b, 0x47c00bff, 0x00000036, 0x2c56000d,
806 	0x018610db, 0x0000001f, 0x00b91612, 0x24000090, 0x20f60000,
807 	0x24000090, 0x20200000, 0x00121820, 0x00000000, 0x00121820,
808 	0x00007f7f, 0x00000000, 0x00000080, 0x00000000, 0x00000000,
809 	0x00000000, 0x00000000, 0x00000000, 0x28000000, 0x00000000,
810 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
811 	0x64b22427, 0x00766932, 0x00222222, 0x00000000, 0x37644302,
812 	0x2f97d40c, 0x00080740, 0x00020401, 0x0000907f, 0x20010201,
813 	0xa0633333, 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000,
814 	0x80608000, 0x00000000, 0x00027293, 0x00000000, 0x00000000,
815 	0x00000000, 0x00000000, 0x6437140a, 0x00000000, 0x00000000,
816 	0x30032064, 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16,
817 	0x1812362e, 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a,
818 	0x03902a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a,
819 	0x00000000, 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2,
820 	0x01007c00, 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f,
821 	0x10008c1f, 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4,
822 	0x631b25a0, 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0,
823 	0x081b25a0, 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0,
824 	0x631b25a0, 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0,
825 	0x31555448, 0x00000003, 0x00000000, 0x00000300
826 };
827 
828 static const uint32_t rtl8188ru_agc_vals[] = {
829 	0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001,
830 	0x7b050001, 0x7b060001, 0x7b070001, 0x7b080001, 0x7a090001,
831 	0x790a0001, 0x780b0001, 0x770c0001, 0x760d0001, 0x750e0001,
832 	0x740f0001, 0x73100001, 0x72110001, 0x71120001, 0x70130001,
833 	0x6f140001, 0x6e150001, 0x6d160001, 0x6c170001, 0x6b180001,
834 	0x6a190001, 0x691a0001, 0x681b0001, 0x671c0001, 0x661d0001,
835 	0x651e0001, 0x641f0001, 0x63200001, 0x62210001, 0x61220001,
836 	0x60230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001,
837 	0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001,
838 	0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001,
839 	0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001,
840 	0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001,
841 	0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001,
842 	0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001,
843 	0x7b460001, 0x7b470001, 0x7b480001, 0x7a490001, 0x794a0001,
844 	0x784b0001, 0x774c0001, 0x764d0001, 0x754e0001, 0x744f0001,
845 	0x73500001, 0x72510001, 0x71520001, 0x70530001, 0x6f540001,
846 	0x6e550001, 0x6d560001, 0x6c570001, 0x6b580001, 0x6a590001,
847 	0x695a0001, 0x685b0001, 0x675c0001, 0x665d0001, 0x655e0001,
848 	0x645f0001, 0x63600001, 0x62610001, 0x61620001, 0x60630001,
849 	0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001,
850 	0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001,
851 	0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001,
852 	0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001,
853 	0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001,
854 	0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e,
855 	0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e,
856 	0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e,
857 	0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e,
858 	0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e,
859 	0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e,
860 	0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e
861 };
862 
863 static const struct rtwn_bb_prog rtl8188ru_bb_prog = {
864 	__arraycount(rtl8188ru_bb_regs),
865 	rtl8188ru_bb_regs,
866 	rtl8188ru_bb_vals,
867 	__arraycount(rtl8188ru_agc_vals),
868 	rtl8188ru_agc_vals
869 };
870 
871 /*
872  * RF initialization values.
873  */
874 struct rtwn_rf_prog {
875 	int		count;
876 	const uint8_t	*regs;
877 	const uint32_t	*vals;
878 };
879 
880 /*
881  * RTL8192CU and RTL8192CE-VAU.
882  */
883 static const uint8_t rtl8192ce_rf1_regs[] = {
884 	0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
885 	0x0f, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
886 	0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2a, 0x2b,
887 	0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b,
888 	0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b,
889 	0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a,
890 	0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c,
891 	0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b,
892 	0x2c, 0x2a, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10,
893 	0x11, 0x10, 0x11, 0x10, 0x11, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13,
894 	0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14,
895 	0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x00,
896 	0x18, 0xfe, 0xfe, 0x1f, 0xfe, 0xfe, 0x1e, 0x1f, 0x00
897 };
898 
899 static const uint32_t rtl8192ce_rf1_vals[] = {
900 	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1,
901 	0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255,
902 	0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000,
903 	0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0,
904 	0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808,
905 	0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003,
906 	0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d,
907 	0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333,
908 	0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a,
909 	0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a,
910 	0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d,
911 	0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333,
912 	0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f,
913 	0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500,
914 	0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000,
915 	0x71000, 0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab, 0x1c49f,
916 	0x18493, 0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8, 0x0001c,
917 	0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424,
918 	0xcf424, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401,
919 	0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000,
920 	0x30159
921 };
922 
923 static const uint8_t rtl8192ce_rf2_regs[] = {
924 	0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
925 	0x0f, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
926 	0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15,
927 	0x15, 0x15, 0x16, 0x16, 0x16, 0x16
928 };
929 
930 static const uint32_t rtl8192ce_rf2_vals[] = {
931 	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1,
932 	0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x32000, 0x71000,
933 	0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab, 0x1c49f, 0x18493,
934 	0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8, 0x0001c, 0x1944c,
935 	0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 0xcf424,
936 	0xe0330, 0xa0330, 0x60330, 0x20330
937 };
938 
939 static const struct rtwn_rf_prog rtl8192ce_rf_prog[] = {
940 	{
941 		__arraycount(rtl8192ce_rf1_regs),
942 		rtl8192ce_rf1_regs,
943 		rtl8192ce_rf1_vals
944 	},
945 	{
946 		__arraycount(rtl8192ce_rf2_regs),
947 		rtl8192ce_rf2_regs,
948 		rtl8192ce_rf2_vals
949 	}
950 };
951 
952 /*
953  * RTL8188CE-VAU.
954  */
955 static const uint32_t rtl8188ce_rf_vals[] = {
956 	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1,
957 	0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255,
958 	0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000,
959 	0x00000, 0x01558, 0x00060, 0x00483, 0x4f200, 0xec7d9, 0x577c0,
960 	0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808,
961 	0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003,
962 	0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d,
963 	0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333,
964 	0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a,
965 	0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a,
966 	0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d,
967 	0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333,
968 	0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f,
969 	0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500,
970 	0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000,
971 	0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab, 0x1c49f,
972 	0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac, 0x00020,
973 	0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424,
974 	0xcf424, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401,
975 	0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000,
976 	0x30159
977 };
978 
979 static const struct rtwn_rf_prog rtl8188ce_rf_prog[] = {
980 	{
981 		__arraycount(rtl8192ce_rf1_regs),
982 		rtl8192ce_rf1_regs,
983 		rtl8188ce_rf_vals
984 	}
985 };
986 
987 
988 /*
989  * RTL8188CU.
990  */
991 static const uint32_t rtl8188cu_rf_vals[] = {
992 	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1,
993 	0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255,
994 	0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000,
995 	0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0,
996 	0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808,
997 	0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003,
998 	0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d,
999 	0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333,
1000 	0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a,
1001 	0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a,
1002 	0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d,
1003 	0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333,
1004 	0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f,
1005 	0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500,
1006 	0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000,
1007 	0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab, 0x1c49f,
1008 	0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac, 0x00020,
1009 	0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405,
1010 	0xcf405, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401,
1011 	0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000,
1012 	0x30159
1013 };
1014 
1015 static const struct rtwn_rf_prog rtl8188cu_rf_prog[] = {
1016 	{
1017 		__arraycount(rtl8192ce_rf1_regs),
1018 		rtl8192ce_rf1_regs,
1019 		rtl8188cu_rf_vals
1020 	}
1021 };
1022 
1023 /*
1024  * RTL8192EU.
1025  */
1026 static const uint8_t rtl8192eu_rf_regs[] = {
1027 	0x7f, 0x81, 0x00, 0x08, 0x18, 0x19, 0x1b, 0x1e, 0x1f, 0x2f,
1028 	0x3f, 0x42, 0x57, 0x58, 0x67, 0x83, 0xb0, 0xb1, 0xb2, 0xb4,
1029 	0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbf, 0xc2, 0xc3,
1030 	0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xdf, 0xef, 0x51,
1031 	0x52, 0x53, 0x56, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36,
1032 	0x18, 0x5a, 0x19, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
1033 	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
1034 	0x34, 0x34, 0x34, 0x34, 0x34, 0x00, 0x84, 0x86, 0x87, 0x8e,
1035 	0x8f, 0xef, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
1036 	0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
1037 	0xef, 0xfe, 0x18, 0xfe, 0xfe, 0xfe, 0xfe, 0x1e, 0x1f, 0x00,
1038 };
1039 
1040 static const uint32_t rtl8192eu_rf_vals[] = {
1041 	0x00082, 0x3fc00, 0x30000, 0x08400, 0x00407, 0x00012, 0x00064,
1042 	0x80009, 0x00880, 0x1a060, 0x00000, 0x060c0, 0xd0000, 0xbe180,
1043 	0x01552, 0x00000, 0xff9f1, 0x55418, 0x8cc00, 0x43083, 0x08166,
1044 	0x0803e, 0x1c69f, 0x0407f, 0x80001, 0x40001, 0x00400, 0xc0000,
1045 	0x02400, 0x00009, 0x40c91, 0x99999, 0x000a3, 0x88820, 0x76c06,
1046 	0x00000, 0x80000, 0x00180, 0x001a0, 0x69545, 0x7e45e, 0x00071,
1047 	0x51ff3, 0x000a8, 0x001e2, 0x002a8, 0x01c24, 0x09c24, 0x11c24,
1048 	0x19c24, 0x00c07, 0x48000, 0x739d0, 0x0a093, 0x0908f, 0x0808c,
1049 	0x0704d, 0x0604a, 0x05047, 0x0400a, 0x03007, 0x02004, 0x01001,
1050 	0x00000, 0x0add7, 0x09dd4, 0x08dd1, 0x07dce, 0x06dcb, 0x05dc8,
1051 	0x04dc5, 0x034cc, 0x0244f, 0x0144c, 0x00014, 0x30159, 0x68180,
1052 	0x0014e, 0x48e00, 0x65540, 0x88000, 0x020a0, 0xf07b0, 0xf02b0,
1053 	0xef7b0, 0xd4fb0, 0xcf060, 0xb0090, 0xa0080, 0x90080, 0x8f780,
1054 	0x787b0, 0x78730, 0x60fb0, 0x5ffa0, 0x40620, 0x37090, 0x20080,
1055 	0x1f060, 0x0ffb0, 0x000a0, 0x00000, 0x0fc07, 0x00000, 0x00000,
1056 	0x00000, 0x00000, 0x00001, 0x80000, 0x33e70,
1057 };
1058 
1059 static const uint8_t rtl8192eu_rf2_regs[] = {
1060 	0x7f, 0x81, 0x00, 0x08, 0x18, 0x19, 0x1b, 0x1e, 0x1f, 0x2f,
1061 	0x3f, 0x42, 0x57, 0x58, 0x67, 0x7f, 0x81, 0x83, 0xdf, 0xef,
1062 	0x51, 0x52, 0x53, 0x56, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36,
1063 	0x36, 0x18, 0x5a, 0x19, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
1064 	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
1065 	0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x00, 0x84, 0x86, 0x87,
1066 	0x8e, 0x8f, 0xef, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
1067 	0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
1068 	0x3b, 0xef, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x1e, 0x1f, 0x00,
1069 };
1070 
1071 static const uint32_t rtl8192eu_rf2_vals[] = {
1072 	0x00082, 0x3fc00, 0x30000, 0x08400, 0x00407, 0x00012, 0x00064,
1073 	0x80009, 0x00880, 0x1a060, 0x00000, 0x060c0, 0xd0000, 0xbe180,
1074 	0x01552, 0x00082, 0x3f000, 0x00000, 0x00180, 0x001a0, 0x69545,
1075 	0x7e42e, 0x00071, 0x51ff3, 0x000a8, 0x001e0, 0x002a8, 0x01ca8,
1076 	0x09c24, 0x11c24, 0x19c24, 0x00c07, 0x48000, 0x739d0, 0x0a093,
1077 	0x0908f, 0x0808c, 0x0704d, 0x0604a, 0x05047, 0x0400a, 0x03007,
1078 	0x02004, 0x01001, 0x00000, 0x0add7, 0x09dd4, 0x08dd1, 0x07dce,
1079 	0x06dcb, 0x05dc8, 0x04dc5, 0x034cc, 0x0244f, 0x0144c, 0x00014,
1080 	0x30159, 0x68180, 0x000ce, 0x48a00, 0x65540, 0x88000, 0x020a0,
1081 	0xf07b0, 0xf02b0, 0xef7b0, 0xd4fb0, 0xcf060, 0xb0090, 0xa0080,
1082 	0x90080, 0x8f780, 0x787b0, 0x78730, 0x60fb0, 0x5ffa0, 0x40620,
1083 	0x37090, 0x20080, 0x1f060, 0x0ffb0, 0x000a0, 0x10159, 0x00000,
1084 	0x00000, 0x00000, 0x00000, 0x00001, 0x80000, 0x33e70,
1085 };
1086 
1087 static const struct rtwn_rf_prog rtl8192eu_rf_prog[] = {
1088 	{
1089 		__arraycount(rtl8192eu_rf_regs),
1090 		rtl8192eu_rf_regs,
1091 		rtl8192eu_rf_vals
1092 	},
1093 	{
1094 		__arraycount(rtl8192eu_rf2_regs),
1095 		rtl8192eu_rf2_regs,
1096 		rtl8192eu_rf2_vals
1097 	}
1098 };
1099 
1100 /*
1101  * RTL8188EU.
1102  */
1103 static const uint8_t rtl8188eu_rf_regs[] = {
1104 	0x00, 0x08, 0x18, 0x19, 0x1e, 0x1f, 0x2f, 0x3f, 0x42, 0x57,
1105 	0x58, 0x67, 0x83, 0xb0, 0xb1, 0xb2, 0xb4, 0xb6, 0xb7, 0xb8,
1106 	0xb9, 0xba, 0xbb, 0xbf, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
1107 	0xc8, 0xc9, 0xca, 0xdf, 0xef, 0x51, 0x52, 0x53, 0x56,
1108 	0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0xb6, 0x18, 0x5a,
1109 	0x19, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
1110 	0x34, 0x34, 0x00, 0x84, 0x86, 0x87, 0x8e, 0x8f, 0xef, 0x3b,
1111 	0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
1112 	0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xef, 0x00, 0x18, 0xfe, 0xfe,
1113 	0x1f, 0xfe, 0xfe, 0x1e, 0x1f, 0x00
1114 };
1115 
1116 static const uint32_t rtl8188eu_rf_vals[] = {
1117 	0x30000, 0x84000, 0x00407, 0x00012, 0x80009, 0x00880, 0x1a060,
1118 	0x00000, 0x060c0, 0xd0000, 0xbe180, 0x01552, 0x00000, 0xff8fc,
1119 	0x54400, 0xccc19, 0x43003, 0x4953e, 0x1c718, 0x060ff, 0x80001,
1120 	0x40000, 0x00400, 0xc0000, 0x02400, 0x00009, 0x40c91, 0x99999,
1121 	0x000a3, 0x88820, 0x76c06, 0x00000, 0x80000, 0x00180, 0x001a0,
1122 	0x6b27d, 0x7e49d, 0x00073, 0x51ff3, 0x00086, 0x00186,
1123 	0x00286, 0x01c25, 0x09c25, 0x11c25, 0x19c25, 0x48538, 0x00c07,
1124 	0x4bd00, 0x739d0, 0x0adf3, 0x09df0, 0x08ded, 0x07dea, 0x06de7,
1125 	0x054ee, 0x044eb, 0x034e8, 0x0246b, 0x01468, 0x0006d, 0x30159,
1126 	0x68200, 0x000ce, 0x48a00, 0x65540, 0x88000, 0x020a0, 0xf02b0,
1127 	0xef7b0, 0xd4fb0, 0xcf060, 0xb0090, 0xa0080, 0x90080, 0x8f780,
1128 	0x722b0, 0x6f7b0, 0x54fb0, 0x4f060, 0x30090, 0x20080, 0x10080,
1129 	0x0f780, 0x000a0, 0x10159, 0x0f407, 0x00000, 0x00000, 0x80003,
1130 	0x00000, 0x00000, 0x00001, 0x80000, 0x33e60
1131 };
1132 
1133 static const struct rtwn_rf_prog rtl8188eu_rf_prog[] = {
1134 	{
1135 		__arraycount(rtl8188eu_rf_regs),
1136 		rtl8188eu_rf_regs,
1137 		rtl8188eu_rf_vals
1138 	}
1139 };
1140 
1141 /*
1142  * RTL8188RU.
1143  */
1144 static const uint32_t rtl8188ru_rf_vals[] = {
1145 	0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb0,
1146 	0x54867, 0x8992e, 0x0e529, 0x39ce7, 0x00451, 0x00000, 0x00255,
1147 	0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000,
1148 	0x0083c, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x977c0,
1149 	0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808,
1150 	0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003,
1151 	0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d,
1152 	0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333,
1153 	0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a,
1154 	0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a,
1155 	0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d,
1156 	0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333,
1157 	0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f,
1158 	0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500,
1159 	0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0xd8000,
1160 	0x90000, 0x51000, 0x12000, 0x28fb4, 0x24fa8, 0x207a4, 0x1c798,
1161 	0x183a4, 0x14398, 0x101a4, 0x0c198, 0x080a4, 0x04098, 0x00014,
1162 	0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405,
1163 	0xcf405, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401,
1164 	0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000,
1165 	0x30159
1166 };
1167 
1168 static const struct rtwn_rf_prog rtl8188ru_rf_prog[] = {
1169 	{
1170 		__arraycount(rtl8192ce_rf1_regs),
1171 		rtl8192ce_rf1_regs,
1172 		rtl8188ru_rf_vals
1173 	}
1174 };
1175 
1176 struct rtwn_txpwr {
1177 	uint8_t	pwr[3][28];
1178 };
1179 
1180 struct rtwn_r88e_txpwr {
1181 	uint8_t pwr[6][28];
1182 };
1183 
1184 /*
1185  * Per RF chain/group/rate Tx gain values.
1186  */
1187 static const struct rtwn_txpwr rtl8192cu_txagc[] = {
1188 	{ {	/* Chain 0. */
1189 	{	/* Group 0. */
1190 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1191 	0x0c, 0x0c, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02,	/* OFDM6~54. */
1192 	0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02,	/* MCS0~7. */
1193 	0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02	/* MCS8~15. */
1194 	},
1195 	{	/* Group 1. */
1196 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1197 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1198 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1199 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1200 	},
1201 	{	/* Group 2. */
1202 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1203 	0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00,	/* OFDM6~54. */
1204 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1205 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1206 	}
1207 	} },
1208 	{ {	/* Chain 1. */
1209 	{	/* Group 0. */
1210 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1211 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1212 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1213 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1214 	},
1215 	{	/* Group 1. */
1216 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1217 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1218 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1219 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1220 	},
1221 	{	/* Group 2. */
1222 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1223 	0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00,	/* OFDM6~54. */
1224 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1225 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1226 	}
1227 	} }
1228 };
1229 
1230 static const struct rtwn_txpwr rtl8188ru_txagc[] = {
1231 	{ {	/* Chain 0. */
1232 	{	/* Group 0. */
1233 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1234 	0x08, 0x08, 0x08, 0x06, 0x06, 0x04, 0x04, 0x00,	/* OFDM6~54. */
1235 	0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00,	/* MCS0~7. */
1236 	0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00	/* MCS8~15. */
1237 	},
1238 	{	/* Group 1. */
1239 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1240 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1241 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1242 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1243 	},
1244 	{	/* Group 2. */
1245 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1246 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1247 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1248 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1249 	}
1250 	} }
1251 };
1252 
1253 static const struct rtwn_r88e_txpwr rtl8188eu_txagc[] = {
1254 	{ {	/* Chain 0. */
1255 	{	/* Group 0. */
1256 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1257 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1258 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1259 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1260 	},
1261 	{	/* Group 1. */
1262 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1263 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1264 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1265 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1266 	},
1267 	{	/* Group 2. */
1268 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1269 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1270 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1271 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1272 	},
1273 	{	/* Group 3. */
1274 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1275 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1276 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1277 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1278 	},
1279 	{	/* Group 4. */
1280 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1281 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1282 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1283 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1284 	},
1285 	{	/* Group 5. */
1286 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1287 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1288 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1289 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1290 	}
1291 	} },
1292 	{ {	/* Chain 1. */
1293 	{	/* Group 0. */
1294 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1295 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1296 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1297 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1298 	},
1299 	{	/* Group 1. */
1300 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1301 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1302 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1303 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1304 	},
1305 	{	/* Group 2. */
1306 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1307 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1308 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1309 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1310 	},
1311 	{	/* Group 3. */
1312 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1313 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1314 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1315 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1316 	},
1317 	{	/* Group 4. */
1318 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1319 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1320 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1321 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1322 	},
1323 	{	/* Group 5. */
1324 	0x00, 0x00, 0x00, 0x00,				/* CCK1~11. */
1325 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* OFDM6~54. */
1326 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MCS0~7. */
1327 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	/* MCS8~15. */
1328 	}
1329 	} }
1330 };
1331 
1332 #endif /* _DEV_IC_RTWN_DATA_H_ */
1333