1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Afatech AF9013 demodulator driver
4  *
5  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
6  * Copyright (C) 2011 Antti Palosaari <crope@iki.fi>
7  *
8  * Thanks to Afatech who kindly provided information.
9  */
10 
11 #ifndef AF9013_PRIV_H
12 #define AF9013_PRIV_H
13 
14 #include <media/dvb_frontend.h>
15 #include <linux/int_log.h>
16 #include "af9013.h"
17 #include <linux/firmware.h>
18 #include <linux/i2c-mux.h>
19 #include <linux/math64.h>
20 #include <linux/regmap.h>
21 
22 #define AF9013_FIRMWARE "dvb-fe-af9013.fw"
23 
24 struct af9013_reg_mask_val {
25 	u16 reg;
26 	u8  mask;
27 	u8  val;
28 };
29 
30 struct af9013_coeff {
31 	u32 clock;
32 	u32 bandwidth_hz;
33 	u8 val[24];
34 };
35 
36 /* pre-calculated coeff lookup table */
37 static const struct af9013_coeff coeff_lut[] = {
38 	/* 28.800 MHz */
39 	{ 28800000, 8000000, { 0x02, 0x8a, 0x28, 0xa3, 0x05, 0x14,
40 		0x51, 0x11, 0x00, 0xa2, 0x8f, 0x3d, 0x00, 0xa2, 0x8a,
41 		0x29, 0x00, 0xa2, 0x85, 0x14, 0x01, 0x45, 0x14, 0x14 } },
42 	{ 28800000, 7000000, { 0x02, 0x38, 0xe3, 0x8e, 0x04, 0x71,
43 		0xc7, 0x07, 0x00, 0x8e, 0x3d, 0x55, 0x00, 0x8e, 0x38,
44 		0xe4, 0x00, 0x8e, 0x34, 0x72, 0x01, 0x1c, 0x71, 0x32 } },
45 	{ 28800000, 6000000, { 0x01, 0xe7, 0x9e, 0x7a, 0x03, 0xcf,
46 		0x3c, 0x3d, 0x00, 0x79, 0xeb, 0x6e, 0x00, 0x79, 0xe7,
47 		0x9e, 0x00, 0x79, 0xe3, 0xcf, 0x00, 0xf3, 0xcf, 0x0f } },
48 	/* 20.480 MHz */
49 	{ 20480000, 8000000, { 0x03, 0x92, 0x49, 0x26, 0x07, 0x24,
50 		0x92, 0x13, 0x00, 0xe4, 0x99, 0x6e, 0x00, 0xe4, 0x92,
51 		0x49, 0x00, 0xe4, 0x8b, 0x25, 0x01, 0xc9, 0x24, 0x25 } },
52 	{ 20480000, 7000000, { 0x03, 0x20, 0x00, 0x01, 0x06, 0x40,
53 		0x00, 0x00, 0x00, 0xc8, 0x06, 0x40, 0x00, 0xc8, 0x00,
54 		0x00, 0x00, 0xc7, 0xf9, 0xc0, 0x01, 0x90, 0x00, 0x00 } },
55 	{ 20480000, 6000000, { 0x02, 0xad, 0xb6, 0xdc, 0x05, 0x5b,
56 		0x6d, 0x2e, 0x00, 0xab, 0x73, 0x13, 0x00, 0xab, 0x6d,
57 		0xb7, 0x00, 0xab, 0x68, 0x5c, 0x01, 0x56, 0xdb, 0x1c } },
58 	/* 28.000 MHz */
59 	{ 28000000, 8000000, { 0x02, 0x9c, 0xbc, 0x15, 0x05, 0x39,
60 		0x78, 0x0a, 0x00, 0xa7, 0x34, 0x3f, 0x00, 0xa7, 0x2f,
61 		0x05, 0x00, 0xa7, 0x29, 0xcc, 0x01, 0x4e, 0x5e, 0x03 } },
62 	{ 28000000, 7000000, { 0x02, 0x49, 0x24, 0x92, 0x04, 0x92,
63 		0x49, 0x09, 0x00, 0x92, 0x4d, 0xb7, 0x00, 0x92, 0x49,
64 		0x25, 0x00, 0x92, 0x44, 0x92, 0x01, 0x24, 0x92, 0x12 } },
65 	{ 28000000, 6000000, { 0x01, 0xf5, 0x8d, 0x10, 0x03, 0xeb,
66 		0x1a, 0x08, 0x00, 0x7d, 0x67, 0x2f, 0x00, 0x7d, 0x63,
67 		0x44, 0x00, 0x7d, 0x5f, 0x59, 0x00, 0xfa, 0xc6, 0x22 } },
68 	/* 25.000 MHz */
69 	{ 25000000, 8000000, { 0x02, 0xec, 0xfb, 0x9d, 0x05, 0xd9,
70 		0xf7, 0x0e, 0x00, 0xbb, 0x44, 0xc1, 0x00, 0xbb, 0x3e,
71 		0xe7, 0x00, 0xbb, 0x39, 0x0d, 0x01, 0x76, 0x7d, 0x34 } },
72 	{ 25000000, 7000000, { 0x02, 0x8f, 0x5c, 0x29, 0x05, 0x1e,
73 		0xb8, 0x14, 0x00, 0xa3, 0xdc, 0x29, 0x00, 0xa3, 0xd7,
74 		0x0a, 0x00, 0xa3, 0xd1, 0xec, 0x01, 0x47, 0xae, 0x05 } },
75 	{ 25000000, 6000000, { 0x02, 0x31, 0xbc, 0xb5, 0x04, 0x63,
76 		0x79, 0x1b, 0x00, 0x8c, 0x73, 0x91, 0x00, 0x8c, 0x6f,
77 		0x2d, 0x00, 0x8c, 0x6a, 0xca, 0x01, 0x18, 0xde, 0x17 } },
78 };
79 
80 /*
81  * Afatech AF9013 demod init
82  */
83 static const struct af9013_reg_mask_val demod_init_tab[] = {
84 	{0xd73a, 0xff, 0xa1},
85 	{0xd73b, 0xff, 0x1f},
86 	{0xd73c, 0xf0, 0xa0},
87 	{0xd732, 0x08, 0x00},
88 	{0xd731, 0x30, 0x30},
89 	{0xd73d, 0x80, 0x80},
90 	{0xd740, 0x01, 0x00},
91 	{0xd740, 0x02, 0x00},
92 	{0xd740, 0x04, 0x00},
93 	{0xd740, 0x08, 0x08},
94 	{0xd3c1, 0x10, 0x10},
95 	{0x9124, 0xff, 0x58},
96 	{0x9125, 0x03, 0x02},
97 	{0xd3a2, 0xff, 0x00},
98 	{0xd3a3, 0xff, 0x04},
99 	{0xd305, 0xff, 0x32},
100 	{0xd306, 0xff, 0x10},
101 	{0xd304, 0xff, 0x04},
102 	{0x9112, 0x01, 0x01},
103 	{0x911d, 0x01, 0x01},
104 	{0x911a, 0x01, 0x01},
105 	{0x911b, 0x01, 0x01},
106 	{0x9bce, 0x0f, 0x02},
107 	{0x9116, 0x01, 0x01},
108 	{0x9122, 0xff, 0xd0},
109 	{0xd2e0, 0xff, 0xd0},
110 	{0xd2e9, 0x0f, 0x0d},
111 	{0xd38c, 0xff, 0xfc},
112 	{0xd38d, 0xff, 0x00},
113 	{0xd38e, 0xff, 0x7e},
114 	{0xd38f, 0xff, 0x00},
115 	{0xd390, 0xff, 0x2f},
116 	{0xd145, 0x10, 0x10},
117 	{0xd1a9, 0x10, 0x10},
118 	{0xd158, 0xe0, 0x20},
119 	{0xd159, 0x3f, 0x06},
120 	{0xd167, 0xff, 0x00},
121 	{0xd168, 0x0f, 0x07},
122 	{0xd1c3, 0xe0, 0x00},
123 	{0xd1c4, 0x3f, 0x00},
124 	{0xd1c5, 0x7f, 0x10},
125 	{0xd1c6, 0x07, 0x02},
126 	{0xd080, 0x7c, 0x0c},
127 	{0xd081, 0xf0, 0x90},
128 	{0xd098, 0xf0, 0xf0},
129 	{0xd098, 0x0f, 0x03},
130 	{0xdbc0, 0x10, 0x10},
131 	{0xdbc7, 0xff, 0x08},
132 	{0xdbc8, 0xf0, 0x00},
133 	{0xdbc9, 0x1f, 0x01},
134 	{0xd280, 0xff, 0xe0},
135 	{0xd281, 0xff, 0xff},
136 	{0xd282, 0xff, 0xff},
137 	{0xd283, 0xff, 0xc3},
138 	{0xd284, 0xff, 0xff},
139 	{0xd285, 0x0f, 0x01},
140 	{0xd0f0, 0x7f, 0x1a},
141 	{0xd0f1, 0x10, 0x10},
142 	{0xd0f2, 0xff, 0x0c},
143 	{0xd101, 0xe0, 0xc0},
144 	{0xd103, 0x0f, 0x08},
145 	{0xd0f8, 0x7f, 0x20},
146 	{0xd111, 0x20, 0x00},
147 	{0xd111, 0x40, 0x00},
148 	{0x910b, 0xff, 0x0a},
149 	{0x9115, 0xff, 0x02},
150 	{0x910c, 0xff, 0x02},
151 	{0x910d, 0xff, 0x08},
152 	{0x910e, 0xff, 0x0a},
153 	{0x9bf6, 0xff, 0x06},
154 	{0x9bf8, 0xff, 0x02},
155 	{0x9bf7, 0xff, 0x05},
156 	{0x9bf9, 0xff, 0x0f},
157 	{0x9bfc, 0xff, 0x13},
158 	{0x9bd3, 0xff, 0xff},
159 	{0x9bbe, 0x01, 0x01},
160 	{0x9bcc, 0x01, 0x01},
161 };
162 
163 /*
164  * Panasonic ENV77H11D5 tuner init
165  * AF9013_TUNER_ENV77H11D5    0x81
166  */
167 static const struct af9013_reg_mask_val tuner_init_tab_env77h11d5[] = {
168 	{0x9bd5, 0xff, 0x01},
169 	{0x9bd6, 0xff, 0x03},
170 	{0x9bbe, 0xff, 0x01},
171 	{0xd1a0, 0x02, 0x02},
172 	{0xd000, 0x01, 0x01},
173 	{0xd000, 0x02, 0x00},
174 	{0xd001, 0x02, 0x02},
175 	{0xd001, 0x01, 0x00},
176 	{0xd001, 0x20, 0x00},
177 	{0xd002, 0x1f, 0x19},
178 	{0xd003, 0x1f, 0x1a},
179 	{0xd004, 0x1f, 0x19},
180 	{0xd005, 0x1f, 0x1a},
181 	{0xd00e, 0x1f, 0x10},
182 	{0xd00f, 0x07, 0x04},
183 	{0xd00f, 0x38, 0x28},
184 	{0xd010, 0x07, 0x04},
185 	{0xd010, 0x38, 0x28},
186 	{0xd016, 0xf0, 0x30},
187 	{0xd01f, 0x3f, 0x0a},
188 	{0xd020, 0x3f, 0x0a},
189 	{0x9bda, 0xff, 0x00},
190 	{0x9be3, 0xff, 0x00},
191 	{0xd015, 0xff, 0x50},
192 	{0xd016, 0x01, 0x00},
193 	{0xd044, 0xff, 0x46},
194 	{0xd045, 0x01, 0x00},
195 	{0xd008, 0xff, 0xdf},
196 	{0xd009, 0x03, 0x02},
197 	{0xd006, 0xff, 0x44},
198 	{0xd007, 0x03, 0x01},
199 	{0xd00c, 0xff, 0xeb},
200 	{0xd00d, 0x03, 0x02},
201 	{0xd00a, 0xff, 0xf4},
202 	{0xd00b, 0x03, 0x01},
203 	{0x9bba, 0xff, 0xf9},
204 	{0x9bc3, 0xff, 0xdf},
205 	{0x9bc4, 0xff, 0x02},
206 	{0x9bc5, 0xff, 0xeb},
207 	{0x9bc6, 0xff, 0x02},
208 	{0x9bc9, 0xff, 0x52},
209 	{0xd011, 0xff, 0x3c},
210 	{0xd012, 0x03, 0x01},
211 	{0xd013, 0xff, 0xf7},
212 	{0xd014, 0x03, 0x02},
213 	{0xd040, 0xff, 0x0b},
214 	{0xd041, 0x03, 0x02},
215 	{0xd042, 0xff, 0x4d},
216 	{0xd043, 0x03, 0x00},
217 	{0xd045, 0x02, 0x00},
218 	{0x9bcf, 0x01, 0x01},
219 	{0xd045, 0x04, 0x04},
220 	{0xd04f, 0xff, 0x9a},
221 	{0xd050, 0x01, 0x01},
222 	{0xd051, 0xff, 0x5a},
223 	{0xd052, 0x01, 0x01},
224 	{0xd053, 0xff, 0x50},
225 	{0xd054, 0xff, 0x46},
226 	{0x9bd7, 0xff, 0x0a},
227 	{0x9bd8, 0xff, 0x14},
228 	{0x9bd9, 0xff, 0x08},
229 };
230 
231 /*
232  * Microtune MT2060 tuner init
233  * AF9013_TUNER_MT2060        0x82
234  */
235 static const struct af9013_reg_mask_val tuner_init_tab_mt2060[] = {
236 	{0x9bd5, 0xff, 0x01},
237 	{0x9bd6, 0xff, 0x07},
238 	{0xd1a0, 0x02, 0x02},
239 	{0xd000, 0x01, 0x01},
240 	{0xd000, 0x02, 0x00},
241 	{0xd001, 0x02, 0x02},
242 	{0xd001, 0x01, 0x00},
243 	{0xd001, 0x20, 0x00},
244 	{0xd002, 0x1f, 0x19},
245 	{0xd003, 0x1f, 0x1a},
246 	{0xd004, 0x1f, 0x19},
247 	{0xd005, 0x1f, 0x1a},
248 	{0xd00e, 0x1f, 0x10},
249 	{0xd00f, 0x07, 0x04},
250 	{0xd00f, 0x38, 0x28},
251 	{0xd010, 0x07, 0x04},
252 	{0xd010, 0x38, 0x28},
253 	{0xd016, 0xf0, 0x30},
254 	{0xd01f, 0x3f, 0x0a},
255 	{0xd020, 0x3f, 0x0a},
256 	{0x9bda, 0xff, 0x00},
257 	{0x9be3, 0xff, 0x00},
258 	{0x9bbe, 0x01, 0x00},
259 	{0x9bcc, 0x01, 0x00},
260 	{0x9bb9, 0xff, 0x75},
261 	{0x9bcd, 0xff, 0x24},
262 	{0x9bff, 0xff, 0x30},
263 	{0xd015, 0xff, 0x46},
264 	{0xd016, 0x01, 0x00},
265 	{0xd044, 0xff, 0x46},
266 	{0xd045, 0x01, 0x00},
267 	{0xd008, 0xff, 0x0f},
268 	{0xd009, 0x03, 0x02},
269 	{0xd006, 0xff, 0x32},
270 	{0xd007, 0x03, 0x01},
271 	{0xd00c, 0xff, 0x36},
272 	{0xd00d, 0x03, 0x03},
273 	{0xd00a, 0xff, 0x35},
274 	{0xd00b, 0x03, 0x01},
275 	{0x9bc7, 0xff, 0x07},
276 	{0x9bc8, 0xff, 0x90},
277 	{0x9bc3, 0xff, 0x0f},
278 	{0x9bc4, 0xff, 0x02},
279 	{0x9bc5, 0xff, 0x36},
280 	{0x9bc6, 0xff, 0x03},
281 	{0x9bba, 0xff, 0xc9},
282 	{0x9bc9, 0xff, 0x79},
283 	{0xd011, 0xff, 0x10},
284 	{0xd012, 0x03, 0x01},
285 	{0xd013, 0xff, 0x45},
286 	{0xd014, 0x03, 0x03},
287 	{0xd040, 0xff, 0x98},
288 	{0xd041, 0x03, 0x00},
289 	{0xd042, 0xff, 0xcf},
290 	{0xd043, 0x03, 0x03},
291 	{0xd045, 0x02, 0x00},
292 	{0x9bcf, 0x01, 0x01},
293 	{0xd045, 0x04, 0x04},
294 	{0xd04f, 0xff, 0x9a},
295 	{0xd050, 0x01, 0x01},
296 	{0xd051, 0xff, 0x5a},
297 	{0xd052, 0x01, 0x01},
298 	{0xd053, 0xff, 0x50},
299 	{0xd054, 0xff, 0x46},
300 	{0x9bd7, 0xff, 0x0a},
301 	{0x9bd8, 0xff, 0x14},
302 	{0x9bd9, 0xff, 0x08},
303 	{0x9bd0, 0xff, 0xcc},
304 	{0x9be4, 0xff, 0xa0},
305 	{0x9bbd, 0xff, 0x8e},
306 	{0x9be2, 0xff, 0x4d},
307 	{0x9bee, 0x01, 0x01},
308 };
309 
310 /*
311  * Microtune MT2060 tuner init
312  * AF9013_TUNER_MT2060_2      0x93
313  */
314 static const struct af9013_reg_mask_val tuner_init_tab_mt2060_2[] = {
315 	{0x9bd5, 0xff, 0x01},
316 	{0x9bd6, 0xff, 0x06},
317 	{0x9bbe, 0xff, 0x01},
318 	{0xd1a0, 0x02, 0x02},
319 	{0xd000, 0x01, 0x01},
320 	{0xd000, 0x02, 0x00},
321 	{0xd001, 0x02, 0x02},
322 	{0xd001, 0x01, 0x00},
323 	{0xd001, 0x20, 0x00},
324 	{0xd002, 0x1f, 0x19},
325 	{0xd003, 0x1f, 0x1a},
326 	{0xd004, 0x1f, 0x19},
327 	{0xd005, 0x1f, 0x1a},
328 	{0xd00e, 0x1f, 0x10},
329 	{0xd00f, 0x07, 0x04},
330 	{0xd00f, 0x38, 0x28},
331 	{0xd010, 0x07, 0x04},
332 	{0xd010, 0x38, 0x28},
333 	{0xd016, 0xf0, 0x30},
334 	{0xd01f, 0x3f, 0x0a},
335 	{0xd020, 0x3f, 0x0a},
336 	{0xd015, 0xff, 0x46},
337 	{0xd016, 0x01, 0x00},
338 	{0xd044, 0xff, 0x46},
339 	{0xd045, 0x01, 0x00},
340 	{0xd008, 0xff, 0x0f},
341 	{0xd009, 0x03, 0x02},
342 	{0xd006, 0xff, 0x32},
343 	{0xd007, 0x03, 0x01},
344 	{0xd00c, 0xff, 0x36},
345 	{0xd00d, 0x03, 0x03},
346 	{0xd00a, 0xff, 0x35},
347 	{0xd00b, 0x03, 0x01},
348 	{0x9bc7, 0xff, 0x07},
349 	{0x9bc8, 0xff, 0x90},
350 	{0x9bc3, 0xff, 0x0f},
351 	{0x9bc4, 0xff, 0x02},
352 	{0x9bc5, 0xff, 0x36},
353 	{0x9bc6, 0xff, 0x03},
354 	{0x9bba, 0xff, 0xc9},
355 	{0x9bc9, 0xff, 0x79},
356 	{0xd011, 0xff, 0x10},
357 	{0xd012, 0x03, 0x01},
358 	{0xd013, 0xff, 0x45},
359 	{0xd014, 0x03, 0x03},
360 	{0xd040, 0xff, 0x98},
361 	{0xd041, 0x03, 0x00},
362 	{0xd042, 0xff, 0xcf},
363 	{0xd043, 0x03, 0x03},
364 	{0xd045, 0x02, 0x00},
365 	{0x9bcf, 0xff, 0x01},
366 	{0xd045, 0x04, 0x04},
367 	{0xd04f, 0xff, 0x9a},
368 	{0xd050, 0x01, 0x01},
369 	{0xd051, 0xff, 0x5a},
370 	{0xd052, 0x01, 0x01},
371 	{0xd053, 0xff, 0x96},
372 	{0xd054, 0xff, 0x46},
373 	{0xd045, 0x80, 0x00},
374 	{0x9bd7, 0xff, 0x0a},
375 	{0x9bd8, 0xff, 0x14},
376 	{0x9bd9, 0xff, 0x08},
377 };
378 
379 /*
380  * MaxLinear MXL5003 tuner init
381  * AF9013_TUNER_MXL5003D      0x03
382  */
383 static const struct af9013_reg_mask_val tuner_init_tab_mxl5003d[] = {
384 	{0x9bd5, 0xff, 0x01},
385 	{0x9bd6, 0xff, 0x09},
386 	{0xd1a0, 0x02, 0x02},
387 	{0xd000, 0x01, 0x01},
388 	{0xd000, 0x02, 0x00},
389 	{0xd001, 0x02, 0x02},
390 	{0xd001, 0x01, 0x00},
391 	{0xd001, 0x20, 0x00},
392 	{0xd002, 0x1f, 0x19},
393 	{0xd003, 0x1f, 0x1a},
394 	{0xd004, 0x1f, 0x19},
395 	{0xd005, 0x1f, 0x1a},
396 	{0xd00e, 0x1f, 0x10},
397 	{0xd00f, 0x07, 0x04},
398 	{0xd00f, 0x38, 0x28},
399 	{0xd010, 0x07, 0x04},
400 	{0xd010, 0x38, 0x28},
401 	{0xd016, 0xf0, 0x30},
402 	{0xd01f, 0x3f, 0x0a},
403 	{0xd020, 0x3f, 0x0a},
404 	{0x9bda, 0xff, 0x00},
405 	{0x9be3, 0xff, 0x00},
406 	{0x9bfc, 0xff, 0x0f},
407 	{0x9bf6, 0xff, 0x01},
408 	{0x9bbe, 0x01, 0x01},
409 	{0xd015, 0xff, 0x33},
410 	{0xd016, 0x01, 0x00},
411 	{0xd044, 0xff, 0x40},
412 	{0xd045, 0x01, 0x00},
413 	{0xd008, 0xff, 0x0f},
414 	{0xd009, 0x03, 0x02},
415 	{0xd006, 0xff, 0x6c},
416 	{0xd007, 0x03, 0x00},
417 	{0xd00c, 0xff, 0x3d},
418 	{0xd00d, 0x03, 0x00},
419 	{0xd00a, 0xff, 0x45},
420 	{0xd00b, 0x03, 0x01},
421 	{0x9bc7, 0xff, 0x07},
422 	{0x9bc8, 0xff, 0x52},
423 	{0x9bc3, 0xff, 0x0f},
424 	{0x9bc4, 0xff, 0x02},
425 	{0x9bc5, 0xff, 0x3d},
426 	{0x9bc6, 0xff, 0x00},
427 	{0x9bba, 0xff, 0xa2},
428 	{0x9bc9, 0xff, 0xa0},
429 	{0xd011, 0xff, 0x56},
430 	{0xd012, 0x03, 0x00},
431 	{0xd013, 0xff, 0x50},
432 	{0xd014, 0x03, 0x00},
433 	{0xd040, 0xff, 0x56},
434 	{0xd041, 0x03, 0x00},
435 	{0xd042, 0xff, 0x50},
436 	{0xd043, 0x03, 0x00},
437 	{0xd045, 0x02, 0x00},
438 	{0x9bcf, 0xff, 0x01},
439 	{0xd045, 0x04, 0x04},
440 	{0xd04f, 0xff, 0x9a},
441 	{0xd050, 0x01, 0x01},
442 	{0xd051, 0xff, 0x5a},
443 	{0xd052, 0x01, 0x01},
444 	{0xd053, 0xff, 0x50},
445 	{0xd054, 0xff, 0x46},
446 	{0x9bd7, 0xff, 0x0a},
447 	{0x9bd8, 0xff, 0x14},
448 	{0x9bd9, 0xff, 0x08},
449 };
450 
451 /*
452  * MaxLinear MXL5005S & MXL5007T tuner init
453  * AF9013_TUNER_MXL5005D      0x0d
454  * AF9013_TUNER_MXL5005R      0x1e
455  * AF9013_TUNER_MXL5007T      0xb1
456  */
457 static const struct af9013_reg_mask_val tuner_init_tab_mxl5005[] = {
458 	{0x9bd5, 0xff, 0x01},
459 	{0x9bd6, 0xff, 0x07},
460 	{0xd1a0, 0x02, 0x02},
461 	{0xd000, 0x01, 0x01},
462 	{0xd000, 0x02, 0x00},
463 	{0xd001, 0x02, 0x02},
464 	{0xd001, 0x01, 0x00},
465 	{0xd001, 0x20, 0x00},
466 	{0xd002, 0x1f, 0x19},
467 	{0xd003, 0x1f, 0x1a},
468 	{0xd004, 0x1f, 0x19},
469 	{0xd005, 0x1f, 0x1a},
470 	{0xd00e, 0x1f, 0x10},
471 	{0xd00f, 0x07, 0x04},
472 	{0xd00f, 0x38, 0x28},
473 	{0xd010, 0x07, 0x04},
474 	{0xd010, 0x38, 0x28},
475 	{0xd016, 0xf0, 0x30},
476 	{0xd01f, 0x3f, 0x0a},
477 	{0xd020, 0x3f, 0x0a},
478 	{0x9bda, 0xff, 0x01},
479 	{0x9be3, 0xff, 0x01},
480 	{0x9bbe, 0x01, 0x01},
481 	{0x9bcc, 0x01, 0x01},
482 	{0x9bb9, 0xff, 0x00},
483 	{0x9bcd, 0xff, 0x28},
484 	{0x9bff, 0xff, 0x24},
485 	{0xd015, 0xff, 0x40},
486 	{0xd016, 0x01, 0x00},
487 	{0xd044, 0xff, 0x40},
488 	{0xd045, 0x01, 0x00},
489 	{0xd008, 0xff, 0x0f},
490 	{0xd009, 0x03, 0x02},
491 	{0xd006, 0xff, 0x73},
492 	{0xd007, 0x03, 0x01},
493 	{0xd00c, 0xff, 0xfa},
494 	{0xd00d, 0x03, 0x01},
495 	{0xd00a, 0xff, 0xff},
496 	{0xd00b, 0x03, 0x01},
497 	{0x9bc7, 0xff, 0x23},
498 	{0x9bc8, 0xff, 0x55},
499 	{0x9bc3, 0xff, 0x01},
500 	{0x9bc4, 0xff, 0x02},
501 	{0x9bc5, 0xff, 0xfa},
502 	{0x9bc6, 0xff, 0x01},
503 	{0x9bba, 0xff, 0xff},
504 	{0x9bc9, 0xff, 0xff},
505 	{0x9bd3, 0xff, 0x95},
506 	{0xd011, 0xff, 0x70},
507 	{0xd012, 0x03, 0x01},
508 	{0xd013, 0xff, 0xfb},
509 	{0xd014, 0x03, 0x01},
510 	{0xd040, 0xff, 0x70},
511 	{0xd041, 0x03, 0x01},
512 	{0xd042, 0xff, 0xfb},
513 	{0xd043, 0x03, 0x01},
514 	{0xd045, 0x02, 0x00},
515 	{0x9bcf, 0x01, 0x01},
516 	{0xd045, 0x04, 0x04},
517 	{0xd04f, 0xff, 0x9a},
518 	{0xd050, 0x01, 0x01},
519 	{0xd051, 0xff, 0x5a},
520 	{0xd052, 0x01, 0x01},
521 	{0xd053, 0xff, 0x50},
522 	{0xd054, 0xff, 0x46},
523 	{0x9bd7, 0xff, 0x0a},
524 	{0x9bd8, 0xff, 0x14},
525 	{0x9bd9, 0xff, 0x08},
526 	{0x9bd0, 0xff, 0x93},
527 	{0x9be4, 0xff, 0xfe},
528 	{0x9bbd, 0xff, 0x63},
529 	{0x9be2, 0xff, 0xfe},
530 	{0x9bee, 0x01, 0x01},
531 };
532 
533 /*
534  * Quantek QT1010 tuner init
535  * AF9013_TUNER_QT1010        0x86
536  * AF9013_TUNER_QT1010A       0xa2
537  */
538 static const struct af9013_reg_mask_val tuner_init_tab_qt1010[] = {
539 	{0x9bd5, 0xff, 0x01},
540 	{0x9bd6, 0xff, 0x09},
541 	{0xd1a0, 0x02, 0x02},
542 	{0xd000, 0x01, 0x01},
543 	{0xd000, 0x02, 0x00},
544 	{0xd001, 0x02, 0x02},
545 	{0xd001, 0x01, 0x00},
546 	{0xd001, 0x20, 0x00},
547 	{0xd002, 0x1f, 0x19},
548 	{0xd003, 0x1f, 0x1a},
549 	{0xd004, 0x1f, 0x19},
550 	{0xd005, 0x1f, 0x1a},
551 	{0xd00e, 0x1f, 0x10},
552 	{0xd00f, 0x07, 0x04},
553 	{0xd00f, 0x38, 0x28},
554 	{0xd010, 0x07, 0x04},
555 	{0xd010, 0x38, 0x28},
556 	{0xd016, 0xf0, 0x30},
557 	{0xd01f, 0x3f, 0x0a},
558 	{0xd020, 0x3f, 0x0a},
559 	{0x9bda, 0xff, 0x01},
560 	{0x9be3, 0xff, 0x01},
561 	{0xd015, 0xff, 0x46},
562 	{0xd016, 0x01, 0x00},
563 	{0xd044, 0xff, 0x46},
564 	{0xd045, 0x01, 0x00},
565 	{0x9bbe, 0x01, 0x01},
566 	{0x9bcc, 0x01, 0x01},
567 	{0x9bb9, 0xff, 0x00},
568 	{0x9bcd, 0xff, 0x28},
569 	{0x9bff, 0xff, 0x20},
570 	{0xd008, 0xff, 0x0f},
571 	{0xd009, 0x03, 0x02},
572 	{0xd006, 0xff, 0x99},
573 	{0xd007, 0x03, 0x01},
574 	{0xd00c, 0xff, 0x0f},
575 	{0xd00d, 0x03, 0x02},
576 	{0xd00a, 0xff, 0x50},
577 	{0xd00b, 0x03, 0x01},
578 	{0x9bc7, 0xff, 0x00},
579 	{0x9bc8, 0xff, 0x00},
580 	{0x9bc3, 0xff, 0x0f},
581 	{0x9bc4, 0xff, 0x02},
582 	{0x9bc5, 0xff, 0x0f},
583 	{0x9bc6, 0xff, 0x02},
584 	{0x9bba, 0xff, 0xc5},
585 	{0x9bc9, 0xff, 0xff},
586 	{0xd011, 0xff, 0x58},
587 	{0xd012, 0x03, 0x02},
588 	{0xd013, 0xff, 0x89},
589 	{0xd014, 0x03, 0x01},
590 	{0xd040, 0xff, 0x58},
591 	{0xd041, 0x03, 0x02},
592 	{0xd042, 0xff, 0x89},
593 	{0xd043, 0x03, 0x01},
594 	{0xd045, 0x02, 0x00},
595 	{0x9bcf, 0x01, 0x01},
596 	{0xd045, 0x04, 0x04},
597 	{0xd04f, 0xff, 0x9a},
598 	{0xd050, 0x01, 0x01},
599 	{0xd051, 0xff, 0x5a},
600 	{0xd052, 0x01, 0x01},
601 	{0xd053, 0xff, 0x50},
602 	{0xd054, 0xff, 0x46},
603 	{0x9bd7, 0xff, 0x0a},
604 	{0x9bd8, 0xff, 0x14},
605 	{0x9bd9, 0xff, 0x08},
606 	{0x9bd0, 0xff, 0xcd},
607 	{0x9be4, 0xff, 0xbb},
608 	{0x9bbd, 0xff, 0x93},
609 	{0x9be2, 0xff, 0x80},
610 	{0x9bee, 0x01, 0x01},
611 };
612 
613 /*
614  * Freescale MC44S803 tuner init
615  * AF9013_TUNER_MC44S803      0x85
616  */
617 static const struct af9013_reg_mask_val tuner_init_tab_mc44s803[] = {
618 	{0x9bd5, 0xff, 0x01},
619 	{0x9bd6, 0xff, 0x06},
620 	{0xd1a0, 0x02, 0x02},
621 	{0xd000, 0x01, 0x01},
622 	{0xd000, 0x02, 0x00},
623 	{0xd001, 0x02, 0x02},
624 	{0xd001, 0x01, 0x00},
625 	{0xd001, 0x20, 0x00},
626 	{0xd002, 0x1f, 0x19},
627 	{0xd003, 0x1f, 0x1a},
628 	{0xd004, 0x1f, 0x19},
629 	{0xd005, 0x1f, 0x1a},
630 	{0xd00e, 0x1f, 0x10},
631 	{0xd00f, 0x07, 0x04},
632 	{0xd00f, 0x38, 0x28},
633 	{0xd010, 0x07, 0x04},
634 	{0xd010, 0x38, 0x28},
635 	{0xd016, 0xf0, 0x30},
636 	{0xd01f, 0x3f, 0x0a},
637 	{0xd020, 0x3f, 0x0a},
638 	{0x9bda, 0xff, 0x00},
639 	{0x9be3, 0xff, 0x00},
640 	{0x9bf6, 0xff, 0x01},
641 	{0x9bf8, 0xff, 0x02},
642 	{0x9bf9, 0xff, 0x02},
643 	{0x9bfc, 0xff, 0x1f},
644 	{0x9bbe, 0x01, 0x01},
645 	{0x9bcc, 0x01, 0x01},
646 	{0x9bb9, 0xff, 0x00},
647 	{0x9bcd, 0xff, 0x24},
648 	{0x9bff, 0xff, 0x24},
649 	{0xd015, 0xff, 0x46},
650 	{0xd016, 0x01, 0x00},
651 	{0xd044, 0xff, 0x46},
652 	{0xd045, 0x01, 0x00},
653 	{0xd008, 0xff, 0x01},
654 	{0xd009, 0x03, 0x02},
655 	{0xd006, 0xff, 0x7b},
656 	{0xd007, 0x03, 0x00},
657 	{0xd00c, 0xff, 0x7c},
658 	{0xd00d, 0x03, 0x02},
659 	{0xd00a, 0xff, 0xfe},
660 	{0xd00b, 0x03, 0x01},
661 	{0x9bc7, 0xff, 0x08},
662 	{0x9bc8, 0xff, 0x9a},
663 	{0x9bc3, 0xff, 0x01},
664 	{0x9bc4, 0xff, 0x02},
665 	{0x9bc5, 0xff, 0x7c},
666 	{0x9bc6, 0xff, 0x02},
667 	{0x9bba, 0xff, 0xfc},
668 	{0x9bc9, 0xff, 0xaa},
669 	{0xd011, 0xff, 0x6b},
670 	{0xd012, 0x03, 0x00},
671 	{0xd013, 0xff, 0x88},
672 	{0xd014, 0x03, 0x02},
673 	{0xd040, 0xff, 0x6b},
674 	{0xd041, 0x03, 0x00},
675 	{0xd042, 0xff, 0x7c},
676 	{0xd043, 0x03, 0x02},
677 	{0xd045, 0x02, 0x00},
678 	{0x9bcf, 0x01, 0x01},
679 	{0xd045, 0x04, 0x04},
680 	{0xd04f, 0xff, 0x9a},
681 	{0xd050, 0x01, 0x01},
682 	{0xd051, 0xff, 0x5a},
683 	{0xd052, 0x01, 0x01},
684 	{0xd053, 0xff, 0x50},
685 	{0xd054, 0xff, 0x46},
686 	{0x9bd7, 0xff, 0x0a},
687 	{0x9bd8, 0xff, 0x14},
688 	{0x9bd9, 0xff, 0x08},
689 	{0x9bd0, 0xff, 0x9e},
690 	{0x9be4, 0xff, 0xff},
691 	{0x9bbd, 0xff, 0x9e},
692 	{0x9be2, 0xff, 0x25},
693 	{0x9bee, 0x01, 0x01},
694 	{0xd73b, 0x08, 0x00},
695 };
696 
697 /*
698  * Unknown, probably for tin can tuner, tuner init
699  * AF9013_TUNER_UNKNOWN       0x8c
700  */
701 static const struct af9013_reg_mask_val tuner_init_tab_unknown[] = {
702 	{0x9bd5, 0xff, 0x01},
703 	{0x9bd6, 0xff, 0x02},
704 	{0xd1a0, 0x02, 0x02},
705 	{0xd000, 0x01, 0x01},
706 	{0xd000, 0x02, 0x00},
707 	{0xd001, 0x02, 0x02},
708 	{0xd001, 0x01, 0x00},
709 	{0xd001, 0x20, 0x00},
710 	{0xd002, 0x1f, 0x19},
711 	{0xd003, 0x1f, 0x1a},
712 	{0xd004, 0x1f, 0x19},
713 	{0xd005, 0x1f, 0x1a},
714 	{0xd00e, 0x1f, 0x10},
715 	{0xd00f, 0x07, 0x04},
716 	{0xd00f, 0x38, 0x28},
717 	{0xd010, 0x07, 0x04},
718 	{0xd010, 0x38, 0x28},
719 	{0xd016, 0xf0, 0x30},
720 	{0xd01f, 0x3f, 0x0a},
721 	{0xd020, 0x3f, 0x0a},
722 	{0x9bda, 0xff, 0x01},
723 	{0x9be3, 0xff, 0x01},
724 	{0xd1a0, 0x02, 0x00},
725 	{0x9bbe, 0x01, 0x01},
726 	{0x9bcc, 0x01, 0x01},
727 	{0x9bb9, 0xff, 0x00},
728 	{0x9bcd, 0xff, 0x18},
729 	{0x9bff, 0xff, 0x2c},
730 	{0xd015, 0xff, 0x46},
731 	{0xd016, 0x01, 0x00},
732 	{0xd044, 0xff, 0x46},
733 	{0xd045, 0x01, 0x00},
734 	{0xd008, 0xff, 0xdf},
735 	{0xd009, 0x03, 0x02},
736 	{0xd006, 0xff, 0x44},
737 	{0xd007, 0x03, 0x01},
738 	{0xd00c, 0xff, 0x00},
739 	{0xd00d, 0x03, 0x02},
740 	{0xd00a, 0xff, 0xf6},
741 	{0xd00b, 0x03, 0x01},
742 	{0x9bba, 0xff, 0xf9},
743 	{0x9bc8, 0xff, 0xaa},
744 	{0x9bc3, 0xff, 0xdf},
745 	{0x9bc4, 0xff, 0x02},
746 	{0x9bc5, 0xff, 0x00},
747 	{0x9bc6, 0xff, 0x02},
748 	{0x9bc9, 0xff, 0xf0},
749 	{0xd011, 0xff, 0x3c},
750 	{0xd012, 0x03, 0x01},
751 	{0xd013, 0xff, 0xf7},
752 	{0xd014, 0x03, 0x02},
753 	{0xd040, 0xff, 0x0b},
754 	{0xd041, 0x03, 0x02},
755 	{0xd042, 0xff, 0x4d},
756 	{0xd043, 0x03, 0x00},
757 	{0xd045, 0x02, 0x00},
758 	{0x9bcf, 0x01, 0x01},
759 	{0xd045, 0x04, 0x04},
760 	{0xd04f, 0xff, 0x9a},
761 	{0xd050, 0x01, 0x01},
762 	{0xd051, 0xff, 0x5a},
763 	{0xd052, 0x01, 0x01},
764 	{0xd053, 0xff, 0x50},
765 	{0xd054, 0xff, 0x46},
766 	{0x9bd7, 0xff, 0x0a},
767 	{0x9bd8, 0xff, 0x14},
768 	{0x9bd9, 0xff, 0x08},
769 };
770 
771 /*
772  * NXP TDA18271 & TDA18218 tuner init
773  * AF9013_TUNER_TDA18271      0x9c
774  * AF9013_TUNER_TDA18218      0xb3
775  */
776 static const struct af9013_reg_mask_val tuner_init_tab_tda18271[] = {
777 	{0x9bd5, 0xff, 0x01},
778 	{0x9bd6, 0xff, 0x04},
779 	{0xd1a0, 0x02, 0x02},
780 	{0xd000, 0x01, 0x01},
781 	{0xd000, 0x02, 0x00},
782 	{0xd001, 0x02, 0x02},
783 	{0xd001, 0x01, 0x00},
784 	{0xd001, 0x20, 0x00},
785 	{0xd002, 0x1f, 0x19},
786 	{0xd003, 0x1f, 0x1a},
787 	{0xd004, 0x1f, 0x19},
788 	{0xd005, 0x1f, 0x1a},
789 	{0xd00e, 0x1f, 0x10},
790 	{0xd00f, 0x07, 0x04},
791 	{0xd00f, 0x38, 0x28},
792 	{0xd010, 0x07, 0x04},
793 	{0xd010, 0x38, 0x28},
794 	{0xd016, 0xf0, 0x30},
795 	{0xd01f, 0x3f, 0x0a},
796 	{0xd020, 0x3f, 0x0a},
797 	{0x9bda, 0xff, 0x01},
798 	{0x9be3, 0xff, 0x01},
799 	{0xd1a0, 0x02, 0x00},
800 	{0x9bbe, 0x01, 0x01},
801 	{0x9bcc, 0x01, 0x01},
802 	{0x9bb9, 0xff, 0x00},
803 	{0x9bcd, 0xff, 0x18},
804 	{0x9bff, 0xff, 0x2c},
805 	{0xd015, 0xff, 0x46},
806 	{0xd016, 0x01, 0x00},
807 	{0xd044, 0xff, 0x46},
808 	{0xd045, 0x01, 0x00},
809 	{0xd008, 0xff, 0xdf},
810 	{0xd009, 0x03, 0x02},
811 	{0xd006, 0xff, 0x44},
812 	{0xd007, 0x03, 0x01},
813 	{0xd00c, 0xff, 0x00},
814 	{0xd00d, 0x03, 0x02},
815 	{0xd00a, 0xff, 0xf6},
816 	{0xd00b, 0x03, 0x01},
817 	{0x9bba, 0xff, 0xf9},
818 	{0x9bc8, 0xff, 0xaa},
819 	{0x9bc3, 0xff, 0xdf},
820 	{0x9bc4, 0xff, 0x02},
821 	{0x9bc5, 0xff, 0x00},
822 	{0x9bc6, 0xff, 0x02},
823 	{0x9bc9, 0xff, 0xf0},
824 	{0xd011, 0xff, 0x3c},
825 	{0xd012, 0x03, 0x01},
826 	{0xd013, 0xff, 0xf7},
827 	{0xd014, 0x03, 0x02},
828 	{0xd040, 0xff, 0x0b},
829 	{0xd041, 0x03, 0x02},
830 	{0xd042, 0xff, 0x4d},
831 	{0xd043, 0x03, 0x00},
832 	{0xd045, 0x02, 0x00},
833 	{0x9bcf, 0x01, 0x01},
834 	{0xd045, 0x04, 0x04},
835 	{0xd04f, 0xff, 0x9a},
836 	{0xd050, 0x01, 0x01},
837 	{0xd051, 0xff, 0x5a},
838 	{0xd052, 0x01, 0x01},
839 	{0xd053, 0xff, 0x50},
840 	{0xd054, 0xff, 0x46},
841 	{0x9bd7, 0xff, 0x0a},
842 	{0x9bd8, 0xff, 0x14},
843 	{0x9bd9, 0xff, 0x08},
844 	{0x9bd0, 0xff, 0xa8},
845 	{0x9be4, 0xff, 0x7f},
846 	{0x9bbd, 0xff, 0xa8},
847 	{0x9be2, 0xff, 0x20},
848 	{0x9bee, 0x01, 0x01},
849 };
850 
851 #endif /* AF9013_PRIV_H */
852