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