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