1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * (c) Copyright 2002-2010, Ralink Technology, Inc.
4  * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
5  */
6 
7 #ifndef __MT7601U_PHY_INITVALS_H
8 #define __MT7601U_PHY_INITVALS_H
9 
10 #define RF_REG_PAIR(bank, reg, value)				\
11 	{ MT_MCU_MEMMAP_RF | (bank) << 16 | (reg), value }
12 
13 static const struct mt76_reg_pair rf_central[] = {
14 	/* Bank 0 - for central blocks: BG, PLL, XTAL, LO, ADC/DAC */
15 	RF_REG_PAIR(0,	 0, 0x02),
16 	RF_REG_PAIR(0,	 1, 0x01),
17 	RF_REG_PAIR(0,	 2, 0x11),
18 	RF_REG_PAIR(0,	 3, 0xff),
19 	RF_REG_PAIR(0,	 4, 0x0a),
20 	RF_REG_PAIR(0,	 5, 0x20),
21 	RF_REG_PAIR(0,	 6, 0x00),
22 	/* B/G */
23 	RF_REG_PAIR(0,	 7, 0x00),
24 	RF_REG_PAIR(0,	 8, 0x00),
25 	RF_REG_PAIR(0,	 9, 0x00),
26 	RF_REG_PAIR(0,	10, 0x00),
27 	RF_REG_PAIR(0,	11, 0x21),
28 	/* XO */
29 	RF_REG_PAIR(0,	13, 0x00),		/* 40mhz xtal */
30 	/* RF_REG_PAIR(0,	13, 0x13), */	/* 20mhz xtal */
31 	RF_REG_PAIR(0,	14, 0x7c),
32 	RF_REG_PAIR(0,	15, 0x22),
33 	RF_REG_PAIR(0,	16, 0x80),
34 	/* PLL */
35 	RF_REG_PAIR(0,	17, 0x99),
36 	RF_REG_PAIR(0,	18, 0x99),
37 	RF_REG_PAIR(0,	19, 0x09),
38 	RF_REG_PAIR(0,	20, 0x50),
39 	RF_REG_PAIR(0,	21, 0xb0),
40 	RF_REG_PAIR(0,	22, 0x00),
41 	RF_REG_PAIR(0,	23, 0xc5),
42 	RF_REG_PAIR(0,	24, 0xfc),
43 	RF_REG_PAIR(0,	25, 0x40),
44 	RF_REG_PAIR(0,	26, 0x4d),
45 	RF_REG_PAIR(0,	27, 0x02),
46 	RF_REG_PAIR(0,	28, 0x72),
47 	RF_REG_PAIR(0,	29, 0x01),
48 	RF_REG_PAIR(0,	30, 0x00),
49 	RF_REG_PAIR(0,	31, 0x00),
50 	/* test ports */
51 	RF_REG_PAIR(0,	32, 0x00),
52 	RF_REG_PAIR(0,	33, 0x00),
53 	RF_REG_PAIR(0,	34, 0x23),
54 	RF_REG_PAIR(0,	35, 0x01), /* change setting to reduce spurs */
55 	RF_REG_PAIR(0,	36, 0x00),
56 	RF_REG_PAIR(0,	37, 0x00),
57 	/* ADC/DAC */
58 	RF_REG_PAIR(0,	38, 0x00),
59 	RF_REG_PAIR(0,	39, 0x20),
60 	RF_REG_PAIR(0,	40, 0x00),
61 	RF_REG_PAIR(0,	41, 0xd0),
62 	RF_REG_PAIR(0,	42, 0x1b),
63 	RF_REG_PAIR(0,	43, 0x02),
64 	RF_REG_PAIR(0,	44, 0x00),
65 };
66 
67 static const struct mt76_reg_pair rf_channel[] = {
68 	RF_REG_PAIR(4,	 0, 0x01),
69 	RF_REG_PAIR(4,	 1, 0x00),
70 	RF_REG_PAIR(4,	 2, 0x00),
71 	RF_REG_PAIR(4,	 3, 0x00),
72 	/* LDO */
73 	RF_REG_PAIR(4,	 4, 0x00),
74 	RF_REG_PAIR(4,	 5, 0x08),
75 	RF_REG_PAIR(4,	 6, 0x00),
76 	/* RX */
77 	RF_REG_PAIR(4,	 7, 0x5b),
78 	RF_REG_PAIR(4,	 8, 0x52),
79 	RF_REG_PAIR(4,	 9, 0xb6),
80 	RF_REG_PAIR(4,	10, 0x57),
81 	RF_REG_PAIR(4,	11, 0x33),
82 	RF_REG_PAIR(4,	12, 0x22),
83 	RF_REG_PAIR(4,	13, 0x3d),
84 	RF_REG_PAIR(4,	14, 0x3e),
85 	RF_REG_PAIR(4,	15, 0x13),
86 	RF_REG_PAIR(4,	16, 0x22),
87 	RF_REG_PAIR(4,	17, 0x23),
88 	RF_REG_PAIR(4,	18, 0x02),
89 	RF_REG_PAIR(4,	19, 0xa4),
90 	RF_REG_PAIR(4,	20, 0x01),
91 	RF_REG_PAIR(4,	21, 0x12),
92 	RF_REG_PAIR(4,	22, 0x80),
93 	RF_REG_PAIR(4,	23, 0xb3),
94 	RF_REG_PAIR(4,	24, 0x00), /* reserved */
95 	RF_REG_PAIR(4,	25, 0x00), /* reserved */
96 	RF_REG_PAIR(4,	26, 0x00), /* reserved */
97 	RF_REG_PAIR(4,	27, 0x00), /* reserved */
98 	/* LOGEN */
99 	RF_REG_PAIR(4,	28, 0x18),
100 	RF_REG_PAIR(4,	29, 0xee),
101 	RF_REG_PAIR(4,	30, 0x6b),
102 	RF_REG_PAIR(4,	31, 0x31),
103 	RF_REG_PAIR(4,	32, 0x5d),
104 	RF_REG_PAIR(4,	33, 0x00), /* reserved */
105 	/* TX */
106 	RF_REG_PAIR(4,	34, 0x96),
107 	RF_REG_PAIR(4,	35, 0x55),
108 	RF_REG_PAIR(4,	36, 0x08),
109 	RF_REG_PAIR(4,	37, 0xbb),
110 	RF_REG_PAIR(4,	38, 0xb3),
111 	RF_REG_PAIR(4,	39, 0xb3),
112 	RF_REG_PAIR(4,	40, 0x03),
113 	RF_REG_PAIR(4,	41, 0x00), /* reserved */
114 	RF_REG_PAIR(4,	42, 0x00), /* reserved */
115 	RF_REG_PAIR(4,	43, 0xc5),
116 	RF_REG_PAIR(4,	44, 0xc5),
117 	RF_REG_PAIR(4,	45, 0xc5),
118 	RF_REG_PAIR(4,	46, 0x07),
119 	RF_REG_PAIR(4,	47, 0xa8),
120 	RF_REG_PAIR(4,	48, 0xef),
121 	RF_REG_PAIR(4,	49, 0x1a),
122 	/* PA */
123 	RF_REG_PAIR(4,	54, 0x07),
124 	RF_REG_PAIR(4,	55, 0xa7),
125 	RF_REG_PAIR(4,	56, 0xcc),
126 	RF_REG_PAIR(4,	57, 0x14),
127 	RF_REG_PAIR(4,	58, 0x07),
128 	RF_REG_PAIR(4,	59, 0xa8),
129 	RF_REG_PAIR(4,	60, 0xd7),
130 	RF_REG_PAIR(4,	61, 0x10),
131 	RF_REG_PAIR(4,	62, 0x1c),
132 	RF_REG_PAIR(4,	63, 0x00), /* reserved */
133 };
134 
135 static const struct mt76_reg_pair rf_vga[] = {
136 	RF_REG_PAIR(5,	 0, 0x47),
137 	RF_REG_PAIR(5,	 1, 0x00),
138 	RF_REG_PAIR(5,	 2, 0x00),
139 	RF_REG_PAIR(5,	 3, 0x08),
140 	RF_REG_PAIR(5,	 4, 0x04),
141 	RF_REG_PAIR(5,	 5, 0x20),
142 	RF_REG_PAIR(5,	 6, 0x3a),
143 	RF_REG_PAIR(5,	 7, 0x3a),
144 	RF_REG_PAIR(5,	 8, 0x00),
145 	RF_REG_PAIR(5,	 9, 0x00),
146 	RF_REG_PAIR(5,	10, 0x10),
147 	RF_REG_PAIR(5,	11, 0x10),
148 	RF_REG_PAIR(5,	12, 0x10),
149 	RF_REG_PAIR(5,	13, 0x10),
150 	RF_REG_PAIR(5,	14, 0x10),
151 	RF_REG_PAIR(5,	15, 0x20),
152 	RF_REG_PAIR(5,	16, 0x22),
153 	RF_REG_PAIR(5,	17, 0x7c),
154 	RF_REG_PAIR(5,	18, 0x00),
155 	RF_REG_PAIR(5,	19, 0x00),
156 	RF_REG_PAIR(5,	20, 0x00),
157 	RF_REG_PAIR(5,	21, 0xf1),
158 	RF_REG_PAIR(5,	22, 0x11),
159 	RF_REG_PAIR(5,	23, 0x02),
160 	RF_REG_PAIR(5,	24, 0x41),
161 	RF_REG_PAIR(5,	25, 0x20),
162 	RF_REG_PAIR(5,	26, 0x00),
163 	RF_REG_PAIR(5,	27, 0xd7),
164 	RF_REG_PAIR(5,	28, 0xa2),
165 	RF_REG_PAIR(5,	29, 0x20),
166 	RF_REG_PAIR(5,	30, 0x49),
167 	RF_REG_PAIR(5,	31, 0x20),
168 	RF_REG_PAIR(5,	32, 0x04),
169 	RF_REG_PAIR(5,	33, 0xf1),
170 	RF_REG_PAIR(5,	34, 0xa1),
171 	RF_REG_PAIR(5,	35, 0x01),
172 	RF_REG_PAIR(5,	41, 0x00),
173 	RF_REG_PAIR(5,	42, 0x00),
174 	RF_REG_PAIR(5,	43, 0x00),
175 	RF_REG_PAIR(5,	44, 0x00),
176 	RF_REG_PAIR(5,	45, 0x00),
177 	RF_REG_PAIR(5,	46, 0x00),
178 	RF_REG_PAIR(5,	47, 0x00),
179 	RF_REG_PAIR(5,	48, 0x00),
180 	RF_REG_PAIR(5,	49, 0x00),
181 	RF_REG_PAIR(5,	50, 0x00),
182 	RF_REG_PAIR(5,	51, 0x00),
183 	RF_REG_PAIR(5,	52, 0x00),
184 	RF_REG_PAIR(5,	53, 0x00),
185 	RF_REG_PAIR(5,	54, 0x00),
186 	RF_REG_PAIR(5,	55, 0x00),
187 	RF_REG_PAIR(5,	56, 0x00),
188 	RF_REG_PAIR(5,	57, 0x00),
189 	RF_REG_PAIR(5,	58, 0x31),
190 	RF_REG_PAIR(5,	59, 0x31),
191 	RF_REG_PAIR(5,	60, 0x0a),
192 	RF_REG_PAIR(5,	61, 0x02),
193 	RF_REG_PAIR(5,	62, 0x00),
194 	RF_REG_PAIR(5,	63, 0x00),
195 };
196 
197 /* TODO: BBP178 is set to 0xff for "CCK CH14 OBW" which overrides the settings
198  *	 from channel switching. Seems stupid at best.
199  */
200 static const struct mt76_reg_pair bbp_high_temp[] = {
201 	{  75, 0x60 },
202 	{  92, 0x02 },
203 	{ 178, 0xff }, /* For CCK CH14 OBW */
204 	{ 195, 0x88 }, { 196, 0x60 },
205 }, bbp_high_temp_bw20[] = {
206 	{  69, 0x12 },
207 	{  91, 0x07 },
208 	{ 195, 0x23 }, { 196, 0x17 },
209 	{ 195, 0x24 }, { 196, 0x06 },
210 	{ 195, 0x81 }, { 196, 0x12 },
211 	{ 195, 0x83 }, { 196, 0x17 },
212 }, bbp_high_temp_bw40[] = {
213 	{  69, 0x15 },
214 	{  91, 0x04 },
215 	{ 195, 0x23 }, { 196, 0x12 },
216 	{ 195, 0x24 }, { 196, 0x08 },
217 	{ 195, 0x81 }, { 196, 0x15 },
218 	{ 195, 0x83 }, { 196, 0x16 },
219 }, bbp_low_temp[] = {
220 	{ 178, 0xff }, /* For CCK CH14 OBW */
221 }, bbp_low_temp_bw20[] = {
222 	{  69, 0x12 },
223 	{  75, 0x5e },
224 	{  91, 0x07 },
225 	{  92, 0x02 },
226 	{ 195, 0x23 }, { 196, 0x17 },
227 	{ 195, 0x24 }, { 196, 0x06 },
228 	{ 195, 0x81 }, { 196, 0x12 },
229 	{ 195, 0x83 }, { 196, 0x17 },
230 	{ 195, 0x88 }, { 196, 0x5e },
231 }, bbp_low_temp_bw40[] = {
232 	{  69, 0x15 },
233 	{  75, 0x5c },
234 	{  91, 0x04 },
235 	{  92, 0x03 },
236 	{ 195, 0x23 }, { 196, 0x10 },
237 	{ 195, 0x24 }, { 196, 0x08 },
238 	{ 195, 0x81 }, { 196, 0x15 },
239 	{ 195, 0x83 }, { 196, 0x16 },
240 	{ 195, 0x88 }, { 196, 0x5b },
241 }, bbp_normal_temp[] = {
242 	{  75, 0x60 },
243 	{  92, 0x02 },
244 	{ 178, 0xff }, /* For CCK CH14 OBW */
245 	{ 195, 0x88 }, { 196, 0x60 },
246 }, bbp_normal_temp_bw20[] = {
247 	{  69, 0x12 },
248 	{  91, 0x07 },
249 	{ 195, 0x23 }, { 196, 0x17 },
250 	{ 195, 0x24 }, { 196, 0x06 },
251 	{ 195, 0x81 }, { 196, 0x12 },
252 	{ 195, 0x83 }, { 196, 0x17 },
253 }, bbp_normal_temp_bw40[] = {
254 	{  69, 0x15 },
255 	{  91, 0x04 },
256 	{ 195, 0x23 }, { 196, 0x12 },
257 	{ 195, 0x24 }, { 196, 0x08 },
258 	{ 195, 0x81 }, { 196, 0x15 },
259 	{ 195, 0x83 }, { 196, 0x16 },
260 };
261 
262 #define BBP_TABLE(arr) { arr, ARRAY_SIZE(arr), }
263 
264 static const struct reg_table {
265 	const struct mt76_reg_pair *regs;
266 	size_t n;
267 } bbp_mode_table[3][3] = {
268 	{
269 		BBP_TABLE(bbp_normal_temp_bw20),
270 		BBP_TABLE(bbp_normal_temp_bw40),
271 		BBP_TABLE(bbp_normal_temp),
272 	}, {
273 		BBP_TABLE(bbp_high_temp_bw20),
274 		BBP_TABLE(bbp_high_temp_bw40),
275 		BBP_TABLE(bbp_high_temp),
276 	}, {
277 		BBP_TABLE(bbp_low_temp_bw20),
278 		BBP_TABLE(bbp_low_temp_bw40),
279 		BBP_TABLE(bbp_low_temp),
280 	}
281 };
282 
283 #endif
284