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
24struct af9013_reg_mask_val {
25 u16 reg;
26 u8 mask;
27 u8 val;
28};
29
30struct af9013_coeff {
31 u32 clock;
32 u32 bandwidth_hz;
33 u8 val[24];
34};
35
36/* pre-calculated coeff lookup table */
37static 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 */
83static 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 */
167static 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 */
235static 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 */
314static 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 */
383static 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 */
457static 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 */
538static 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 */
617static 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 */
701static 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 */
776static 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

source code of linux/drivers/media/dvb-frontends/af9013_priv.h