Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/livepatchin...
[linux-2.6-block.git] / drivers / media / dvb-frontends / rtl2832_priv.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Realtek RTL2832 DVB-T demodulator driver
4  *
5  * Copyright (C) 2012 Thomas Mair <thomas.mair86@gmail.com>
6  * Copyright (C) 2012-2014 Antti Palosaari <crope@iki.fi>
7  */
8
9 #ifndef RTL2832_PRIV_H
10 #define RTL2832_PRIV_H
11
12 #include <linux/regmap.h>
13 #include <linux/math64.h>
14 #include <linux/bitops.h>
15
16 #include <media/dvb_frontend.h>
17 #include <media/dvb_math.h>
18 #include "rtl2832.h"
19
20 struct rtl2832_dev {
21         struct rtl2832_platform_data *pdata;
22         struct i2c_client *client;
23         struct regmap_config regmap_config;
24         struct regmap *regmap;
25         struct i2c_mux_core *muxc;
26         struct dvb_frontend fe;
27         enum fe_status fe_status;
28         u64 post_bit_error_prev; /* for old DVBv3 read_ber() calculation */
29         u64 post_bit_error;
30         u64 post_bit_count;
31         bool sleeping;
32         struct delayed_work i2c_gate_work;
33         unsigned long filters; /* PID filter */
34         bool slave_ts;
35 };
36
37 struct rtl2832_reg_entry {
38         u16 start_address;
39         u8 msb;
40         u8 lsb;
41 };
42
43 struct rtl2832_reg_value {
44         int reg;
45         u32 value;
46 };
47
48 /* Demod register bit names */
49 enum DVBT_REG_BIT_NAME {
50         DVBT_SOFT_RST,
51         DVBT_IIC_REPEAT,
52         DVBT_TR_WAIT_MIN_8K,
53         DVBT_RSD_BER_FAIL_VAL,
54         DVBT_EN_BK_TRK,
55         DVBT_REG_PI,
56         DVBT_REG_PFREQ_1_0,
57         DVBT_PD_DA8,
58         DVBT_LOCK_TH,
59         DVBT_BER_PASS_SCAL,
60         DVBT_CE_FFSM_BYPASS,
61         DVBT_ALPHAIIR_N,
62         DVBT_ALPHAIIR_DIF,
63         DVBT_EN_TRK_SPAN,
64         DVBT_LOCK_TH_LEN,
65         DVBT_CCI_THRE,
66         DVBT_CCI_MON_SCAL,
67         DVBT_CCI_M0,
68         DVBT_CCI_M1,
69         DVBT_CCI_M2,
70         DVBT_CCI_M3,
71         DVBT_SPEC_INIT_0,
72         DVBT_SPEC_INIT_1,
73         DVBT_SPEC_INIT_2,
74         DVBT_AD_EN_REG,
75         DVBT_AD_EN_REG1,
76         DVBT_EN_BBIN,
77         DVBT_MGD_THD0,
78         DVBT_MGD_THD1,
79         DVBT_MGD_THD2,
80         DVBT_MGD_THD3,
81         DVBT_MGD_THD4,
82         DVBT_MGD_THD5,
83         DVBT_MGD_THD6,
84         DVBT_MGD_THD7,
85         DVBT_EN_CACQ_NOTCH,
86         DVBT_AD_AV_REF,
87         DVBT_PIP_ON,
88         DVBT_SCALE1_B92,
89         DVBT_SCALE1_B93,
90         DVBT_SCALE1_BA7,
91         DVBT_SCALE1_BA9,
92         DVBT_SCALE1_BAA,
93         DVBT_SCALE1_BAB,
94         DVBT_SCALE1_BAC,
95         DVBT_SCALE1_BB0,
96         DVBT_SCALE1_BB1,
97         DVBT_KB_P1,
98         DVBT_KB_P2,
99         DVBT_KB_P3,
100         DVBT_OPT_ADC_IQ,
101         DVBT_AD_AVI,
102         DVBT_AD_AVQ,
103         DVBT_K1_CR_STEP12,
104         DVBT_TRK_KS_P2,
105         DVBT_TRK_KS_I2,
106         DVBT_TR_THD_SET2,
107         DVBT_TRK_KC_P2,
108         DVBT_TRK_KC_I2,
109         DVBT_CR_THD_SET2,
110         DVBT_PSET_IFFREQ,
111         DVBT_SPEC_INV,
112         DVBT_BW_INDEX,
113         DVBT_RSAMP_RATIO,
114         DVBT_CFREQ_OFF_RATIO,
115         DVBT_FSM_STAGE,
116         DVBT_RX_CONSTEL,
117         DVBT_RX_HIER,
118         DVBT_RX_C_RATE_LP,
119         DVBT_RX_C_RATE_HP,
120         DVBT_GI_IDX,
121         DVBT_FFT_MODE_IDX,
122         DVBT_RSD_BER_EST,
123         DVBT_CE_EST_EVM,
124         DVBT_RF_AGC_VAL,
125         DVBT_IF_AGC_VAL,
126         DVBT_DAGC_VAL,
127         DVBT_SFREQ_OFF,
128         DVBT_CFREQ_OFF,
129         DVBT_POLAR_RF_AGC,
130         DVBT_POLAR_IF_AGC,
131         DVBT_AAGC_HOLD,
132         DVBT_EN_RF_AGC,
133         DVBT_EN_IF_AGC,
134         DVBT_IF_AGC_MIN,
135         DVBT_IF_AGC_MAX,
136         DVBT_RF_AGC_MIN,
137         DVBT_RF_AGC_MAX,
138         DVBT_IF_AGC_MAN,
139         DVBT_IF_AGC_MAN_VAL,
140         DVBT_RF_AGC_MAN,
141         DVBT_RF_AGC_MAN_VAL,
142         DVBT_DAGC_TRG_VAL,
143         DVBT_AGC_TARG_VAL,
144         DVBT_LOOP_GAIN_3_0,
145         DVBT_LOOP_GAIN_4,
146         DVBT_VTOP,
147         DVBT_KRF,
148         DVBT_AGC_TARG_VAL_0,
149         DVBT_AGC_TARG_VAL_8_1,
150         DVBT_AAGC_LOOP_GAIN,
151         DVBT_LOOP_GAIN2_3_0,
152         DVBT_LOOP_GAIN2_4,
153         DVBT_LOOP_GAIN3,
154         DVBT_VTOP1,
155         DVBT_VTOP2,
156         DVBT_VTOP3,
157         DVBT_KRF1,
158         DVBT_KRF2,
159         DVBT_KRF3,
160         DVBT_KRF4,
161         DVBT_EN_GI_PGA,
162         DVBT_THD_LOCK_UP,
163         DVBT_THD_LOCK_DW,
164         DVBT_THD_UP1,
165         DVBT_THD_DW1,
166         DVBT_INTER_CNT_LEN,
167         DVBT_GI_PGA_STATE,
168         DVBT_EN_AGC_PGA,
169         DVBT_CKOUTPAR,
170         DVBT_CKOUT_PWR,
171         DVBT_SYNC_DUR,
172         DVBT_ERR_DUR,
173         DVBT_SYNC_LVL,
174         DVBT_ERR_LVL,
175         DVBT_VAL_LVL,
176         DVBT_SERIAL,
177         DVBT_SER_LSB,
178         DVBT_CDIV_PH0,
179         DVBT_CDIV_PH1,
180         DVBT_MPEG_IO_OPT_2_2,
181         DVBT_MPEG_IO_OPT_1_0,
182         DVBT_CKOUTPAR_PIP,
183         DVBT_CKOUT_PWR_PIP,
184         DVBT_SYNC_LVL_PIP,
185         DVBT_ERR_LVL_PIP,
186         DVBT_VAL_LVL_PIP,
187         DVBT_CKOUTPAR_PID,
188         DVBT_CKOUT_PWR_PID,
189         DVBT_SYNC_LVL_PID,
190         DVBT_ERR_LVL_PID,
191         DVBT_VAL_LVL_PID,
192         DVBT_SM_PASS,
193         DVBT_UPDATE_REG_2,
194         DVBT_BTHD_P3,
195         DVBT_BTHD_D3,
196         DVBT_FUNC4_REG0,
197         DVBT_FUNC4_REG1,
198         DVBT_FUNC4_REG2,
199         DVBT_FUNC4_REG3,
200         DVBT_FUNC4_REG4,
201         DVBT_FUNC4_REG5,
202         DVBT_FUNC4_REG6,
203         DVBT_FUNC4_REG7,
204         DVBT_FUNC4_REG8,
205         DVBT_FUNC4_REG9,
206         DVBT_FUNC4_REG10,
207         DVBT_FUNC5_REG0,
208         DVBT_FUNC5_REG1,
209         DVBT_FUNC5_REG2,
210         DVBT_FUNC5_REG3,
211         DVBT_FUNC5_REG4,
212         DVBT_FUNC5_REG5,
213         DVBT_FUNC5_REG6,
214         DVBT_FUNC5_REG7,
215         DVBT_FUNC5_REG8,
216         DVBT_FUNC5_REG9,
217         DVBT_FUNC5_REG10,
218         DVBT_FUNC5_REG11,
219         DVBT_FUNC5_REG12,
220         DVBT_FUNC5_REG13,
221         DVBT_FUNC5_REG14,
222         DVBT_FUNC5_REG15,
223         DVBT_FUNC5_REG16,
224         DVBT_FUNC5_REG17,
225         DVBT_FUNC5_REG18,
226         DVBT_AD7_SETTING,
227         DVBT_RSSI_R,
228         DVBT_ACI_DET_IND,
229         DVBT_REG_MON,
230         DVBT_REG_MONSEL,
231         DVBT_REG_GPE,
232         DVBT_REG_GPO,
233         DVBT_REG_4MSEL,
234         DVBT_TEST_REG_1,
235         DVBT_TEST_REG_2,
236         DVBT_TEST_REG_3,
237         DVBT_TEST_REG_4,
238         DVBT_REG_BIT_NAME_ITEM_TERMINATOR,
239 };
240
241 static const struct rtl2832_reg_value rtl2832_tuner_init_fc2580[] = {
242         {DVBT_DAGC_TRG_VAL,             0x39},
243         {DVBT_AGC_TARG_VAL_0,            0x0},
244         {DVBT_AGC_TARG_VAL_8_1,         0x5a},
245         {DVBT_AAGC_LOOP_GAIN,           0x16},
246         {DVBT_LOOP_GAIN2_3_0,            0x6},
247         {DVBT_LOOP_GAIN2_4,              0x1},
248         {DVBT_LOOP_GAIN3,               0x16},
249         {DVBT_VTOP1,                    0x35},
250         {DVBT_VTOP2,                    0x21},
251         {DVBT_VTOP3,                    0x21},
252         {DVBT_KRF1,                      0x0},
253         {DVBT_KRF2,                     0x40},
254         {DVBT_KRF3,                     0x10},
255         {DVBT_KRF4,                     0x10},
256         {DVBT_IF_AGC_MIN,               0x80},
257         {DVBT_IF_AGC_MAX,               0x7f},
258         {DVBT_RF_AGC_MIN,               0x9c},
259         {DVBT_RF_AGC_MAX,               0x7f},
260         {DVBT_POLAR_RF_AGC,              0x0},
261         {DVBT_POLAR_IF_AGC,              0x0},
262         {DVBT_AD7_SETTING,            0xe9f4},
263 };
264
265 static const struct rtl2832_reg_value rtl2832_tuner_init_tua9001[] = {
266         {DVBT_DAGC_TRG_VAL,             0x39},
267         {DVBT_AGC_TARG_VAL_0,            0x0},
268         {DVBT_AGC_TARG_VAL_8_1,         0x5a},
269         {DVBT_AAGC_LOOP_GAIN,           0x16},
270         {DVBT_LOOP_GAIN2_3_0,            0x6},
271         {DVBT_LOOP_GAIN2_4,              0x1},
272         {DVBT_LOOP_GAIN3,               0x16},
273         {DVBT_VTOP1,                    0x35},
274         {DVBT_VTOP2,                    0x21},
275         {DVBT_VTOP3,                    0x21},
276         {DVBT_KRF1,                      0x0},
277         {DVBT_KRF2,                     0x40},
278         {DVBT_KRF3,                     0x10},
279         {DVBT_KRF4,                     0x10},
280         {DVBT_IF_AGC_MIN,               0x80},
281         {DVBT_IF_AGC_MAX,               0x7f},
282         {DVBT_RF_AGC_MIN,               0x9c},
283         {DVBT_RF_AGC_MAX,               0x7f},
284         {DVBT_POLAR_RF_AGC,              0x0},
285         {DVBT_POLAR_IF_AGC,              0x0},
286         {DVBT_AD7_SETTING,            0xe9f4},
287         {DVBT_OPT_ADC_IQ,                0x1},
288         {DVBT_AD_AVI,                    0x0},
289         {DVBT_AD_AVQ,                    0x0},
290         {DVBT_SPEC_INV,                  0x0},
291 };
292
293 static const struct rtl2832_reg_value rtl2832_tuner_init_fc0012[] = {
294         {DVBT_DAGC_TRG_VAL,             0x5a},
295         {DVBT_AGC_TARG_VAL_0,            0x0},
296         {DVBT_AGC_TARG_VAL_8_1,         0x5a},
297         {DVBT_AAGC_LOOP_GAIN,           0x16},
298         {DVBT_LOOP_GAIN2_3_0,            0x6},
299         {DVBT_LOOP_GAIN2_4,              0x1},
300         {DVBT_LOOP_GAIN3,               0x16},
301         {DVBT_VTOP1,                    0x35},
302         {DVBT_VTOP2,                    0x21},
303         {DVBT_VTOP3,                    0x21},
304         {DVBT_KRF1,                      0x0},
305         {DVBT_KRF2,                     0x40},
306         {DVBT_KRF3,                     0x10},
307         {DVBT_KRF4,                     0x10},
308         {DVBT_IF_AGC_MIN,               0x80},
309         {DVBT_IF_AGC_MAX,               0x7f},
310         {DVBT_RF_AGC_MIN,               0x80},
311         {DVBT_RF_AGC_MAX,               0x7f},
312         {DVBT_POLAR_RF_AGC,              0x0},
313         {DVBT_POLAR_IF_AGC,              0x0},
314         {DVBT_AD7_SETTING,            0xe9bf},
315         {DVBT_EN_GI_PGA,                 0x0},
316         {DVBT_THD_LOCK_UP,               0x0},
317         {DVBT_THD_LOCK_DW,               0x0},
318         {DVBT_THD_UP1,                  0x11},
319         {DVBT_THD_DW1,                  0xef},
320         {DVBT_INTER_CNT_LEN,             0xc},
321         {DVBT_GI_PGA_STATE,              0x0},
322         {DVBT_EN_AGC_PGA,                0x1},
323         {DVBT_IF_AGC_MAN,                0x0},
324         {DVBT_SPEC_INV,                  0x0},
325 };
326
327 static const struct rtl2832_reg_value rtl2832_tuner_init_e4000[] = {
328         {DVBT_DAGC_TRG_VAL,             0x5a},
329         {DVBT_AGC_TARG_VAL_0,            0x0},
330         {DVBT_AGC_TARG_VAL_8_1,         0x5a},
331         {DVBT_AAGC_LOOP_GAIN,           0x18},
332         {DVBT_LOOP_GAIN2_3_0,            0x8},
333         {DVBT_LOOP_GAIN2_4,              0x1},
334         {DVBT_LOOP_GAIN3,               0x18},
335         {DVBT_VTOP1,                    0x35},
336         {DVBT_VTOP2,                    0x21},
337         {DVBT_VTOP3,                    0x21},
338         {DVBT_KRF1,                      0x0},
339         {DVBT_KRF2,                     0x40},
340         {DVBT_KRF3,                     0x10},
341         {DVBT_KRF4,                     0x10},
342         {DVBT_IF_AGC_MIN,               0x80},
343         {DVBT_IF_AGC_MAX,               0x7f},
344         {DVBT_RF_AGC_MIN,               0x80},
345         {DVBT_RF_AGC_MAX,               0x7f},
346         {DVBT_POLAR_RF_AGC,              0x0},
347         {DVBT_POLAR_IF_AGC,              0x0},
348         {DVBT_AD7_SETTING,            0xe9d4},
349         {DVBT_EN_GI_PGA,                 0x0},
350         {DVBT_THD_LOCK_UP,               0x0},
351         {DVBT_THD_LOCK_DW,               0x0},
352         {DVBT_THD_UP1,                  0x14},
353         {DVBT_THD_DW1,                  0xec},
354         {DVBT_INTER_CNT_LEN,             0xc},
355         {DVBT_GI_PGA_STATE,              0x0},
356         {DVBT_EN_AGC_PGA,                0x1},
357         {DVBT_REG_GPE,                   0x1},
358         {DVBT_REG_GPO,                   0x1},
359         {DVBT_REG_MONSEL,                0x1},
360         {DVBT_REG_MON,                   0x1},
361         {DVBT_REG_4MSEL,                 0x0},
362         {DVBT_SPEC_INV,                  0x0},
363 };
364
365 static const struct rtl2832_reg_value rtl2832_tuner_init_r820t[] = {
366         {DVBT_DAGC_TRG_VAL,             0x39},
367         {DVBT_AGC_TARG_VAL_0,            0x0},
368         {DVBT_AGC_TARG_VAL_8_1,         0x40},
369         {DVBT_AAGC_LOOP_GAIN,           0x16},
370         {DVBT_LOOP_GAIN2_3_0,            0x8},
371         {DVBT_LOOP_GAIN2_4,              0x1},
372         {DVBT_LOOP_GAIN3,               0x18},
373         {DVBT_VTOP1,                    0x35},
374         {DVBT_VTOP2,                    0x21},
375         {DVBT_VTOP3,                    0x21},
376         {DVBT_KRF1,                      0x0},
377         {DVBT_KRF2,                     0x40},
378         {DVBT_KRF3,                     0x10},
379         {DVBT_KRF4,                     0x10},
380         {DVBT_IF_AGC_MIN,               0x80},
381         {DVBT_IF_AGC_MAX,               0x7f},
382         {DVBT_RF_AGC_MIN,               0x80},
383         {DVBT_RF_AGC_MAX,               0x7f},
384         {DVBT_POLAR_RF_AGC,              0x0},
385         {DVBT_POLAR_IF_AGC,              0x0},
386         {DVBT_AD7_SETTING,            0xe9f4},
387         {DVBT_SPEC_INV,                  0x1},
388 };
389
390 static const struct rtl2832_reg_value rtl2832_tuner_init_si2157[] = {
391         {DVBT_DAGC_TRG_VAL,             0x39},
392         {DVBT_AGC_TARG_VAL_0,            0x0},
393         {DVBT_AGC_TARG_VAL_8_1,         0x40},
394         {DVBT_AAGC_LOOP_GAIN,           0x16},
395         {DVBT_LOOP_GAIN2_3_0,            0x8},
396         {DVBT_LOOP_GAIN2_4,              0x1},
397         {DVBT_LOOP_GAIN3,               0x18},
398         {DVBT_VTOP1,                    0x35},
399         {DVBT_VTOP2,                    0x21},
400         {DVBT_VTOP3,                    0x21},
401         {DVBT_KRF1,                      0x0},
402         {DVBT_KRF2,                     0x40},
403         {DVBT_KRF3,                     0x10},
404         {DVBT_KRF4,                     0x10},
405         {DVBT_IF_AGC_MIN,               0x80},
406         {DVBT_IF_AGC_MAX,               0x7f},
407         {DVBT_RF_AGC_MIN,               0x80},
408         {DVBT_RF_AGC_MAX,               0x7f},
409         {DVBT_POLAR_RF_AGC,              0x0},
410         {DVBT_POLAR_IF_AGC,              0x0},
411         {DVBT_AD7_SETTING,            0xe9f4},
412         {DVBT_SPEC_INV,                  0x0},
413 };
414
415 #endif /* RTL2832_PRIV_H */