V4L/DVB: Adding support for MT2060 and thus for some DVB-USB-devices based on it
[deliverable/linux.git] / drivers / media / dvb / frontends / dib3000mc_priv.h
CommitLineData
1da177e4
LT
1/*
2 * dib3000mc_priv.h
3 *
4 * Copyright (C) 2004 Patrick Boettcher (patrick.boettcher@desy.de)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation, version 2.
9 *
10 * for more information see dib3000mc.c .
11 */
12
13#ifndef __DIB3000MC_PRIV_H__
14#define __DIB3000MC_PRIV_H__
15
16/*
17 * Demodulator parameters
18 * reg: 0 1 1 1 11 11 111
19 * | | | | | |
20 * | | | | | +-- alpha (000=0, 001=1, 010=2, 100=4)
21 * | | | | +----- constellation (00=QPSK, 01=16QAM, 10=64QAM)
22 * | | | +-------- guard (00=1/32, 01=1/16, 10=1/8, 11=1/4)
23 * | | +----------- transmission mode (0=2k, 1=8k)
24 * | |
25 * | +-------------- restart autosearch for parameters
26 * +---------------- restart the demodulator
27 * reg: 181 1 111 1
28 * | | |
29 * | | +- FEC applies for HP or LP (0=LP, 1=HP)
30 * | +---- FEC rate (001=1/2, 010=2/3, 011=3/4, 101=5/6, 111=7/8)
31 * +------- hierarchy on (0=no, 1=yes)
32 */
33
34/* demodulator tuning parameter and restart options */
35#define DIB3000MC_REG_DEMOD_PARM ( 0)
36#define DIB3000MC_DEMOD_PARM(a,c,g,t) ( \
37 (0x7 & a) | \
38 ((0x3 & c) << 3) | \
39 ((0x3 & g) << 5) | \
40 ((0x1 & t) << 7) )
41#define DIB3000MC_DEMOD_RST_AUTO_SRCH_ON (1 << 8)
42#define DIB3000MC_DEMOD_RST_AUTO_SRCH_OFF (0 << 8)
43#define DIB3000MC_DEMOD_RST_DEMOD_ON (1 << 9)
44#define DIB3000MC_DEMOD_RST_DEMOD_OFF (0 << 9)
45
46/* register for hierarchy parameters */
47#define DIB3000MC_REG_HRCH_PARM ( 181)
48#define DIB3000MC_HRCH_PARM(s,f,h) ( \
49 (0x1 & s) | \
50 ((0x7 & f) << 1) | \
51 ((0x1 & h) << 4) )
52
53/* timeout ??? */
54#define DIB3000MC_REG_UNK_1 ( 1)
55#define DIB3000MC_UNK_1 ( 0x04)
56
57/* timeout ??? */
58#define DIB3000MC_REG_UNK_2 ( 2)
59#define DIB3000MC_UNK_2 ( 0x04)
60
61/* timeout ??? */
62#define DIB3000MC_REG_UNK_3 ( 3)
63#define DIB3000MC_UNK_3 (0x1000)
64
65#define DIB3000MC_REG_UNK_4 ( 4)
66#define DIB3000MC_UNK_4 (0x0814)
67
68/* timeout ??? */
69#define DIB3000MC_REG_SEQ_TPS ( 5)
70#define DIB3000MC_SEQ_TPS_DEFAULT ( 1)
71#define DIB3000MC_SEQ_TPS(s,t) ( \
72 ((s & 0x0f) << 4) | \
73 ((t & 0x01) << 8) )
74#define DIB3000MC_IS_TPS(v) ((v << 8) & 0x1)
75#define DIB3000MC_IS_AS(v) ((v >> 4) & 0xf)
76
77/* parameters for the bandwidth */
78#define DIB3000MC_REG_BW_TIMOUT_MSB ( 6)
79#define DIB3000MC_REG_BW_TIMOUT_LSB ( 7)
80
81static u16 dib3000mc_reg_bandwidth[] = { 6,7,8,9,10,11,16,17 };
82
83/*static u16 dib3000mc_bandwidth_5mhz[] =
84 { 0x28, 0x9380, 0x87, 0x4100, 0x2a4, 0x4500, 0x1, 0xb0d0 };*/
85
86static u16 dib3000mc_bandwidth_6mhz[] =
87 { 0x21, 0xd040, 0x70, 0xb62b, 0x233, 0x8ed5, 0x1, 0xb0d0 };
88
89static u16 dib3000mc_bandwidth_7mhz[] =
90 { 0x1c, 0xfba5, 0x60, 0x9c25, 0x1e3, 0x0cb7, 0x1, 0xb0d0 };
91
92static u16 dib3000mc_bandwidth_8mhz[] =
93 { 0x19, 0x5c30, 0x54, 0x88a0, 0x1a6, 0xab20, 0x1, 0xb0d0 };
94
95static u16 dib3000mc_reg_bandwidth_general[] = { 12,13,14,15 };
96static u16 dib3000mc_bandwidth_general[] = { 0x0000, 0x03e8, 0x0000, 0x03f2 };
97
98/* lock mask */
99#define DIB3000MC_REG_LOCK_MASK ( 15)
100#define DIB3000MC_ACTIVATE_LOCK_MASK (0x0800)
101
102/* reset the uncorrected packet count (??? do it 5 times) */
103#define DIB3000MC_REG_RST_UNC ( 18)
104#define DIB3000MC_RST_UNC_ON ( 1)
105#define DIB3000MC_RST_UNC_OFF ( 0)
106
107#define DIB3000MC_REG_UNK_19 ( 19)
108#define DIB3000MC_UNK_19 ( 0)
109
110/* DDS frequency value (IF position) and inversion bit */
111#define DIB3000MC_REG_INVERSION ( 21)
112#define DIB3000MC_REG_SET_DDS_FREQ_MSB ( 21)
113#define DIB3000MC_DDS_FREQ_MSB_INV_OFF (0x0164)
114#define DIB3000MC_DDS_FREQ_MSB_INV_ON (0x0364)
115
116#define DIB3000MC_REG_SET_DDS_FREQ_LSB ( 22)
117#define DIB3000MC_DDS_FREQ_LSB (0x463d)
118
119/* timing frequencies setting */
120#define DIB3000MC_REG_TIMING_FREQ_MSB ( 23)
121#define DIB3000MC_REG_TIMING_FREQ_LSB ( 24)
122#define DIB3000MC_CLOCK_REF (0x151fd1)
123
124//static u16 dib3000mc_reg_timing_freq[] = { 23,24 };
125
126//static u16 dib3000mc_timing_freq[][2] = {
127// { 0x69, 0x9f18 }, /* 5 MHz */
128// { 0x7e ,0xbee9 }, /* 6 MHz */
129// { 0x93 ,0xdebb }, /* 7 MHz */
130// { 0xa8 ,0xfe8c }, /* 8 MHz */
131//};
132
133/* timeout ??? */
134static u16 dib3000mc_reg_offset[] = { 26,33 };
135
136static u16 dib3000mc_offset[][2] = {
137 { 26240, 5 }, /* default */
138 { 30336, 6 }, /* 8K */
139 { 38528, 8 }, /* 2K */
140};
141
142#define DIB3000MC_REG_ISI ( 29)
143#define DIB3000MC_ISI_DEFAULT (0x1073)
144#define DIB3000MC_ISI_ACTIVATE (0x0000)
145#define DIB3000MC_ISI_INHIBIT (0x0200)
146
147/* impulse noise control */
148static u16 dib3000mc_reg_imp_noise_ctl[] = { 34,35 };
149
150static u16 dib3000mc_imp_noise_ctl[][2] = {
151 { 0x1294, 0x1ff8 }, /* mode 0 */
152 { 0x1294, 0x1ff8 }, /* mode 1 */
153 { 0x1294, 0x1ff8 }, /* mode 2 */
154 { 0x1294, 0x1ff8 }, /* mode 3 */
155 { 0x1294, 0x1ff8 }, /* mode 4 */
156};
157
158/* AGC registers */
159static u16 dib3000mc_reg_agc[] = {
160 36,37,38,39,42,43,44,45,46,47,48,49
161};
a16bf5d5
OD
162/* AGC settings. Don't change the ordering of the entries */
163#define DIB3000MC_AGC_TUNER_COUNT 5
1da177e4
LT
164
165static u16 dib3000mc_agc_tuner[][12] = {
a16bf5d5 166/* 0*/ { 0x0051, 0x301d, 0x0000, 0x1cc7, 0xcf5c, 0x6666,
1da177e4
LT
167 0xbae1, 0xa148, 0x3b5e, 0x3c1c, 0x001a, 0x2019
168 }, /* TUNER_PANASONIC_ENV77H04D5, */
169
a16bf5d5 170/* 1*/ { 0x0051, 0x301d, 0x0000, 0x1cc7, 0xdc29, 0x570a,
1da177e4
LT
171 0xbae1, 0x8ccd, 0x3b6d, 0x551d, 0x000a, 0x951e
172 }, /* TUNER_PANASONIC_ENV57H13D5, TUNER_PANASONIC_ENV57H12D5 */
173
a16bf5d5 174/* 2*/ { 0x0051, 0x301d, 0x0000, 0x1cc7, 0xffff, 0xffff,
1da177e4
LT
175 0xffff, 0x0000, 0xfdfd, 0x4040, 0x00fd, 0x4040
176 }, /* TUNER_SAMSUNG_DTOS333IH102, TUNER_RFAGCIN_UNKNOWN */
177
a16bf5d5 178/* 3*/ { 0x0196, 0x301d, 0x0000, 0x1cc7, 0xbd71, 0x5c29,
1da177e4
LT
179 0xb5c3, 0x6148, 0x6569, 0x5127, 0x0033, 0x3537
180 }, /* TUNER_PROVIDER_X */
a16bf5d5
OD
181
182/* 4*/ { 0x0196, 0x301d, 0x0000, 0x1cc7, 0xffff, 0x5c29,
183 0xa8f6, 0x5eb8, 0x65ff, 0x40ff, 0x008a, 0x1114
184 }, /* TUNER_MT2060 ( as in DibCom driver )*/
185
186/* { 0x0196, 0x301d, 0x0000, 0x1cc7, 0xbd71, 0x5c29,
187 0xb5c3, 0x6148, 0x0045, 0x5127, 0x0033, 0x3437
188 },*//* TUNER_MT2060 ( as in LITE-ON driver )*/
189
1da177e4
LT
190 /* TODO TUNER_PANASONIC_ENV57H10D8, TUNER_PANASONIC_ENV57H11D8 */
191};
192
193/* AGC loop bandwidth */
194static u16 dib3000mc_reg_agc_bandwidth[] = { 40,41 };
195static u16 dib3000mc_agc_bandwidth[] = { 0x119,0x330 };
196
197static u16 dib3000mc_reg_agc_bandwidth_general[] = { 50,51,52,53,54 };
198static u16 dib3000mc_agc_bandwidth_general[] =
199 { 0x8000, 0x91ca, 0x01ba, 0x0087, 0x0087 };
200
201#define DIB3000MC_REG_IMP_NOISE_55 ( 55)
202#define DIB3000MC_IMP_NEW_ALGO(w) (w | (1<<10))
203
204/* Impulse noise params */
205static u16 dib3000mc_reg_impulse_noise[] = { 55,56,57 };
206static u16 dib3000mc_impluse_noise[][3] = {
207 { 0x489, 0x89, 0x72 }, /* 5 MHz */
208 { 0x4a5, 0xa5, 0x89 }, /* 6 MHz */
209 { 0x4c0, 0xc0, 0xa0 }, /* 7 MHz */
210 { 0x4db, 0xdb, 0xb7 }, /* 8 Mhz */
211};
212
213static u16 dib3000mc_reg_fft[] = {
214 58,59,60,61,62,63,64,65,66,67,68,69,
215 70,71,72,73,74,75,76,77,78,79,80,81,
216 82,83,84,85,86
217};
218
219static u16 dib3000mc_fft_modes[][29] = {
220 { 0x38, 0x6d9, 0x3f28, 0x7a7, 0x3a74, 0x196, 0x32a, 0x48c,
221 0x3ffe, 0x7f3, 0x2d94, 0x76, 0x53d,
222 0x3ff8, 0x7e3, 0x3320, 0x76, 0x5b3,
223 0x3feb, 0x7d2, 0x365e, 0x76, 0x48c,
224 0x3ffe, 0x5b3, 0x3feb, 0x76, 0x0, 0xd
225 }, /* fft mode 0 */
226 { 0x3b, 0x6d9, 0x3f28, 0x7a7, 0x3a74, 0x196, 0x32a, 0x48c,
227 0x3ffe, 0x7f3, 0x2d94, 0x76, 0x53d,
228 0x3ff8, 0x7e3, 0x3320, 0x76, 0x5b3,
229 0x3feb, 0x7d2, 0x365e, 0x76, 0x48c,
230 0x3ffe, 0x5b3, 0x3feb, 0x0, 0x8200, 0xd
231 }, /* fft mode 1 */
232};
233
234#define DIB3000MC_REG_UNK_88 ( 88)
235#define DIB3000MC_UNK_88 (0x0410)
236
237static u16 dib3000mc_reg_bw[] = { 93,94,95,96,97,98 };
238static u16 dib3000mc_bw[][6] = {
239 { 0,0,0,0,0,0 }, /* 5 MHz */
240 { 0,0,0,0,0,0 }, /* 6 MHz */
241 { 0,0,0,0,0,0 }, /* 7 MHz */
242 { 0x20, 0x21, 0x20, 0x23, 0x20, 0x27 }, /* 8 MHz */
243};
244
245
246/* phase noise control */
247#define DIB3000MC_REG_UNK_99 ( 99)
248#define DIB3000MC_UNK_99 (0x0220)
249
250#define DIB3000MC_REG_SCAN_BOOST ( 100)
251#define DIB3000MC_SCAN_BOOST_ON ((11 << 6) + 6)
252#define DIB3000MC_SCAN_BOOST_OFF ((16 << 6) + 9)
253
254/* timeout ??? */
255#define DIB3000MC_REG_UNK_110 ( 110)
256#define DIB3000MC_UNK_110 ( 3277)
257
258#define DIB3000MC_REG_UNK_111 ( 111)
259#define DIB3000MC_UNK_111_PH_N_MODE_0 ( 0)
260#define DIB3000MC_UNK_111_PH_N_MODE_1 (1 << 1)
261
262/* superious rm config */
263#define DIB3000MC_REG_UNK_120 ( 120)
264#define DIB3000MC_UNK_120 ( 8207)
265
266#define DIB3000MC_REG_UNK_133 ( 133)
267#define DIB3000MC_UNK_133 ( 15564)
268
269#define DIB3000MC_REG_UNK_134 ( 134)
270#define DIB3000MC_UNK_134 ( 0)
271
272/* adapter config for constellation */
273static u16 dib3000mc_reg_adp_cfg[] = { 129, 130, 131, 132 };
274
275static u16 dib3000mc_adp_cfg[][4] = {
276 { 0x99a, 0x7fae, 0x333, 0x7ff0 }, /* QPSK */
277 { 0x23d, 0x7fdf, 0x0a4, 0x7ff0 }, /* 16-QAM */
278 { 0x148, 0x7ff0, 0x0a4, 0x7ff8 }, /* 64-QAM */
279};
280
281static u16 dib3000mc_reg_mobile_mode[] = { 139, 140, 141, 175, 1032 };
282
283static u16 dib3000mc_mobile_mode[][5] = {
284 { 0x01, 0x0, 0x0, 0x00, 0x12c }, /* fixed */
285 { 0x01, 0x0, 0x0, 0x00, 0x12c }, /* portable */
286 { 0x00, 0x0, 0x0, 0x02, 0x000 }, /* mobile */
287 { 0x00, 0x0, 0x0, 0x02, 0x000 }, /* auto */
288};
289
290#define DIB3000MC_REG_DIVERSITY1 ( 177)
291#define DIB3000MC_DIVERSITY1_DEFAULT ( 1)
292
293#define DIB3000MC_REG_DIVERSITY2 ( 178)
294#define DIB3000MC_DIVERSITY2_DEFAULT ( 1)
295
296#define DIB3000MC_REG_DIVERSITY3 ( 180)
297#define DIB3000MC_DIVERSITY3_IN_OFF (0xfff0)
298#define DIB3000MC_DIVERSITY3_IN_ON (0xfff6)
299
300#define DIB3000MC_REG_FEC_CFG ( 195)
301#define DIB3000MC_FEC_CFG ( 0x10)
302
303/*
304 * reg 206, output mode
305 * 1111 1111
306 * |||| ||||
307 * |||| |||+- unk
308 * |||| ||+-- unk
309 * |||| |+--- unk (on by default)
310 * |||| +---- fifo_ctrl (1 = inhibit (flushed), 0 = active (unflushed))
311 * |||+------ pid_parse (1 = enabled, 0 = disabled)
312 * ||+------- outp_188 (1 = TS packet size 188, 0 = packet size 204)
313 * |+-------- unk
314 * +--------- unk
315 */
316
317#define DIB3000MC_REG_SMO_MODE ( 206)
318#define DIB3000MC_SMO_MODE_DEFAULT (1 << 2)
319#define DIB3000MC_SMO_MODE_FIFO_FLUSH (1 << 3)
320#define DIB3000MC_SMO_MODE_FIFO_UNFLUSH (0xfff7)
321#define DIB3000MC_SMO_MODE_PID_PARSE (1 << 4)
322#define DIB3000MC_SMO_MODE_NO_PID_PARSE (0xffef)
323#define DIB3000MC_SMO_MODE_188 (1 << 5)
324#define DIB3000MC_SMO_MODE_SLAVE (DIB3000MC_SMO_MODE_DEFAULT | \
325 DIB3000MC_SMO_MODE_188 | DIB3000MC_SMO_MODE_PID_PARSE | (1<<1))
326
327#define DIB3000MC_REG_FIFO_THRESHOLD ( 207)
328#define DIB3000MC_FIFO_THRESHOLD_DEFAULT ( 1792)
329#define DIB3000MC_FIFO_THRESHOLD_SLAVE ( 512)
330/*
331 * pidfilter
332 * it is not a hardware pidfilter but a filter which drops all pids
333 * except the ones set. When connected to USB1.1 bandwidth this is important.
334 * DiB3000P/M-C can filter up to 32 PIDs
335 */
336#define DIB3000MC_REG_FIRST_PID ( 212)
337#define DIB3000MC_NUM_PIDS ( 32)
338
339#define DIB3000MC_REG_OUTMODE ( 244)
340#define DIB3000MC_OM_PARALLEL_GATED_CLK ( 0)
341#define DIB3000MC_OM_PAR_CONT_CLK (1 << 11)
342#define DIB3000MC_OM_SERIAL (2 << 11)
343#define DIB3000MC_OM_DIVOUT_ON (4 << 11)
344#define DIB3000MC_OM_SLAVE (DIB3000MC_OM_DIVOUT_ON | DIB3000MC_OM_PAR_CONT_CLK)
345
346#define DIB3000MC_REG_RF_POWER ( 392)
347
348#define DIB3000MC_REG_FFT_POSITION ( 407)
349
350#define DIB3000MC_REG_DDS_FREQ_MSB ( 414)
351#define DIB3000MC_REG_DDS_FREQ_LSB ( 415)
352
353#define DIB3000MC_REG_TIMING_OFFS_MSB ( 416)
354#define DIB3000MC_REG_TIMING_OFFS_LSB ( 417)
355
356#define DIB3000MC_REG_TUNING_PARM ( 458)
357#define DIB3000MC_TP_QAM(v) ((v >> 13) & 0x03)
358#define DIB3000MC_TP_HRCH(v) ((v >> 12) & 0x01)
359#define DIB3000MC_TP_ALPHA(v) ((v >> 9) & 0x07)
360#define DIB3000MC_TP_FFT(v) ((v >> 8) & 0x01)
361#define DIB3000MC_TP_FEC_CR_HP(v) ((v >> 5) & 0x07)
362#define DIB3000MC_TP_FEC_CR_LP(v) ((v >> 2) & 0x07)
363#define DIB3000MC_TP_GUARD(v) (v & 0x03)
364
365#define DIB3000MC_REG_SIGNAL_NOISE_MSB ( 483)
366#define DIB3000MC_REG_SIGNAL_NOISE_LSB ( 484)
367
368#define DIB3000MC_REG_MER ( 485)
369
370#define DIB3000MC_REG_BER_MSB ( 500)
371#define DIB3000MC_REG_BER_LSB ( 501)
372
373#define DIB3000MC_REG_PACKET_ERRORS ( 503)
374
375#define DIB3000MC_REG_PACKET_ERROR_COUNT ( 506)
376
377#define DIB3000MC_REG_LOCK_507 ( 507)
378#define DIB3000MC_LOCK_507 (0x0002) // ? name correct ?
379
380#define DIB3000MC_REG_LOCKING ( 509)
381#define DIB3000MC_AGC_LOCK(v) (v & 0x8000)
382#define DIB3000MC_CARRIER_LOCK(v) (v & 0x2000)
383#define DIB3000MC_MPEG_SYNC_LOCK(v) (v & 0x0080)
384#define DIB3000MC_MPEG_DATA_LOCK(v) (v & 0x0040)
385#define DIB3000MC_TPS_LOCK(v) (v & 0x0004)
386
387#define DIB3000MC_REG_AS_IRQ ( 511)
388#define DIB3000MC_AS_IRQ_SUCCESS (1 << 1)
389#define DIB3000MC_AS_IRQ_FAIL ( 1)
390
391#define DIB3000MC_REG_TUNER ( 769)
392
393#define DIB3000MC_REG_RST_I2C_ADDR ( 1024)
394#define DIB3000MC_DEMOD_ADDR_ON ( 1)
395#define DIB3000MC_DEMOD_ADDR(a) ((a << 4) & 0x03F0)
396
397#define DIB3000MC_REG_RESTART ( 1027)
398#define DIB3000MC_RESTART_OFF (0x0000)
399#define DIB3000MC_RESTART_AGC (0x0800)
400#define DIB3000MC_RESTART_CONFIG (0x8000)
401
402#define DIB3000MC_REG_RESTART_VIT ( 1028)
403#define DIB3000MC_RESTART_VIT_OFF ( 0)
404#define DIB3000MC_RESTART_VIT_ON ( 1)
405
406#define DIB3000MC_REG_CLK_CFG_1 ( 1031)
407#define DIB3000MC_CLK_CFG_1_POWER_UP ( 0)
408#define DIB3000MC_CLK_CFG_1_POWER_DOWN (0xffff)
409
410#define DIB3000MC_REG_CLK_CFG_2 ( 1032)
411#define DIB3000MC_CLK_CFG_2_PUP_FIXED (0x012c)
412#define DIB3000MC_CLK_CFG_2_PUP_PORT (0x0104)
413#define DIB3000MC_CLK_CFG_2_PUP_MOBILE (0x0000)
414#define DIB3000MC_CLK_CFG_2_POWER_DOWN (0xffff)
415
416#define DIB3000MC_REG_CLK_CFG_3 ( 1033)
417#define DIB3000MC_CLK_CFG_3_POWER_UP ( 0)
418#define DIB3000MC_CLK_CFG_3_POWER_DOWN (0xfff5)
419
420#define DIB3000MC_REG_CLK_CFG_7 ( 1037)
421#define DIB3000MC_CLK_CFG_7_INIT ( 12592)
422#define DIB3000MC_CLK_CFG_7_POWER_UP (~0x0003)
423#define DIB3000MC_CLK_CFG_7_PWR_DOWN (0x0003)
424#define DIB3000MC_CLK_CFG_7_DIV_IN_OFF (1 << 8)
425
426/* was commented out ??? */
427#define DIB3000MC_REG_CLK_CFG_8 ( 1038)
428#define DIB3000MC_CLK_CFG_8_POWER_UP (0x160c)
429
430#define DIB3000MC_REG_CLK_CFG_9 ( 1039)
431#define DIB3000MC_CLK_CFG_9_POWER_UP ( 0)
432
433/* also clock ??? */
434#define DIB3000MC_REG_ELEC_OUT ( 1040)
435#define DIB3000MC_ELEC_OUT_HIGH_Z ( 0)
436#define DIB3000MC_ELEC_OUT_DIV_OUT_ON ( 1)
437#define DIB3000MC_ELEC_OUT_SLAVE ( 3)
438
439#endif
This page took 0.285879 seconds and 5 git commands to generate.