2 * Realtek RTL2832 DVB-T demodulator driver
4 * Copyright (C) 2012 Thomas Mair <thomas.mair86@gmail.com>
5 * Copyright (C) 2012-2014 Antti Palosaari <crope@iki.fi>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 #ifndef RTL2832_PRIV_H
23 #define RTL2832_PRIV_H
25 #include <linux/regmap.h>
26 #include <linux/math64.h>
27 #include <linux/bitops.h>
29 #include "dvb_frontend.h"
34 struct rtl2832_platform_data *pdata;
35 struct i2c_client *client;
36 struct regmap *regmap;
37 struct i2c_adapter *i2c_adapter;
38 struct i2c_adapter *i2c_adapter_tuner;
39 struct dvb_frontend fe;
40 struct delayed_work stat_work;
41 fe_status_t fe_status;
42 u64 post_bit_error_prev; /* for old DVBv3 read_ber() calculation */
46 struct delayed_work i2c_gate_work;
47 unsigned long filters; /* PID filter */
50 struct rtl2832_reg_entry {
56 struct rtl2832_reg_value {
61 /* Demod register bit names */
62 enum DVBT_REG_BIT_NAME {
66 DVBT_RSD_BER_FAIL_VAL,
127 DVBT_CFREQ_OFF_RATIO,
162 DVBT_AGC_TARG_VAL_8_1,
193 DVBT_MPEG_IO_OPT_2_2,
194 DVBT_MPEG_IO_OPT_1_0,
251 DVBT_REG_BIT_NAME_ITEM_TERMINATOR,
254 static const struct rtl2832_reg_value rtl2832_tuner_init_tua9001[] = {
255 {DVBT_DAGC_TRG_VAL, 0x39},
256 {DVBT_AGC_TARG_VAL_0, 0x0},
257 {DVBT_AGC_TARG_VAL_8_1, 0x5a},
258 {DVBT_AAGC_LOOP_GAIN, 0x16},
259 {DVBT_LOOP_GAIN2_3_0, 0x6},
260 {DVBT_LOOP_GAIN2_4, 0x1},
261 {DVBT_LOOP_GAIN3, 0x16},
269 {DVBT_IF_AGC_MIN, 0x80},
270 {DVBT_IF_AGC_MAX, 0x7f},
271 {DVBT_RF_AGC_MIN, 0x9c},
272 {DVBT_RF_AGC_MAX, 0x7f},
273 {DVBT_POLAR_RF_AGC, 0x0},
274 {DVBT_POLAR_IF_AGC, 0x0},
275 {DVBT_AD7_SETTING, 0xe9f4},
276 {DVBT_OPT_ADC_IQ, 0x1},
279 {DVBT_SPEC_INV, 0x0},
282 static const struct rtl2832_reg_value rtl2832_tuner_init_fc0012[] = {
283 {DVBT_DAGC_TRG_VAL, 0x5a},
284 {DVBT_AGC_TARG_VAL_0, 0x0},
285 {DVBT_AGC_TARG_VAL_8_1, 0x5a},
286 {DVBT_AAGC_LOOP_GAIN, 0x16},
287 {DVBT_LOOP_GAIN2_3_0, 0x6},
288 {DVBT_LOOP_GAIN2_4, 0x1},
289 {DVBT_LOOP_GAIN3, 0x16},
297 {DVBT_IF_AGC_MIN, 0x80},
298 {DVBT_IF_AGC_MAX, 0x7f},
299 {DVBT_RF_AGC_MIN, 0x80},
300 {DVBT_RF_AGC_MAX, 0x7f},
301 {DVBT_POLAR_RF_AGC, 0x0},
302 {DVBT_POLAR_IF_AGC, 0x0},
303 {DVBT_AD7_SETTING, 0xe9bf},
304 {DVBT_EN_GI_PGA, 0x0},
305 {DVBT_THD_LOCK_UP, 0x0},
306 {DVBT_THD_LOCK_DW, 0x0},
307 {DVBT_THD_UP1, 0x11},
308 {DVBT_THD_DW1, 0xef},
309 {DVBT_INTER_CNT_LEN, 0xc},
310 {DVBT_GI_PGA_STATE, 0x0},
311 {DVBT_EN_AGC_PGA, 0x1},
312 {DVBT_IF_AGC_MAN, 0x0},
313 {DVBT_SPEC_INV, 0x0},
316 static const struct rtl2832_reg_value rtl2832_tuner_init_e4000[] = {
317 {DVBT_DAGC_TRG_VAL, 0x5a},
318 {DVBT_AGC_TARG_VAL_0, 0x0},
319 {DVBT_AGC_TARG_VAL_8_1, 0x5a},
320 {DVBT_AAGC_LOOP_GAIN, 0x18},
321 {DVBT_LOOP_GAIN2_3_0, 0x8},
322 {DVBT_LOOP_GAIN2_4, 0x1},
323 {DVBT_LOOP_GAIN3, 0x18},
331 {DVBT_IF_AGC_MIN, 0x80},
332 {DVBT_IF_AGC_MAX, 0x7f},
333 {DVBT_RF_AGC_MIN, 0x80},
334 {DVBT_RF_AGC_MAX, 0x7f},
335 {DVBT_POLAR_RF_AGC, 0x0},
336 {DVBT_POLAR_IF_AGC, 0x0},
337 {DVBT_AD7_SETTING, 0xe9d4},
338 {DVBT_EN_GI_PGA, 0x0},
339 {DVBT_THD_LOCK_UP, 0x0},
340 {DVBT_THD_LOCK_DW, 0x0},
341 {DVBT_THD_UP1, 0x14},
342 {DVBT_THD_DW1, 0xec},
343 {DVBT_INTER_CNT_LEN, 0xc},
344 {DVBT_GI_PGA_STATE, 0x0},
345 {DVBT_EN_AGC_PGA, 0x1},
348 {DVBT_REG_MONSEL, 0x1},
350 {DVBT_REG_4MSEL, 0x0},
351 {DVBT_SPEC_INV, 0x0},
354 static const struct rtl2832_reg_value rtl2832_tuner_init_r820t[] = {
355 {DVBT_DAGC_TRG_VAL, 0x39},
356 {DVBT_AGC_TARG_VAL_0, 0x0},
357 {DVBT_AGC_TARG_VAL_8_1, 0x40},
358 {DVBT_AAGC_LOOP_GAIN, 0x16},
359 {DVBT_LOOP_GAIN2_3_0, 0x8},
360 {DVBT_LOOP_GAIN2_4, 0x1},
361 {DVBT_LOOP_GAIN3, 0x18},
369 {DVBT_IF_AGC_MIN, 0x80},
370 {DVBT_IF_AGC_MAX, 0x7f},
371 {DVBT_RF_AGC_MIN, 0x80},
372 {DVBT_RF_AGC_MAX, 0x7f},
373 {DVBT_POLAR_RF_AGC, 0x0},
374 {DVBT_POLAR_IF_AGC, 0x0},
375 {DVBT_AD7_SETTING, 0xe9f4},
376 {DVBT_SPEC_INV, 0x1},
379 #endif /* RTL2832_PRIV_H */