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 #include "rtl2832_priv.h"
24 #define REG_MASK(b) (BIT(b + 1) - 1)
26 static const struct rtl2832_reg_entry registers
[] = {
27 [DVBT_SOFT_RST
] = {0x101, 2, 2},
28 [DVBT_IIC_REPEAT
] = {0x101, 3, 3},
29 [DVBT_TR_WAIT_MIN_8K
] = {0x188, 11, 2},
30 [DVBT_RSD_BER_FAIL_VAL
] = {0x18f, 15, 0},
31 [DVBT_EN_BK_TRK
] = {0x1a6, 7, 7},
32 [DVBT_AD_EN_REG
] = {0x008, 7, 7},
33 [DVBT_AD_EN_REG1
] = {0x008, 6, 6},
34 [DVBT_EN_BBIN
] = {0x1b1, 0, 0},
35 [DVBT_MGD_THD0
] = {0x195, 7, 0},
36 [DVBT_MGD_THD1
] = {0x196, 7, 0},
37 [DVBT_MGD_THD2
] = {0x197, 7, 0},
38 [DVBT_MGD_THD3
] = {0x198, 7, 0},
39 [DVBT_MGD_THD4
] = {0x199, 7, 0},
40 [DVBT_MGD_THD5
] = {0x19a, 7, 0},
41 [DVBT_MGD_THD6
] = {0x19b, 7, 0},
42 [DVBT_MGD_THD7
] = {0x19c, 7, 0},
43 [DVBT_EN_CACQ_NOTCH
] = {0x161, 4, 4},
44 [DVBT_AD_AV_REF
] = {0x009, 6, 0},
45 [DVBT_REG_PI
] = {0x00a, 2, 0},
46 [DVBT_PIP_ON
] = {0x021, 3, 3},
47 [DVBT_SCALE1_B92
] = {0x292, 7, 0},
48 [DVBT_SCALE1_B93
] = {0x293, 7, 0},
49 [DVBT_SCALE1_BA7
] = {0x2a7, 7, 0},
50 [DVBT_SCALE1_BA9
] = {0x2a9, 7, 0},
51 [DVBT_SCALE1_BAA
] = {0x2aa, 7, 0},
52 [DVBT_SCALE1_BAB
] = {0x2ab, 7, 0},
53 [DVBT_SCALE1_BAC
] = {0x2ac, 7, 0},
54 [DVBT_SCALE1_BB0
] = {0x2b0, 7, 0},
55 [DVBT_SCALE1_BB1
] = {0x2b1, 7, 0},
56 [DVBT_KB_P1
] = {0x164, 3, 1},
57 [DVBT_KB_P2
] = {0x164, 6, 4},
58 [DVBT_KB_P3
] = {0x165, 2, 0},
59 [DVBT_OPT_ADC_IQ
] = {0x006, 5, 4},
60 [DVBT_AD_AVI
] = {0x009, 1, 0},
61 [DVBT_AD_AVQ
] = {0x009, 3, 2},
62 [DVBT_K1_CR_STEP12
] = {0x2ad, 9, 4},
63 [DVBT_TRK_KS_P2
] = {0x16f, 2, 0},
64 [DVBT_TRK_KS_I2
] = {0x170, 5, 3},
65 [DVBT_TR_THD_SET2
] = {0x172, 3, 0},
66 [DVBT_TRK_KC_P2
] = {0x173, 5, 3},
67 [DVBT_TRK_KC_I2
] = {0x175, 2, 0},
68 [DVBT_CR_THD_SET2
] = {0x176, 7, 6},
69 [DVBT_PSET_IFFREQ
] = {0x119, 21, 0},
70 [DVBT_SPEC_INV
] = {0x115, 0, 0},
71 [DVBT_RSAMP_RATIO
] = {0x19f, 27, 2},
72 [DVBT_CFREQ_OFF_RATIO
] = {0x19d, 23, 4},
73 [DVBT_FSM_STAGE
] = {0x351, 6, 3},
74 [DVBT_RX_CONSTEL
] = {0x33c, 3, 2},
75 [DVBT_RX_HIER
] = {0x33c, 6, 4},
76 [DVBT_RX_C_RATE_LP
] = {0x33d, 2, 0},
77 [DVBT_RX_C_RATE_HP
] = {0x33d, 5, 3},
78 [DVBT_GI_IDX
] = {0x351, 1, 0},
79 [DVBT_FFT_MODE_IDX
] = {0x351, 2, 2},
80 [DVBT_RSD_BER_EST
] = {0x34e, 15, 0},
81 [DVBT_CE_EST_EVM
] = {0x40c, 15, 0},
82 [DVBT_RF_AGC_VAL
] = {0x35b, 13, 0},
83 [DVBT_IF_AGC_VAL
] = {0x359, 13, 0},
84 [DVBT_DAGC_VAL
] = {0x305, 7, 0},
85 [DVBT_SFREQ_OFF
] = {0x318, 13, 0},
86 [DVBT_CFREQ_OFF
] = {0x35f, 17, 0},
87 [DVBT_POLAR_RF_AGC
] = {0x00e, 1, 1},
88 [DVBT_POLAR_IF_AGC
] = {0x00e, 0, 0},
89 [DVBT_AAGC_HOLD
] = {0x104, 5, 5},
90 [DVBT_EN_RF_AGC
] = {0x104, 6, 6},
91 [DVBT_EN_IF_AGC
] = {0x104, 7, 7},
92 [DVBT_IF_AGC_MIN
] = {0x108, 7, 0},
93 [DVBT_IF_AGC_MAX
] = {0x109, 7, 0},
94 [DVBT_RF_AGC_MIN
] = {0x10a, 7, 0},
95 [DVBT_RF_AGC_MAX
] = {0x10b, 7, 0},
96 [DVBT_IF_AGC_MAN
] = {0x10c, 6, 6},
97 [DVBT_IF_AGC_MAN_VAL
] = {0x10c, 13, 0},
98 [DVBT_RF_AGC_MAN
] = {0x10e, 6, 6},
99 [DVBT_RF_AGC_MAN_VAL
] = {0x10e, 13, 0},
100 [DVBT_DAGC_TRG_VAL
] = {0x112, 7, 0},
101 [DVBT_AGC_TARG_VAL_0
] = {0x102, 0, 0},
102 [DVBT_AGC_TARG_VAL_8_1
] = {0x103, 7, 0},
103 [DVBT_AAGC_LOOP_GAIN
] = {0x1c7, 5, 1},
104 [DVBT_LOOP_GAIN2_3_0
] = {0x104, 4, 1},
105 [DVBT_LOOP_GAIN2_4
] = {0x105, 7, 7},
106 [DVBT_LOOP_GAIN3
] = {0x1c8, 4, 0},
107 [DVBT_VTOP1
] = {0x106, 5, 0},
108 [DVBT_VTOP2
] = {0x1c9, 5, 0},
109 [DVBT_VTOP3
] = {0x1ca, 5, 0},
110 [DVBT_KRF1
] = {0x1cb, 7, 0},
111 [DVBT_KRF2
] = {0x107, 7, 0},
112 [DVBT_KRF3
] = {0x1cd, 7, 0},
113 [DVBT_KRF4
] = {0x1ce, 7, 0},
114 [DVBT_EN_GI_PGA
] = {0x1e5, 0, 0},
115 [DVBT_THD_LOCK_UP
] = {0x1d9, 8, 0},
116 [DVBT_THD_LOCK_DW
] = {0x1db, 8, 0},
117 [DVBT_THD_UP1
] = {0x1dd, 7, 0},
118 [DVBT_THD_DW1
] = {0x1de, 7, 0},
119 [DVBT_INTER_CNT_LEN
] = {0x1d8, 3, 0},
120 [DVBT_GI_PGA_STATE
] = {0x1e6, 3, 3},
121 [DVBT_EN_AGC_PGA
] = {0x1d7, 0, 0},
122 [DVBT_CKOUTPAR
] = {0x17b, 5, 5},
123 [DVBT_CKOUT_PWR
] = {0x17b, 6, 6},
124 [DVBT_SYNC_DUR
] = {0x17b, 7, 7},
125 [DVBT_ERR_DUR
] = {0x17c, 0, 0},
126 [DVBT_SYNC_LVL
] = {0x17c, 1, 1},
127 [DVBT_ERR_LVL
] = {0x17c, 2, 2},
128 [DVBT_VAL_LVL
] = {0x17c, 3, 3},
129 [DVBT_SERIAL
] = {0x17c, 4, 4},
130 [DVBT_SER_LSB
] = {0x17c, 5, 5},
131 [DVBT_CDIV_PH0
] = {0x17d, 3, 0},
132 [DVBT_CDIV_PH1
] = {0x17d, 7, 4},
133 [DVBT_MPEG_IO_OPT_2_2
] = {0x006, 7, 7},
134 [DVBT_MPEG_IO_OPT_1_0
] = {0x007, 7, 6},
135 [DVBT_CKOUTPAR_PIP
] = {0x0b7, 4, 4},
136 [DVBT_CKOUT_PWR_PIP
] = {0x0b7, 3, 3},
137 [DVBT_SYNC_LVL_PIP
] = {0x0b7, 2, 2},
138 [DVBT_ERR_LVL_PIP
] = {0x0b7, 1, 1},
139 [DVBT_VAL_LVL_PIP
] = {0x0b7, 0, 0},
140 [DVBT_CKOUTPAR_PID
] = {0x0b9, 4, 4},
141 [DVBT_CKOUT_PWR_PID
] = {0x0b9, 3, 3},
142 [DVBT_SYNC_LVL_PID
] = {0x0b9, 2, 2},
143 [DVBT_ERR_LVL_PID
] = {0x0b9, 1, 1},
144 [DVBT_VAL_LVL_PID
] = {0x0b9, 0, 0},
145 [DVBT_SM_PASS
] = {0x193, 11, 0},
146 [DVBT_AD7_SETTING
] = {0x011, 15, 0},
147 [DVBT_RSSI_R
] = {0x301, 6, 0},
148 [DVBT_ACI_DET_IND
] = {0x312, 0, 0},
149 [DVBT_REG_MON
] = {0x00d, 1, 0},
150 [DVBT_REG_MONSEL
] = {0x00d, 2, 2},
151 [DVBT_REG_GPE
] = {0x00d, 7, 7},
152 [DVBT_REG_GPO
] = {0x010, 0, 0},
153 [DVBT_REG_4MSEL
] = {0x013, 0, 0},
156 /* Our regmap is bypassing I2C adapter lock, thus we do it! */
157 static int rtl2832_bulk_write(struct i2c_client
*client
, unsigned int reg
,
158 const void *val
, size_t val_count
)
160 struct rtl2832_dev
*dev
= i2c_get_clientdata(client
);
163 i2c_lock_adapter(client
->adapter
);
164 ret
= regmap_bulk_write(dev
->regmap
, reg
, val
, val_count
);
165 i2c_unlock_adapter(client
->adapter
);
169 static int rtl2832_update_bits(struct i2c_client
*client
, unsigned int reg
,
170 unsigned int mask
, unsigned int val
)
172 struct rtl2832_dev
*dev
= i2c_get_clientdata(client
);
175 i2c_lock_adapter(client
->adapter
);
176 ret
= regmap_update_bits(dev
->regmap
, reg
, mask
, val
);
177 i2c_unlock_adapter(client
->adapter
);
181 static int rtl2832_bulk_read(struct i2c_client
*client
, unsigned int reg
,
182 void *val
, size_t val_count
)
184 struct rtl2832_dev
*dev
= i2c_get_clientdata(client
);
187 i2c_lock_adapter(client
->adapter
);
188 ret
= regmap_bulk_read(dev
->regmap
, reg
, val
, val_count
);
189 i2c_unlock_adapter(client
->adapter
);
193 static int rtl2832_rd_demod_reg(struct rtl2832_dev
*dev
, int reg
, u32
*val
)
195 struct i2c_client
*client
= dev
->client
;
198 u8 msb
, lsb
, reading
[4], len
;
199 u32 reading_tmp
, mask
;
201 reg_start_addr
= registers
[reg
].start_address
;
202 msb
= registers
[reg
].msb
;
203 lsb
= registers
[reg
].lsb
;
204 len
= (msb
>> 3) + 1;
205 mask
= REG_MASK(msb
- lsb
);
207 ret
= rtl2832_bulk_read(client
, reg_start_addr
, reading
, len
);
212 for (i
= 0; i
< len
; i
++)
213 reading_tmp
|= reading
[i
] << ((len
- 1 - i
) * 8);
215 *val
= (reading_tmp
>> lsb
) & mask
;
219 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
223 static int rtl2832_wr_demod_reg(struct rtl2832_dev
*dev
, int reg
, u32 val
)
225 struct i2c_client
*client
= dev
->client
;
228 u8 msb
, lsb
, reading
[4], writing
[4], len
;
229 u32 reading_tmp
, writing_tmp
, mask
;
231 reg_start_addr
= registers
[reg
].start_address
;
232 msb
= registers
[reg
].msb
;
233 lsb
= registers
[reg
].lsb
;
234 len
= (msb
>> 3) + 1;
235 mask
= REG_MASK(msb
- lsb
);
237 ret
= rtl2832_bulk_read(client
, reg_start_addr
, reading
, len
);
242 for (i
= 0; i
< len
; i
++)
243 reading_tmp
|= reading
[i
] << ((len
- 1 - i
) * 8);
245 writing_tmp
= reading_tmp
& ~(mask
<< lsb
);
246 writing_tmp
|= ((val
& mask
) << lsb
);
248 for (i
= 0; i
< len
; i
++)
249 writing
[i
] = (writing_tmp
>> ((len
- 1 - i
) * 8)) & 0xff;
251 ret
= rtl2832_bulk_write(client
, reg_start_addr
, writing
, len
);
257 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
261 static int rtl2832_set_if(struct dvb_frontend
*fe
, u32 if_freq
)
263 struct rtl2832_dev
*dev
= fe
->demodulator_priv
;
264 struct i2c_client
*client
= dev
->client
;
267 u8 en_bbin
= (if_freq
== 0 ? 0x1 : 0x0);
270 * PSET_IFFREQ = - floor((IfFreqHz % CrystalFreqHz) * pow(2, 22)
273 pset_iffreq
= if_freq
% dev
->pdata
->clk
;
274 pset_iffreq
*= 0x400000;
275 pset_iffreq
= div_u64(pset_iffreq
, dev
->pdata
->clk
);
276 pset_iffreq
= -pset_iffreq
;
277 pset_iffreq
= pset_iffreq
& 0x3fffff;
278 dev_dbg(&client
->dev
, "if_frequency=%d pset_iffreq=%08x\n",
279 if_freq
, (unsigned)pset_iffreq
);
281 ret
= rtl2832_wr_demod_reg(dev
, DVBT_EN_BBIN
, en_bbin
);
285 ret
= rtl2832_wr_demod_reg(dev
, DVBT_PSET_IFFREQ
, pset_iffreq
);
291 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
295 static int rtl2832_init(struct dvb_frontend
*fe
)
297 struct rtl2832_dev
*dev
= fe
->demodulator_priv
;
298 struct i2c_client
*client
= dev
->client
;
299 struct dtv_frontend_properties
*c
= &dev
->fe
.dtv_property_cache
;
300 const struct rtl2832_reg_value
*init
;
302 /* initialization values for the demodulator registers */
303 struct rtl2832_reg_value rtl2832_initial_regs
[] = {
304 {DVBT_AD_EN_REG
, 0x1},
305 {DVBT_AD_EN_REG1
, 0x1},
306 {DVBT_RSD_BER_FAIL_VAL
, 0x2800},
307 {DVBT_MGD_THD0
, 0x10},
308 {DVBT_MGD_THD1
, 0x20},
309 {DVBT_MGD_THD2
, 0x20},
310 {DVBT_MGD_THD3
, 0x40},
311 {DVBT_MGD_THD4
, 0x22},
312 {DVBT_MGD_THD5
, 0x32},
313 {DVBT_MGD_THD6
, 0x37},
314 {DVBT_MGD_THD7
, 0x39},
315 {DVBT_EN_BK_TRK
, 0x0},
316 {DVBT_EN_CACQ_NOTCH
, 0x0},
317 {DVBT_AD_AV_REF
, 0x2a},
320 {DVBT_CDIV_PH0
, 0x8},
321 {DVBT_CDIV_PH1
, 0x8},
322 {DVBT_SCALE1_B92
, 0x4},
323 {DVBT_SCALE1_B93
, 0xb0},
324 {DVBT_SCALE1_BA7
, 0x78},
325 {DVBT_SCALE1_BA9
, 0x28},
326 {DVBT_SCALE1_BAA
, 0x59},
327 {DVBT_SCALE1_BAB
, 0x83},
328 {DVBT_SCALE1_BAC
, 0xd4},
329 {DVBT_SCALE1_BB0
, 0x65},
330 {DVBT_SCALE1_BB1
, 0x43},
334 {DVBT_K1_CR_STEP12
, 0xa},
337 {DVBT_CDIV_PH0
, 0x9},
338 {DVBT_CDIV_PH1
, 0x9},
339 {DVBT_MPEG_IO_OPT_2_2
, 0x0},
340 {DVBT_MPEG_IO_OPT_1_0
, 0x0},
341 {DVBT_TRK_KS_P2
, 0x4},
342 {DVBT_TRK_KS_I2
, 0x7},
343 {DVBT_TR_THD_SET2
, 0x6},
344 {DVBT_TRK_KC_I2
, 0x5},
345 {DVBT_CR_THD_SET2
, 0x1},
348 dev_dbg(&client
->dev
, "\n");
350 ret
= rtl2832_wr_demod_reg(dev
, DVBT_SOFT_RST
, 0x0);
354 for (i
= 0; i
< ARRAY_SIZE(rtl2832_initial_regs
); i
++) {
355 ret
= rtl2832_wr_demod_reg(dev
, rtl2832_initial_regs
[i
].reg
,
356 rtl2832_initial_regs
[i
].value
);
361 /* load tuner specific settings */
362 dev_dbg(&client
->dev
, "load settings for tuner=%02x\n",
364 switch (dev
->pdata
->tuner
) {
365 case RTL2832_TUNER_FC2580
:
366 len
= ARRAY_SIZE(rtl2832_tuner_init_fc2580
);
367 init
= rtl2832_tuner_init_fc2580
;
369 case RTL2832_TUNER_FC0012
:
370 case RTL2832_TUNER_FC0013
:
371 len
= ARRAY_SIZE(rtl2832_tuner_init_fc0012
);
372 init
= rtl2832_tuner_init_fc0012
;
374 case RTL2832_TUNER_TUA9001
:
375 len
= ARRAY_SIZE(rtl2832_tuner_init_tua9001
);
376 init
= rtl2832_tuner_init_tua9001
;
378 case RTL2832_TUNER_E4000
:
379 len
= ARRAY_SIZE(rtl2832_tuner_init_e4000
);
380 init
= rtl2832_tuner_init_e4000
;
382 case RTL2832_TUNER_R820T
:
383 case RTL2832_TUNER_R828D
:
384 len
= ARRAY_SIZE(rtl2832_tuner_init_r820t
);
385 init
= rtl2832_tuner_init_r820t
;
387 case RTL2832_TUNER_SI2157
:
388 len
= ARRAY_SIZE(rtl2832_tuner_init_si2157
);
389 init
= rtl2832_tuner_init_si2157
;
396 for (i
= 0; i
< len
; i
++) {
397 ret
= rtl2832_wr_demod_reg(dev
, init
[i
].reg
, init
[i
].value
);
402 /* init stats here in order signal app which stats are supported */
404 c
->strength
.stat
[0].scale
= FE_SCALE_NOT_AVAILABLE
;
406 c
->cnr
.stat
[0].scale
= FE_SCALE_NOT_AVAILABLE
;
407 c
->post_bit_error
.len
= 1;
408 c
->post_bit_error
.stat
[0].scale
= FE_SCALE_NOT_AVAILABLE
;
409 c
->post_bit_count
.len
= 1;
410 c
->post_bit_count
.stat
[0].scale
= FE_SCALE_NOT_AVAILABLE
;
411 dev
->sleeping
= false;
415 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
419 static int rtl2832_sleep(struct dvb_frontend
*fe
)
421 struct rtl2832_dev
*dev
= fe
->demodulator_priv
;
422 struct i2c_client
*client
= dev
->client
;
425 dev_dbg(&client
->dev
, "\n");
427 dev
->sleeping
= true;
430 ret
= rtl2832_wr_demod_reg(dev
, DVBT_SOFT_RST
, 0x1);
436 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
440 static int rtl2832_get_tune_settings(struct dvb_frontend
*fe
,
441 struct dvb_frontend_tune_settings
*s
)
443 struct rtl2832_dev
*dev
= fe
->demodulator_priv
;
444 struct i2c_client
*client
= dev
->client
;
446 dev_dbg(&client
->dev
, "\n");
447 s
->min_delay_ms
= 1000;
448 s
->step_size
= fe
->ops
.info
.frequency_stepsize
* 2;
449 s
->max_drift
= (fe
->ops
.info
.frequency_stepsize
* 2) + 1;
453 static int rtl2832_set_frontend(struct dvb_frontend
*fe
)
455 struct rtl2832_dev
*dev
= fe
->demodulator_priv
;
456 struct i2c_client
*client
= dev
->client
;
457 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
459 u64 bw_mode
, num
, num2
;
460 u32 resamp_ratio
, cfreq_off_ratio
;
461 static u8 bw_params
[3][32] = {
462 /* 6 MHz bandwidth */
464 0xf5, 0xff, 0x15, 0x38, 0x5d, 0x6d, 0x52, 0x07, 0xfa, 0x2f,
465 0x53, 0xf5, 0x3f, 0xca, 0x0b, 0x91, 0xea, 0x30, 0x63, 0xb2,
466 0x13, 0xda, 0x0b, 0xc4, 0x18, 0x7e, 0x16, 0x66, 0x08, 0x67,
470 /* 7 MHz bandwidth */
472 0xe7, 0xcc, 0xb5, 0xba, 0xe8, 0x2f, 0x67, 0x61, 0x00, 0xaf,
473 0x86, 0xf2, 0xbf, 0x59, 0x04, 0x11, 0xb6, 0x33, 0xa4, 0x30,
474 0x15, 0x10, 0x0a, 0x42, 0x18, 0xf8, 0x17, 0xd9, 0x07, 0x22,
478 /* 8 MHz bandwidth */
480 0x09, 0xf6, 0xd2, 0xa7, 0x9a, 0xc9, 0x27, 0x77, 0x06, 0xbf,
481 0xec, 0xf4, 0x4f, 0x0b, 0xfc, 0x01, 0x63, 0x35, 0x54, 0xa7,
482 0x16, 0x66, 0x08, 0xb4, 0x19, 0x6e, 0x19, 0x65, 0x05, 0xc8,
487 dev_dbg(&client
->dev
, "frequency=%u bandwidth_hz=%u inversion=%u\n",
488 c
->frequency
, c
->bandwidth_hz
, c
->inversion
);
491 if (fe
->ops
.tuner_ops
.set_params
)
492 fe
->ops
.tuner_ops
.set_params(fe
);
494 /* If the frontend has get_if_frequency(), use it */
495 if (fe
->ops
.tuner_ops
.get_if_frequency
) {
498 ret
= fe
->ops
.tuner_ops
.get_if_frequency(fe
, &if_freq
);
502 ret
= rtl2832_set_if(fe
, if_freq
);
507 switch (c
->bandwidth_hz
) {
521 dev_err(&client
->dev
, "invalid bandwidth_hz %u\n",
527 for (j
= 0; j
< sizeof(bw_params
[0]); j
++) {
528 ret
= rtl2832_bulk_write(client
, 0x11c + j
, &bw_params
[i
][j
], 1);
533 /* calculate and set resample ratio
534 * RSAMP_RATIO = floor(CrystalFreqHz * 7 * pow(2, 22)
535 * / ConstWithBandwidthMode)
537 num
= dev
->pdata
->clk
* 7;
539 num
= div_u64(num
, bw_mode
);
540 resamp_ratio
= num
& 0x3ffffff;
541 ret
= rtl2832_wr_demod_reg(dev
, DVBT_RSAMP_RATIO
, resamp_ratio
);
545 /* calculate and set cfreq off ratio
546 * CFREQ_OFF_RATIO = - floor(ConstWithBandwidthMode * pow(2, 20)
547 * / (CrystalFreqHz * 7))
550 num2
= dev
->pdata
->clk
* 7;
551 num
= div_u64(num
, num2
);
553 cfreq_off_ratio
= num
& 0xfffff;
554 ret
= rtl2832_wr_demod_reg(dev
, DVBT_CFREQ_OFF_RATIO
, cfreq_off_ratio
);
559 ret
= rtl2832_wr_demod_reg(dev
, DVBT_SOFT_RST
, 0x1);
563 ret
= rtl2832_wr_demod_reg(dev
, DVBT_SOFT_RST
, 0x0);
569 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
573 static int rtl2832_get_frontend(struct dvb_frontend
*fe
,
574 struct dtv_frontend_properties
*c
)
576 struct rtl2832_dev
*dev
= fe
->demodulator_priv
;
577 struct i2c_client
*client
= dev
->client
;
584 ret
= rtl2832_bulk_read(client
, 0x33c, buf
, 2);
588 ret
= rtl2832_bulk_read(client
, 0x351, &buf
[2], 1);
592 dev_dbg(&client
->dev
, "TPS=%*ph\n", 3, buf
);
594 switch ((buf
[0] >> 2) & 3) {
596 c
->modulation
= QPSK
;
599 c
->modulation
= QAM_16
;
602 c
->modulation
= QAM_64
;
606 switch ((buf
[2] >> 2) & 1) {
608 c
->transmission_mode
= TRANSMISSION_MODE_2K
;
611 c
->transmission_mode
= TRANSMISSION_MODE_8K
;
614 switch ((buf
[2] >> 0) & 3) {
616 c
->guard_interval
= GUARD_INTERVAL_1_32
;
619 c
->guard_interval
= GUARD_INTERVAL_1_16
;
622 c
->guard_interval
= GUARD_INTERVAL_1_8
;
625 c
->guard_interval
= GUARD_INTERVAL_1_4
;
629 switch ((buf
[0] >> 4) & 7) {
631 c
->hierarchy
= HIERARCHY_NONE
;
634 c
->hierarchy
= HIERARCHY_1
;
637 c
->hierarchy
= HIERARCHY_2
;
640 c
->hierarchy
= HIERARCHY_4
;
644 switch ((buf
[1] >> 3) & 7) {
646 c
->code_rate_HP
= FEC_1_2
;
649 c
->code_rate_HP
= FEC_2_3
;
652 c
->code_rate_HP
= FEC_3_4
;
655 c
->code_rate_HP
= FEC_5_6
;
658 c
->code_rate_HP
= FEC_7_8
;
662 switch ((buf
[1] >> 0) & 7) {
664 c
->code_rate_LP
= FEC_1_2
;
667 c
->code_rate_LP
= FEC_2_3
;
670 c
->code_rate_LP
= FEC_3_4
;
673 c
->code_rate_LP
= FEC_5_6
;
676 c
->code_rate_LP
= FEC_7_8
;
682 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
686 static int rtl2832_read_status(struct dvb_frontend
*fe
, enum fe_status
*status
)
688 struct rtl2832_dev
*dev
= fe
->demodulator_priv
;
689 struct i2c_client
*client
= dev
->client
;
690 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
692 u32
uninitialized_var(tmp
);
696 dev_dbg(&client
->dev
, "\n");
702 ret
= rtl2832_rd_demod_reg(dev
, DVBT_FSM_STAGE
, &tmp
);
707 *status
|= FE_HAS_SIGNAL
| FE_HAS_CARRIER
|
708 FE_HAS_VITERBI
| FE_HAS_SYNC
| FE_HAS_LOCK
;
709 } else if (tmp
== 10) {
710 *status
|= FE_HAS_SIGNAL
| FE_HAS_CARRIER
|
714 dev
->fe_status
= *status
;
716 /* signal strength */
717 if (dev
->fe_status
& FE_HAS_SIGNAL
) {
718 /* read digital AGC */
719 ret
= rtl2832_bulk_read(client
, 0x305, &u8tmp
, 1);
723 dev_dbg(&client
->dev
, "digital agc=%02x", u8tmp
);
726 u16tmp
= u8tmp
<< 8 | u8tmp
<< 0;
728 c
->strength
.stat
[0].scale
= FE_SCALE_RELATIVE
;
729 c
->strength
.stat
[0].uvalue
= u16tmp
;
731 c
->strength
.stat
[0].scale
= FE_SCALE_NOT_AVAILABLE
;
735 if (dev
->fe_status
& FE_HAS_VITERBI
) {
736 unsigned hierarchy
, constellation
;
737 #define CONSTELLATION_NUM 3
738 #define HIERARCHY_NUM 4
739 static const u32 constant
[CONSTELLATION_NUM
][HIERARCHY_NUM
] = {
740 {85387325, 85387325, 85387325, 85387325},
741 {86676178, 86676178, 87167949, 87795660},
742 {87659938, 87659938, 87885178, 88241743},
745 ret
= rtl2832_bulk_read(client
, 0x33c, &u8tmp
, 1);
749 constellation
= (u8tmp
>> 2) & 0x03; /* [3:2] */
750 if (constellation
> CONSTELLATION_NUM
- 1)
753 hierarchy
= (u8tmp
>> 4) & 0x07; /* [6:4] */
754 if (hierarchy
> HIERARCHY_NUM
- 1)
757 ret
= rtl2832_bulk_read(client
, 0x40c, buf
, 2);
761 u16tmp
= buf
[0] << 8 | buf
[1] << 0;
763 tmp
= (constant
[constellation
][hierarchy
] -
764 intlog10(u16tmp
)) / ((1 << 24) / 10000);
768 dev_dbg(&client
->dev
, "cnr raw=%u\n", u16tmp
);
770 c
->cnr
.stat
[0].scale
= FE_SCALE_DECIBEL
;
771 c
->cnr
.stat
[0].svalue
= tmp
;
773 c
->cnr
.stat
[0].scale
= FE_SCALE_NOT_AVAILABLE
;
777 if (dev
->fe_status
& FE_HAS_LOCK
) {
778 ret
= rtl2832_bulk_read(client
, 0x34e, buf
, 2);
782 u16tmp
= buf
[0] << 8 | buf
[1] << 0;
783 dev
->post_bit_error
+= u16tmp
;
784 dev
->post_bit_count
+= 1000000;
786 dev_dbg(&client
->dev
, "ber errors=%u total=1000000\n", u16tmp
);
788 c
->post_bit_error
.stat
[0].scale
= FE_SCALE_COUNTER
;
789 c
->post_bit_error
.stat
[0].uvalue
= dev
->post_bit_error
;
790 c
->post_bit_count
.stat
[0].scale
= FE_SCALE_COUNTER
;
791 c
->post_bit_count
.stat
[0].uvalue
= dev
->post_bit_count
;
793 c
->post_bit_error
.stat
[0].scale
= FE_SCALE_NOT_AVAILABLE
;
794 c
->post_bit_count
.stat
[0].scale
= FE_SCALE_NOT_AVAILABLE
;
799 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
803 static int rtl2832_read_snr(struct dvb_frontend
*fe
, u16
*snr
)
805 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
807 /* report SNR in resolution of 0.1 dB */
808 if (c
->cnr
.stat
[0].scale
== FE_SCALE_DECIBEL
)
809 *snr
= div_s64(c
->cnr
.stat
[0].svalue
, 100);
816 static int rtl2832_read_ber(struct dvb_frontend
*fe
, u32
*ber
)
818 struct rtl2832_dev
*dev
= fe
->demodulator_priv
;
820 *ber
= (dev
->post_bit_error
- dev
->post_bit_error_prev
);
821 dev
->post_bit_error_prev
= dev
->post_bit_error
;
827 * I2C gate/mux/repeater logic
828 * We must use unlocked __i2c_transfer() here (through regmap) because of I2C
829 * adapter lock is already taken by tuner driver.
830 * There is delay mechanism to avoid unneeded I2C gate open / close. Gate close
831 * is delayed here a little bit in order to see if there is sequence of I2C
832 * messages sent to same I2C bus.
834 static void rtl2832_i2c_gate_work(struct work_struct
*work
)
836 struct rtl2832_dev
*dev
= container_of(work
, struct rtl2832_dev
, i2c_gate_work
.work
);
837 struct i2c_client
*client
= dev
->client
;
841 ret
= rtl2832_update_bits(dev
->client
, 0x101, 0x08, 0x00);
847 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
850 static int rtl2832_select(struct i2c_adapter
*adap
, void *mux_priv
, u32 chan_id
)
852 struct rtl2832_dev
*dev
= mux_priv
;
853 struct i2c_client
*client
= dev
->client
;
856 /* terminate possible gate closing */
857 cancel_delayed_work(&dev
->i2c_gate_work
);
860 * I2C adapter lock is already taken and due to that we will use
861 * regmap_update_bits() which does not lock again I2C adapter.
863 ret
= regmap_update_bits(dev
->regmap
, 0x101, 0x08, 0x08);
869 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
873 static int rtl2832_deselect(struct i2c_adapter
*adap
, void *mux_priv
,
876 struct rtl2832_dev
*dev
= mux_priv
;
878 schedule_delayed_work(&dev
->i2c_gate_work
, usecs_to_jiffies(100));
882 static struct dvb_frontend_ops rtl2832_ops
= {
883 .delsys
= { SYS_DVBT
},
885 .name
= "Realtek RTL2832 (DVB-T)",
886 .frequency_min
= 174000000,
887 .frequency_max
= 862000000,
888 .frequency_stepsize
= 166667,
889 .caps
= FE_CAN_FEC_1_2
|
899 FE_CAN_TRANSMISSION_MODE_AUTO
|
900 FE_CAN_GUARD_INTERVAL_AUTO
|
901 FE_CAN_HIERARCHY_AUTO
|
906 .init
= rtl2832_init
,
907 .sleep
= rtl2832_sleep
,
909 .get_tune_settings
= rtl2832_get_tune_settings
,
911 .set_frontend
= rtl2832_set_frontend
,
912 .get_frontend
= rtl2832_get_frontend
,
914 .read_status
= rtl2832_read_status
,
915 .read_snr
= rtl2832_read_snr
,
916 .read_ber
= rtl2832_read_ber
,
919 static bool rtl2832_volatile_reg(struct device
*dev
, unsigned int reg
)
926 case 0x40c ... 0x40d:
936 * We implement own I2C access routines for regmap in order to get manual access
937 * to I2C adapter lock, which is needed for I2C mux adapter.
939 static int rtl2832_regmap_read(void *context
, const void *reg_buf
,
940 size_t reg_size
, void *val_buf
, size_t val_size
)
942 struct i2c_client
*client
= context
;
944 struct i2c_msg msg
[2] = {
946 .addr
= client
->addr
,
949 .buf
= (u8
*)reg_buf
,
951 .addr
= client
->addr
,
958 ret
= __i2c_transfer(client
->adapter
, msg
, 2);
960 dev_warn(&client
->dev
, "i2c reg read failed %d reg %02x\n",
961 ret
, *(u8
*)reg_buf
);
969 static int rtl2832_regmap_write(void *context
, const void *data
, size_t count
)
971 struct i2c_client
*client
= context
;
973 struct i2c_msg msg
[1] = {
975 .addr
= client
->addr
,
982 ret
= __i2c_transfer(client
->adapter
, msg
, 1);
984 dev_warn(&client
->dev
, "i2c reg write failed %d reg %02x\n",
993 static int rtl2832_regmap_gather_write(void *context
, const void *reg
,
994 size_t reg_len
, const void *val
,
997 struct i2c_client
*client
= context
;
1000 struct i2c_msg msg
[1] = {
1002 .addr
= client
->addr
,
1009 buf
[0] = *(u8
const *)reg
;
1010 memcpy(&buf
[1], val
, val_len
);
1012 ret
= __i2c_transfer(client
->adapter
, msg
, 1);
1014 dev_warn(&client
->dev
, "i2c reg write failed %d reg %02x\n",
1015 ret
, *(u8
const *)reg
);
1024 * FIXME: Hack. Implement own regmap locking in order to silence lockdep
1025 * recursive lock warning. That happens when regmap I2C client calls I2C mux
1026 * adapter, which leads demod I2C repeater enable via demod regmap. Operation
1027 * takes two regmap locks recursively - but those are different regmap instances
1028 * in a two different I2C drivers, so it is not deadlock. Proper fix is to make
1029 * regmap aware of lockdep.
1031 static void rtl2832_regmap_lock(void *__dev
)
1033 struct rtl2832_dev
*dev
= __dev
;
1034 struct i2c_client
*client
= dev
->client
;
1036 dev_dbg(&client
->dev
, "\n");
1037 mutex_lock(&dev
->regmap_mutex
);
1040 static void rtl2832_regmap_unlock(void *__dev
)
1042 struct rtl2832_dev
*dev
= __dev
;
1043 struct i2c_client
*client
= dev
->client
;
1045 dev_dbg(&client
->dev
, "\n");
1046 mutex_unlock(&dev
->regmap_mutex
);
1049 static struct dvb_frontend
*rtl2832_get_dvb_frontend(struct i2c_client
*client
)
1051 struct rtl2832_dev
*dev
= i2c_get_clientdata(client
);
1053 dev_dbg(&client
->dev
, "\n");
1057 static struct i2c_adapter
*rtl2832_get_i2c_adapter(struct i2c_client
*client
)
1059 struct rtl2832_dev
*dev
= i2c_get_clientdata(client
);
1061 dev_dbg(&client
->dev
, "\n");
1062 return dev
->i2c_adapter_tuner
;
1065 static int rtl2832_slave_ts_ctrl(struct i2c_client
*client
, bool enable
)
1067 struct rtl2832_dev
*dev
= i2c_get_clientdata(client
);
1070 dev_dbg(&client
->dev
, "enable=%d\n", enable
);
1073 ret
= rtl2832_wr_demod_reg(dev
, DVBT_SOFT_RST
, 0x0);
1076 ret
= rtl2832_bulk_write(client
, 0x10c, "\x5f\xff", 2);
1079 ret
= rtl2832_wr_demod_reg(dev
, DVBT_PIP_ON
, 0x1);
1082 ret
= rtl2832_bulk_write(client
, 0x0bc, "\x18", 1);
1085 ret
= rtl2832_bulk_write(client
, 0x192, "\x7f\xf7\xff", 3);
1089 ret
= rtl2832_bulk_write(client
, 0x192, "\x00\x0f\xff", 3);
1092 ret
= rtl2832_bulk_write(client
, 0x0bc, "\x08", 1);
1095 ret
= rtl2832_wr_demod_reg(dev
, DVBT_PIP_ON
, 0x0);
1098 ret
= rtl2832_bulk_write(client
, 0x10c, "\x00\x00", 2);
1101 ret
= rtl2832_wr_demod_reg(dev
, DVBT_SOFT_RST
, 0x1);
1108 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
1112 static int rtl2832_pid_filter_ctrl(struct dvb_frontend
*fe
, int onoff
)
1114 struct rtl2832_dev
*dev
= fe
->demodulator_priv
;
1115 struct i2c_client
*client
= dev
->client
;
1119 dev_dbg(&client
->dev
, "onoff=%d\n", onoff
);
1121 /* enable / disable PID filter */
1127 ret
= rtl2832_update_bits(client
, 0x061, 0xc0, u8tmp
);
1133 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
1137 static int rtl2832_pid_filter(struct dvb_frontend
*fe
, u8 index
, u16 pid
,
1140 struct rtl2832_dev
*dev
= fe
->demodulator_priv
;
1141 struct i2c_client
*client
= dev
->client
;
1145 dev_dbg(&client
->dev
, "index=%d pid=%04x onoff=%d\n",
1148 /* skip invalid PIDs (0x2000) */
1149 if (pid
> 0x1fff || index
> 32)
1153 set_bit(index
, &dev
->filters
);
1155 clear_bit(index
, &dev
->filters
);
1157 /* enable / disable PIDs */
1158 buf
[0] = (dev
->filters
>> 0) & 0xff;
1159 buf
[1] = (dev
->filters
>> 8) & 0xff;
1160 buf
[2] = (dev
->filters
>> 16) & 0xff;
1161 buf
[3] = (dev
->filters
>> 24) & 0xff;
1162 ret
= rtl2832_bulk_write(client
, 0x062, buf
, 4);
1167 buf
[0] = (pid
>> 8) & 0xff;
1168 buf
[1] = (pid
>> 0) & 0xff;
1169 ret
= rtl2832_bulk_write(client
, 0x066 + 2 * index
, buf
, 2);
1175 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
1179 static int rtl2832_probe(struct i2c_client
*client
,
1180 const struct i2c_device_id
*id
)
1182 struct rtl2832_platform_data
*pdata
= client
->dev
.platform_data
;
1183 struct i2c_adapter
*i2c
= client
->adapter
;
1184 struct rtl2832_dev
*dev
;
1187 static const struct regmap_bus regmap_bus
= {
1188 .read
= rtl2832_regmap_read
,
1189 .write
= rtl2832_regmap_write
,
1190 .gather_write
= rtl2832_regmap_gather_write
,
1191 .val_format_endian_default
= REGMAP_ENDIAN_NATIVE
,
1193 static const struct regmap_range_cfg regmap_range_cfg
[] = {
1195 .selector_reg
= 0x00,
1196 .selector_mask
= 0xff,
1197 .selector_shift
= 0,
1199 .window_len
= 0x100,
1200 .range_min
= 0 * 0x100,
1201 .range_max
= 5 * 0x100,
1205 dev_dbg(&client
->dev
, "\n");
1207 /* allocate memory for the internal state */
1208 dev
= kzalloc(sizeof(struct rtl2832_dev
), GFP_KERNEL
);
1214 /* setup the state */
1215 i2c_set_clientdata(client
, dev
);
1216 dev
->client
= client
;
1217 dev
->pdata
= client
->dev
.platform_data
;
1218 dev
->sleeping
= true;
1219 INIT_DELAYED_WORK(&dev
->i2c_gate_work
, rtl2832_i2c_gate_work
);
1221 mutex_init(&dev
->regmap_mutex
);
1222 dev
->regmap_config
.reg_bits
= 8,
1223 dev
->regmap_config
.val_bits
= 8,
1224 dev
->regmap_config
.lock
= rtl2832_regmap_lock
,
1225 dev
->regmap_config
.unlock
= rtl2832_regmap_unlock
,
1226 dev
->regmap_config
.lock_arg
= dev
,
1227 dev
->regmap_config
.volatile_reg
= rtl2832_volatile_reg
,
1228 dev
->regmap_config
.max_register
= 5 * 0x100,
1229 dev
->regmap_config
.ranges
= regmap_range_cfg
,
1230 dev
->regmap_config
.num_ranges
= ARRAY_SIZE(regmap_range_cfg
),
1231 dev
->regmap_config
.cache_type
= REGCACHE_NONE
,
1232 dev
->regmap
= regmap_init(&client
->dev
, ®map_bus
, client
,
1233 &dev
->regmap_config
);
1234 if (IS_ERR(dev
->regmap
)) {
1235 ret
= PTR_ERR(dev
->regmap
);
1239 /* check if the demod is there */
1240 ret
= rtl2832_bulk_read(client
, 0x000, &tmp
, 1);
1242 goto err_regmap_exit
;
1244 /* create muxed i2c adapter for demod tuner bus */
1245 dev
->i2c_adapter_tuner
= i2c_add_mux_adapter(i2c
, &i2c
->dev
, dev
,
1246 0, 0, 0, rtl2832_select
, rtl2832_deselect
);
1247 if (dev
->i2c_adapter_tuner
== NULL
) {
1249 goto err_regmap_exit
;
1252 /* create dvb_frontend */
1253 memcpy(&dev
->fe
.ops
, &rtl2832_ops
, sizeof(struct dvb_frontend_ops
));
1254 dev
->fe
.demodulator_priv
= dev
;
1256 /* setup callbacks */
1257 pdata
->get_dvb_frontend
= rtl2832_get_dvb_frontend
;
1258 pdata
->get_i2c_adapter
= rtl2832_get_i2c_adapter
;
1259 pdata
->slave_ts_ctrl
= rtl2832_slave_ts_ctrl
;
1260 pdata
->pid_filter
= rtl2832_pid_filter
;
1261 pdata
->pid_filter_ctrl
= rtl2832_pid_filter_ctrl
;
1262 pdata
->bulk_read
= rtl2832_bulk_read
;
1263 pdata
->bulk_write
= rtl2832_bulk_write
;
1264 pdata
->update_bits
= rtl2832_update_bits
;
1266 dev_info(&client
->dev
, "Realtek RTL2832 successfully attached\n");
1269 regmap_exit(dev
->regmap
);
1273 dev_dbg(&client
->dev
, "failed=%d\n", ret
);
1277 static int rtl2832_remove(struct i2c_client
*client
)
1279 struct rtl2832_dev
*dev
= i2c_get_clientdata(client
);
1281 dev_dbg(&client
->dev
, "\n");
1283 cancel_delayed_work_sync(&dev
->i2c_gate_work
);
1285 i2c_del_mux_adapter(dev
->i2c_adapter_tuner
);
1287 regmap_exit(dev
->regmap
);
1294 static const struct i2c_device_id rtl2832_id_table
[] = {
1298 MODULE_DEVICE_TABLE(i2c
, rtl2832_id_table
);
1300 static struct i2c_driver rtl2832_driver
= {
1304 .probe
= rtl2832_probe
,
1305 .remove
= rtl2832_remove
,
1306 .id_table
= rtl2832_id_table
,
1309 module_i2c_driver(rtl2832_driver
);
1311 MODULE_AUTHOR("Thomas Mair <mair.thomas86@gmail.com>");
1312 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1313 MODULE_DESCRIPTION("Realtek RTL2832 DVB-T demodulator driver");
1314 MODULE_LICENSE("GPL");