2 * Realtek RTL2832 DVB-T demodulator driver
4 * Copyright (C) 2012 Thomas Mair <thomas.mair86@gmail.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #include "rtl2832_priv.h"
23 #include <linux/bitops.h>
25 #define REG_MASK(b) (BIT(b + 1) - 1)
27 static const struct rtl2832_reg_entry registers[] = {
28 [DVBT_SOFT_RST] = {0x1, 0x1, 2, 2},
29 [DVBT_IIC_REPEAT] = {0x1, 0x1, 3, 3},
30 [DVBT_TR_WAIT_MIN_8K] = {0x1, 0x88, 11, 2},
31 [DVBT_RSD_BER_FAIL_VAL] = {0x1, 0x8f, 15, 0},
32 [DVBT_EN_BK_TRK] = {0x1, 0xa6, 7, 7},
33 [DVBT_AD_EN_REG] = {0x0, 0x8, 7, 7},
34 [DVBT_AD_EN_REG1] = {0x0, 0x8, 6, 6},
35 [DVBT_EN_BBIN] = {0x1, 0xb1, 0, 0},
36 [DVBT_MGD_THD0] = {0x1, 0x95, 7, 0},
37 [DVBT_MGD_THD1] = {0x1, 0x96, 7, 0},
38 [DVBT_MGD_THD2] = {0x1, 0x97, 7, 0},
39 [DVBT_MGD_THD3] = {0x1, 0x98, 7, 0},
40 [DVBT_MGD_THD4] = {0x1, 0x99, 7, 0},
41 [DVBT_MGD_THD5] = {0x1, 0x9a, 7, 0},
42 [DVBT_MGD_THD6] = {0x1, 0x9b, 7, 0},
43 [DVBT_MGD_THD7] = {0x1, 0x9c, 7, 0},
44 [DVBT_EN_CACQ_NOTCH] = {0x1, 0x61, 4, 4},
45 [DVBT_AD_AV_REF] = {0x0, 0x9, 6, 0},
46 [DVBT_REG_PI] = {0x0, 0xa, 2, 0},
47 [DVBT_PIP_ON] = {0x0, 0x21, 3, 3},
48 [DVBT_SCALE1_B92] = {0x2, 0x92, 7, 0},
49 [DVBT_SCALE1_B93] = {0x2, 0x93, 7, 0},
50 [DVBT_SCALE1_BA7] = {0x2, 0xa7, 7, 0},
51 [DVBT_SCALE1_BA9] = {0x2, 0xa9, 7, 0},
52 [DVBT_SCALE1_BAA] = {0x2, 0xaa, 7, 0},
53 [DVBT_SCALE1_BAB] = {0x2, 0xab, 7, 0},
54 [DVBT_SCALE1_BAC] = {0x2, 0xac, 7, 0},
55 [DVBT_SCALE1_BB0] = {0x2, 0xb0, 7, 0},
56 [DVBT_SCALE1_BB1] = {0x2, 0xb1, 7, 0},
57 [DVBT_KB_P1] = {0x1, 0x64, 3, 1},
58 [DVBT_KB_P2] = {0x1, 0x64, 6, 4},
59 [DVBT_KB_P3] = {0x1, 0x65, 2, 0},
60 [DVBT_OPT_ADC_IQ] = {0x0, 0x6, 5, 4},
61 [DVBT_AD_AVI] = {0x0, 0x9, 1, 0},
62 [DVBT_AD_AVQ] = {0x0, 0x9, 3, 2},
63 [DVBT_K1_CR_STEP12] = {0x2, 0xad, 9, 4},
64 [DVBT_TRK_KS_P2] = {0x1, 0x6f, 2, 0},
65 [DVBT_TRK_KS_I2] = {0x1, 0x70, 5, 3},
66 [DVBT_TR_THD_SET2] = {0x1, 0x72, 3, 0},
67 [DVBT_TRK_KC_P2] = {0x1, 0x73, 5, 3},
68 [DVBT_TRK_KC_I2] = {0x1, 0x75, 2, 0},
69 [DVBT_CR_THD_SET2] = {0x1, 0x76, 7, 6},
70 [DVBT_PSET_IFFREQ] = {0x1, 0x19, 21, 0},
71 [DVBT_SPEC_INV] = {0x1, 0x15, 0, 0},
72 [DVBT_RSAMP_RATIO] = {0x1, 0x9f, 27, 2},
73 [DVBT_CFREQ_OFF_RATIO] = {0x1, 0x9d, 23, 4},
74 [DVBT_FSM_STAGE] = {0x3, 0x51, 6, 3},
75 [DVBT_RX_CONSTEL] = {0x3, 0x3c, 3, 2},
76 [DVBT_RX_HIER] = {0x3, 0x3c, 6, 4},
77 [DVBT_RX_C_RATE_LP] = {0x3, 0x3d, 2, 0},
78 [DVBT_RX_C_RATE_HP] = {0x3, 0x3d, 5, 3},
79 [DVBT_GI_IDX] = {0x3, 0x51, 1, 0},
80 [DVBT_FFT_MODE_IDX] = {0x3, 0x51, 2, 2},
81 [DVBT_RSD_BER_EST] = {0x3, 0x4e, 15, 0},
82 [DVBT_CE_EST_EVM] = {0x4, 0xc, 15, 0},
83 [DVBT_RF_AGC_VAL] = {0x3, 0x5b, 13, 0},
84 [DVBT_IF_AGC_VAL] = {0x3, 0x59, 13, 0},
85 [DVBT_DAGC_VAL] = {0x3, 0x5, 7, 0},
86 [DVBT_SFREQ_OFF] = {0x3, 0x18, 13, 0},
87 [DVBT_CFREQ_OFF] = {0x3, 0x5f, 17, 0},
88 [DVBT_POLAR_RF_AGC] = {0x0, 0xe, 1, 1},
89 [DVBT_POLAR_IF_AGC] = {0x0, 0xe, 0, 0},
90 [DVBT_AAGC_HOLD] = {0x1, 0x4, 5, 5},
91 [DVBT_EN_RF_AGC] = {0x1, 0x4, 6, 6},
92 [DVBT_EN_IF_AGC] = {0x1, 0x4, 7, 7},
93 [DVBT_IF_AGC_MIN] = {0x1, 0x8, 7, 0},
94 [DVBT_IF_AGC_MAX] = {0x1, 0x9, 7, 0},
95 [DVBT_RF_AGC_MIN] = {0x1, 0xa, 7, 0},
96 [DVBT_RF_AGC_MAX] = {0x1, 0xb, 7, 0},
97 [DVBT_IF_AGC_MAN] = {0x1, 0xc, 6, 6},
98 [DVBT_IF_AGC_MAN_VAL] = {0x1, 0xc, 13, 0},
99 [DVBT_RF_AGC_MAN] = {0x1, 0xe, 6, 6},
100 [DVBT_RF_AGC_MAN_VAL] = {0x1, 0xe, 13, 0},
101 [DVBT_DAGC_TRG_VAL] = {0x1, 0x12, 7, 0},
102 [DVBT_AGC_TARG_VAL_0] = {0x1, 0x2, 0, 0},
103 [DVBT_AGC_TARG_VAL_8_1] = {0x1, 0x3, 7, 0},
104 [DVBT_AAGC_LOOP_GAIN] = {0x1, 0xc7, 5, 1},
105 [DVBT_LOOP_GAIN2_3_0] = {0x1, 0x4, 4, 1},
106 [DVBT_LOOP_GAIN2_4] = {0x1, 0x5, 7, 7},
107 [DVBT_LOOP_GAIN3] = {0x1, 0xc8, 4, 0},
108 [DVBT_VTOP1] = {0x1, 0x6, 5, 0},
109 [DVBT_VTOP2] = {0x1, 0xc9, 5, 0},
110 [DVBT_VTOP3] = {0x1, 0xca, 5, 0},
111 [DVBT_KRF1] = {0x1, 0xcb, 7, 0},
112 [DVBT_KRF2] = {0x1, 0x7, 7, 0},
113 [DVBT_KRF3] = {0x1, 0xcd, 7, 0},
114 [DVBT_KRF4] = {0x1, 0xce, 7, 0},
115 [DVBT_EN_GI_PGA] = {0x1, 0xe5, 0, 0},
116 [DVBT_THD_LOCK_UP] = {0x1, 0xd9, 8, 0},
117 [DVBT_THD_LOCK_DW] = {0x1, 0xdb, 8, 0},
118 [DVBT_THD_UP1] = {0x1, 0xdd, 7, 0},
119 [DVBT_THD_DW1] = {0x1, 0xde, 7, 0},
120 [DVBT_INTER_CNT_LEN] = {0x1, 0xd8, 3, 0},
121 [DVBT_GI_PGA_STATE] = {0x1, 0xe6, 3, 3},
122 [DVBT_EN_AGC_PGA] = {0x1, 0xd7, 0, 0},
123 [DVBT_CKOUTPAR] = {0x1, 0x7b, 5, 5},
124 [DVBT_CKOUT_PWR] = {0x1, 0x7b, 6, 6},
125 [DVBT_SYNC_DUR] = {0x1, 0x7b, 7, 7},
126 [DVBT_ERR_DUR] = {0x1, 0x7c, 0, 0},
127 [DVBT_SYNC_LVL] = {0x1, 0x7c, 1, 1},
128 [DVBT_ERR_LVL] = {0x1, 0x7c, 2, 2},
129 [DVBT_VAL_LVL] = {0x1, 0x7c, 3, 3},
130 [DVBT_SERIAL] = {0x1, 0x7c, 4, 4},
131 [DVBT_SER_LSB] = {0x1, 0x7c, 5, 5},
132 [DVBT_CDIV_PH0] = {0x1, 0x7d, 3, 0},
133 [DVBT_CDIV_PH1] = {0x1, 0x7d, 7, 4},
134 [DVBT_MPEG_IO_OPT_2_2] = {0x0, 0x6, 7, 7},
135 [DVBT_MPEG_IO_OPT_1_0] = {0x0, 0x7, 7, 6},
136 [DVBT_CKOUTPAR_PIP] = {0x0, 0xb7, 4, 4},
137 [DVBT_CKOUT_PWR_PIP] = {0x0, 0xb7, 3, 3},
138 [DVBT_SYNC_LVL_PIP] = {0x0, 0xb7, 2, 2},
139 [DVBT_ERR_LVL_PIP] = {0x0, 0xb7, 1, 1},
140 [DVBT_VAL_LVL_PIP] = {0x0, 0xb7, 0, 0},
141 [DVBT_CKOUTPAR_PID] = {0x0, 0xb9, 4, 4},
142 [DVBT_CKOUT_PWR_PID] = {0x0, 0xb9, 3, 3},
143 [DVBT_SYNC_LVL_PID] = {0x0, 0xb9, 2, 2},
144 [DVBT_ERR_LVL_PID] = {0x0, 0xb9, 1, 1},
145 [DVBT_VAL_LVL_PID] = {0x0, 0xb9, 0, 0},
146 [DVBT_SM_PASS] = {0x1, 0x93, 11, 0},
147 [DVBT_AD7_SETTING] = {0x0, 0x11, 15, 0},
148 [DVBT_RSSI_R] = {0x3, 0x1, 6, 0},
149 [DVBT_ACI_DET_IND] = {0x3, 0x12, 0, 0},
150 [DVBT_REG_MON] = {0x0, 0xd, 1, 0},
151 [DVBT_REG_MONSEL] = {0x0, 0xd, 2, 2},
152 [DVBT_REG_GPE] = {0x0, 0xd, 7, 7},
153 [DVBT_REG_GPO] = {0x0, 0x10, 0, 0},
154 [DVBT_REG_4MSEL] = {0x0, 0x13, 0, 0},
157 /* Our regmap is bypassing I2C adapter lock, thus we do it! */
158 int rtl2832_bulk_write(struct i2c_client *client, unsigned int reg,
159 const void *val, size_t val_count)
161 struct rtl2832_dev *dev = i2c_get_clientdata(client);
164 i2c_lock_adapter(client->adapter);
165 ret = regmap_bulk_write(dev->regmap, reg, val, val_count);
166 i2c_unlock_adapter(client->adapter);
170 int rtl2832_update_bits(struct i2c_client *client, unsigned int reg,
171 unsigned int mask, unsigned int val)
173 struct rtl2832_dev *dev = i2c_get_clientdata(client);
176 i2c_lock_adapter(client->adapter);
177 ret = regmap_update_bits(dev->regmap, reg, mask, val);
178 i2c_unlock_adapter(client->adapter);
182 int rtl2832_bulk_read(struct i2c_client *client, unsigned int reg, void *val,
185 struct rtl2832_dev *dev = i2c_get_clientdata(client);
188 i2c_lock_adapter(client->adapter);
189 ret = regmap_bulk_read(dev->regmap, reg, val, val_count);
190 i2c_unlock_adapter(client->adapter);
194 /* write multiple registers */
195 static int rtl2832_wr_regs(struct rtl2832_dev *dev, u8 reg, u8 page, u8 *val, int len)
197 return rtl2832_bulk_write(dev->client, page << 8 | reg, val, len);
200 /* read multiple registers */
201 static int rtl2832_rd_regs(struct rtl2832_dev *dev, u8 reg, u8 page, u8 *val, int len)
203 return rtl2832_bulk_read(dev->client, page << 8 | reg, val, len);
206 /* write single register */
207 static int rtl2832_wr_reg(struct rtl2832_dev *dev, u8 reg, u8 page, u8 val)
209 return rtl2832_wr_regs(dev, reg, page, &val, 1);
212 /* read single register */
213 static int rtl2832_rd_reg(struct rtl2832_dev *dev, u8 reg, u8 page, u8 *val)
215 return rtl2832_rd_regs(dev, reg, page, val, 1);
218 static int rtl2832_rd_demod_reg(struct rtl2832_dev *dev, int reg, u32 *val)
220 struct i2c_client *client = dev->client;
233 reg_start_addr = registers[reg].start_address;
234 msb = registers[reg].msb;
235 lsb = registers[reg].lsb;
236 page = registers[reg].page;
238 len = (msb >> 3) + 1;
239 mask = REG_MASK(msb - lsb);
241 ret = rtl2832_rd_regs(dev, reg_start_addr, page, &reading[0], len);
246 for (i = 0; i < len; i++)
247 reading_tmp |= reading[i] << ((len - 1 - i) * 8);
249 *val = (reading_tmp >> lsb) & mask;
254 dev_dbg(&client->dev, "failed=%d\n", ret);
259 static int rtl2832_wr_demod_reg(struct rtl2832_dev *dev, int reg, u32 val)
261 struct i2c_client *client = dev->client;
276 reg_start_addr = registers[reg].start_address;
277 msb = registers[reg].msb;
278 lsb = registers[reg].lsb;
279 page = registers[reg].page;
281 len = (msb >> 3) + 1;
282 mask = REG_MASK(msb - lsb);
285 ret = rtl2832_rd_regs(dev, reg_start_addr, page, &reading[0], len);
290 for (i = 0; i < len; i++)
291 reading_tmp |= reading[i] << ((len - 1 - i) * 8);
293 writing_tmp = reading_tmp & ~(mask << lsb);
294 writing_tmp |= ((val & mask) << lsb);
297 for (i = 0; i < len; i++)
298 writing[i] = (writing_tmp >> ((len - 1 - i) * 8)) & 0xff;
300 ret = rtl2832_wr_regs(dev, reg_start_addr, page, &writing[0], len);
307 dev_dbg(&client->dev, "failed=%d\n", ret);
312 static int rtl2832_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
314 struct rtl2832_dev *dev = fe->demodulator_priv;
315 struct i2c_client *client = dev->client;
318 dev_dbg(&client->dev, "enable=%d\n", enable);
320 /* gate already open or close */
321 if (dev->i2c_gate_state == enable)
324 ret = rtl2832_wr_demod_reg(dev, DVBT_IIC_REPEAT, (enable ? 0x1 : 0x0));
328 dev->i2c_gate_state = enable;
332 dev_dbg(&client->dev, "failed=%d\n", ret);
336 static int rtl2832_set_if(struct dvb_frontend *fe, u32 if_freq)
338 struct rtl2832_dev *dev = fe->demodulator_priv;
339 struct i2c_client *client = dev->client;
342 u8 en_bbin = (if_freq == 0 ? 0x1 : 0x0);
345 * PSET_IFFREQ = - floor((IfFreqHz % CrystalFreqHz) * pow(2, 22)
349 pset_iffreq = if_freq % dev->pdata->clk;
350 pset_iffreq *= 0x400000;
351 pset_iffreq = div_u64(pset_iffreq, dev->pdata->clk);
352 pset_iffreq = -pset_iffreq;
353 pset_iffreq = pset_iffreq & 0x3fffff;
354 dev_dbg(&client->dev, "if_frequency=%d pset_iffreq=%08x\n",
355 if_freq, (unsigned)pset_iffreq);
357 ret = rtl2832_wr_demod_reg(dev, DVBT_EN_BBIN, en_bbin);
361 ret = rtl2832_wr_demod_reg(dev, DVBT_PSET_IFFREQ, pset_iffreq);
366 static int rtl2832_init(struct dvb_frontend *fe)
368 struct rtl2832_dev *dev = fe->demodulator_priv;
369 struct i2c_client *client = dev->client;
370 struct dtv_frontend_properties *c = &dev->fe.dtv_property_cache;
371 const struct rtl2832_reg_value *init;
373 /* initialization values for the demodulator registers */
374 struct rtl2832_reg_value rtl2832_initial_regs[] = {
375 {DVBT_AD_EN_REG, 0x1},
376 {DVBT_AD_EN_REG1, 0x1},
377 {DVBT_RSD_BER_FAIL_VAL, 0x2800},
378 {DVBT_MGD_THD0, 0x10},
379 {DVBT_MGD_THD1, 0x20},
380 {DVBT_MGD_THD2, 0x20},
381 {DVBT_MGD_THD3, 0x40},
382 {DVBT_MGD_THD4, 0x22},
383 {DVBT_MGD_THD5, 0x32},
384 {DVBT_MGD_THD6, 0x37},
385 {DVBT_MGD_THD7, 0x39},
386 {DVBT_EN_BK_TRK, 0x0},
387 {DVBT_EN_CACQ_NOTCH, 0x0},
388 {DVBT_AD_AV_REF, 0x2a},
391 {DVBT_CDIV_PH0, 0x8},
392 {DVBT_CDIV_PH1, 0x8},
393 {DVBT_SCALE1_B92, 0x4},
394 {DVBT_SCALE1_B93, 0xb0},
395 {DVBT_SCALE1_BA7, 0x78},
396 {DVBT_SCALE1_BA9, 0x28},
397 {DVBT_SCALE1_BAA, 0x59},
398 {DVBT_SCALE1_BAB, 0x83},
399 {DVBT_SCALE1_BAC, 0xd4},
400 {DVBT_SCALE1_BB0, 0x65},
401 {DVBT_SCALE1_BB1, 0x43},
405 {DVBT_K1_CR_STEP12, 0xa},
408 {DVBT_CDIV_PH0, 0x9},
409 {DVBT_CDIV_PH1, 0x9},
410 {DVBT_MPEG_IO_OPT_2_2, 0x0},
411 {DVBT_MPEG_IO_OPT_1_0, 0x0},
412 {DVBT_TRK_KS_P2, 0x4},
413 {DVBT_TRK_KS_I2, 0x7},
414 {DVBT_TR_THD_SET2, 0x6},
415 {DVBT_TRK_KC_I2, 0x5},
416 {DVBT_CR_THD_SET2, 0x1},
419 dev_dbg(&client->dev, "\n");
421 for (i = 0; i < ARRAY_SIZE(rtl2832_initial_regs); i++) {
422 ret = rtl2832_wr_demod_reg(dev, rtl2832_initial_regs[i].reg,
423 rtl2832_initial_regs[i].value);
428 /* load tuner specific settings */
429 dev_dbg(&client->dev, "load settings for tuner=%02x\n",
431 switch (dev->pdata->tuner) {
432 case RTL2832_TUNER_FC0012:
433 case RTL2832_TUNER_FC0013:
434 len = ARRAY_SIZE(rtl2832_tuner_init_fc0012);
435 init = rtl2832_tuner_init_fc0012;
437 case RTL2832_TUNER_TUA9001:
438 len = ARRAY_SIZE(rtl2832_tuner_init_tua9001);
439 init = rtl2832_tuner_init_tua9001;
441 case RTL2832_TUNER_E4000:
442 len = ARRAY_SIZE(rtl2832_tuner_init_e4000);
443 init = rtl2832_tuner_init_e4000;
445 case RTL2832_TUNER_R820T:
446 case RTL2832_TUNER_R828D:
447 len = ARRAY_SIZE(rtl2832_tuner_init_r820t);
448 init = rtl2832_tuner_init_r820t;
455 for (i = 0; i < len; i++) {
456 ret = rtl2832_wr_demod_reg(dev, init[i].reg, init[i].value);
462 * r820t NIM code does a software reset here at the demod -
463 * may not be needed, as there's already a software reset at
468 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
472 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0);
476 /* init stats here in order signal app which stats are supported */
478 c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
480 c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
481 c->post_bit_error.len = 1;
482 c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
483 c->post_bit_count.len = 1;
484 c->post_bit_count.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
485 /* start statistics polling */
486 schedule_delayed_work(&dev->stat_work, msecs_to_jiffies(2000));
487 dev->sleeping = false;
491 dev_dbg(&client->dev, "failed=%d\n", ret);
495 static int rtl2832_sleep(struct dvb_frontend *fe)
497 struct rtl2832_dev *dev = fe->demodulator_priv;
498 struct i2c_client *client = dev->client;
500 dev_dbg(&client->dev, "\n");
501 dev->sleeping = true;
502 /* stop statistics polling */
503 cancel_delayed_work_sync(&dev->stat_work);
508 static int rtl2832_get_tune_settings(struct dvb_frontend *fe,
509 struct dvb_frontend_tune_settings *s)
511 struct rtl2832_dev *dev = fe->demodulator_priv;
512 struct i2c_client *client = dev->client;
514 dev_dbg(&client->dev, "\n");
515 s->min_delay_ms = 1000;
516 s->step_size = fe->ops.info.frequency_stepsize * 2;
517 s->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;
521 static int rtl2832_set_frontend(struct dvb_frontend *fe)
523 struct rtl2832_dev *dev = fe->demodulator_priv;
524 struct i2c_client *client = dev->client;
525 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
527 u64 bw_mode, num, num2;
528 u32 resamp_ratio, cfreq_off_ratio;
529 static u8 bw_params[3][32] = {
530 /* 6 MHz bandwidth */
532 0xf5, 0xff, 0x15, 0x38, 0x5d, 0x6d, 0x52, 0x07, 0xfa, 0x2f,
533 0x53, 0xf5, 0x3f, 0xca, 0x0b, 0x91, 0xea, 0x30, 0x63, 0xb2,
534 0x13, 0xda, 0x0b, 0xc4, 0x18, 0x7e, 0x16, 0x66, 0x08, 0x67,
538 /* 7 MHz bandwidth */
540 0xe7, 0xcc, 0xb5, 0xba, 0xe8, 0x2f, 0x67, 0x61, 0x00, 0xaf,
541 0x86, 0xf2, 0xbf, 0x59, 0x04, 0x11, 0xb6, 0x33, 0xa4, 0x30,
542 0x15, 0x10, 0x0a, 0x42, 0x18, 0xf8, 0x17, 0xd9, 0x07, 0x22,
546 /* 8 MHz bandwidth */
548 0x09, 0xf6, 0xd2, 0xa7, 0x9a, 0xc9, 0x27, 0x77, 0x06, 0xbf,
549 0xec, 0xf4, 0x4f, 0x0b, 0xfc, 0x01, 0x63, 0x35, 0x54, 0xa7,
550 0x16, 0x66, 0x08, 0xb4, 0x19, 0x6e, 0x19, 0x65, 0x05, 0xc8,
556 dev_dbg(&client->dev, "frequency=%u bandwidth_hz=%u inversion=%u\n",
557 c->frequency, c->bandwidth_hz, c->inversion);
560 if (fe->ops.tuner_ops.set_params)
561 fe->ops.tuner_ops.set_params(fe);
563 /* PIP mode related */
564 ret = rtl2832_wr_regs(dev, 0x92, 1, "\x00\x0f\xff", 3);
568 /* If the frontend has get_if_frequency(), use it */
569 if (fe->ops.tuner_ops.get_if_frequency) {
572 ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
576 ret = rtl2832_set_if(fe, if_freq);
581 switch (c->bandwidth_hz) {
595 dev_err(&client->dev, "invalid bandwidth_hz %u\n",
601 for (j = 0; j < sizeof(bw_params[0]); j++) {
602 ret = rtl2832_wr_regs(dev, 0x1c+j, 1, &bw_params[i][j], 1);
607 /* calculate and set resample ratio
608 * RSAMP_RATIO = floor(CrystalFreqHz * 7 * pow(2, 22)
609 * / ConstWithBandwidthMode)
611 num = dev->pdata->clk * 7;
613 num = div_u64(num, bw_mode);
614 resamp_ratio = num & 0x3ffffff;
615 ret = rtl2832_wr_demod_reg(dev, DVBT_RSAMP_RATIO, resamp_ratio);
619 /* calculate and set cfreq off ratio
620 * CFREQ_OFF_RATIO = - floor(ConstWithBandwidthMode * pow(2, 20)
621 * / (CrystalFreqHz * 7))
624 num2 = dev->pdata->clk * 7;
625 num = div_u64(num, num2);
627 cfreq_off_ratio = num & 0xfffff;
628 ret = rtl2832_wr_demod_reg(dev, DVBT_CFREQ_OFF_RATIO, cfreq_off_ratio);
633 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
637 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0);
643 dev_dbg(&client->dev, "failed=%d\n", ret);
647 static int rtl2832_get_frontend(struct dvb_frontend *fe)
649 struct rtl2832_dev *dev = fe->demodulator_priv;
650 struct i2c_client *client = dev->client;
651 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
658 ret = rtl2832_rd_regs(dev, 0x3c, 3, buf, 2);
662 ret = rtl2832_rd_reg(dev, 0x51, 3, &buf[2]);
666 dev_dbg(&client->dev, "TPS=%*ph\n", 3, buf);
668 switch ((buf[0] >> 2) & 3) {
670 c->modulation = QPSK;
673 c->modulation = QAM_16;
676 c->modulation = QAM_64;
680 switch ((buf[2] >> 2) & 1) {
682 c->transmission_mode = TRANSMISSION_MODE_2K;
685 c->transmission_mode = TRANSMISSION_MODE_8K;
688 switch ((buf[2] >> 0) & 3) {
690 c->guard_interval = GUARD_INTERVAL_1_32;
693 c->guard_interval = GUARD_INTERVAL_1_16;
696 c->guard_interval = GUARD_INTERVAL_1_8;
699 c->guard_interval = GUARD_INTERVAL_1_4;
703 switch ((buf[0] >> 4) & 7) {
705 c->hierarchy = HIERARCHY_NONE;
708 c->hierarchy = HIERARCHY_1;
711 c->hierarchy = HIERARCHY_2;
714 c->hierarchy = HIERARCHY_4;
718 switch ((buf[1] >> 3) & 7) {
720 c->code_rate_HP = FEC_1_2;
723 c->code_rate_HP = FEC_2_3;
726 c->code_rate_HP = FEC_3_4;
729 c->code_rate_HP = FEC_5_6;
732 c->code_rate_HP = FEC_7_8;
736 switch ((buf[1] >> 0) & 7) {
738 c->code_rate_LP = FEC_1_2;
741 c->code_rate_LP = FEC_2_3;
744 c->code_rate_LP = FEC_3_4;
747 c->code_rate_LP = FEC_5_6;
750 c->code_rate_LP = FEC_7_8;
756 dev_dbg(&client->dev, "failed=%d\n", ret);
760 static int rtl2832_read_status(struct dvb_frontend *fe, fe_status_t *status)
762 struct rtl2832_dev *dev = fe->demodulator_priv;
763 struct i2c_client *client = dev->client;
767 dev_dbg(&client->dev, "\n");
773 ret = rtl2832_rd_demod_reg(dev, DVBT_FSM_STAGE, &tmp);
778 *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
779 FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
781 /* TODO find out if this is also true for rtl2832? */
782 /*else if (tmp == 10) {
783 *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
787 dev->fe_status = *status;
790 dev_dbg(&client->dev, "failed=%d\n", ret);
794 static int rtl2832_read_snr(struct dvb_frontend *fe, u16 *snr)
796 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
798 /* report SNR in resolution of 0.1 dB */
799 if (c->cnr.stat[0].scale == FE_SCALE_DECIBEL)
800 *snr = div_s64(c->cnr.stat[0].svalue, 100);
807 static int rtl2832_read_ber(struct dvb_frontend *fe, u32 *ber)
809 struct rtl2832_dev *dev = fe->demodulator_priv;
811 *ber = (dev->post_bit_error - dev->post_bit_error_prev);
812 dev->post_bit_error_prev = dev->post_bit_error;
817 static void rtl2832_stat_work(struct work_struct *work)
819 struct rtl2832_dev *dev = container_of(work, struct rtl2832_dev, stat_work.work);
820 struct i2c_client *client = dev->client;
821 struct dtv_frontend_properties *c = &dev->fe.dtv_property_cache;
826 dev_dbg(&client->dev, "\n");
828 /* signal strength */
829 if (dev->fe_status & FE_HAS_SIGNAL) {
830 /* read digital AGC */
831 ret = rtl2832_bulk_read(client, 0x305, &u8tmp, 1);
835 dev_dbg(&client->dev, "digital agc=%02x", u8tmp);
838 u16tmp = u8tmp << 8 | u8tmp << 0;
840 c->strength.stat[0].scale = FE_SCALE_RELATIVE;
841 c->strength.stat[0].uvalue = u16tmp;
843 c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
847 if (dev->fe_status & FE_HAS_VITERBI) {
848 unsigned hierarchy, constellation;
849 #define CONSTELLATION_NUM 3
850 #define HIERARCHY_NUM 4
851 static const u32 constant[CONSTELLATION_NUM][HIERARCHY_NUM] = {
852 {85387325, 85387325, 85387325, 85387325},
853 {86676178, 86676178, 87167949, 87795660},
854 {87659938, 87659938, 87885178, 88241743},
857 ret = rtl2832_bulk_read(client, 0x33c, &u8tmp, 1);
861 constellation = (u8tmp >> 2) & 0x03; /* [3:2] */
862 if (constellation > CONSTELLATION_NUM - 1)
863 goto err_schedule_delayed_work;
865 hierarchy = (u8tmp >> 4) & 0x07; /* [6:4] */
866 if (hierarchy > HIERARCHY_NUM - 1)
867 goto err_schedule_delayed_work;
869 ret = rtl2832_bulk_read(client, 0x40c, buf, 2);
873 u16tmp = buf[0] << 8 | buf[1] << 0;
875 tmp = (constant[constellation][hierarchy] -
876 intlog10(u16tmp)) / ((1 << 24) / 10000);
880 dev_dbg(&client->dev, "cnr raw=%u\n", u16tmp);
882 c->cnr.stat[0].scale = FE_SCALE_DECIBEL;
883 c->cnr.stat[0].svalue = tmp;
885 c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
889 if (dev->fe_status & FE_HAS_LOCK) {
890 ret = rtl2832_bulk_read(client, 0x34e, buf, 2);
894 u16tmp = buf[0] << 8 | buf[1] << 0;
895 dev->post_bit_error += u16tmp;
896 dev->post_bit_count += 1000000;
898 dev_dbg(&client->dev, "ber errors=%u total=1000000\n", u16tmp);
900 c->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
901 c->post_bit_error.stat[0].uvalue = dev->post_bit_error;
902 c->post_bit_count.stat[0].scale = FE_SCALE_COUNTER;
903 c->post_bit_count.stat[0].uvalue = dev->post_bit_count;
905 c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
906 c->post_bit_count.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
909 err_schedule_delayed_work:
910 schedule_delayed_work(&dev->stat_work, msecs_to_jiffies(2000));
913 dev_dbg(&client->dev, "failed=%d\n", ret);
917 * I2C gate/mux/repeater logic
918 * We must use unlocked __i2c_transfer() here (through regmap) because of I2C
919 * adapter lock is already taken by tuner driver.
920 * There is delay mechanism to avoid unneeded I2C gate open / close. Gate close
921 * is delayed here a little bit in order to see if there is sequence of I2C
922 * messages sent to same I2C bus.
924 static void rtl2832_i2c_gate_work(struct work_struct *work)
926 struct rtl2832_dev *dev = container_of(work, struct rtl2832_dev, i2c_gate_work.work);
927 struct i2c_client *client = dev->client;
931 ret = rtl2832_update_bits(dev->client, 0x101, 0x08, 0x00);
935 dev->i2c_gate_state = false;
939 dev_dbg(&client->dev, "failed=%d\n", ret);
943 static int rtl2832_select(struct i2c_adapter *adap, void *mux_priv, u32 chan_id)
945 struct rtl2832_dev *dev = mux_priv;
946 struct i2c_client *client = dev->client;
949 /* terminate possible gate closing */
950 cancel_delayed_work(&dev->i2c_gate_work);
952 if (dev->i2c_gate_state == chan_id)
956 * chan_id 1 is muxed adapter demod provides and chan_id 0 is demod
957 * itself. We need open gate when request is for chan_id 1. On that case
958 * I2C adapter lock is already taken and due to that we will use
959 * regmap_update_bits() which does not lock again I2C adapter.
962 ret = regmap_update_bits(dev->regmap, 0x101, 0x08, 0x08);
964 ret = rtl2832_update_bits(dev->client, 0x101, 0x08, 0x00);
968 dev->i2c_gate_state = chan_id;
972 dev_dbg(&client->dev, "failed=%d\n", ret);
976 static int rtl2832_deselect(struct i2c_adapter *adap, void *mux_priv,
979 struct rtl2832_dev *dev = mux_priv;
981 schedule_delayed_work(&dev->i2c_gate_work, usecs_to_jiffies(100));
985 static struct dvb_frontend_ops rtl2832_ops = {
986 .delsys = { SYS_DVBT },
988 .name = "Realtek RTL2832 (DVB-T)",
989 .frequency_min = 174000000,
990 .frequency_max = 862000000,
991 .frequency_stepsize = 166667,
992 .caps = FE_CAN_FEC_1_2 |
1002 FE_CAN_TRANSMISSION_MODE_AUTO |
1003 FE_CAN_GUARD_INTERVAL_AUTO |
1004 FE_CAN_HIERARCHY_AUTO |
1009 .init = rtl2832_init,
1010 .sleep = rtl2832_sleep,
1012 .get_tune_settings = rtl2832_get_tune_settings,
1014 .set_frontend = rtl2832_set_frontend,
1015 .get_frontend = rtl2832_get_frontend,
1017 .read_status = rtl2832_read_status,
1018 .read_snr = rtl2832_read_snr,
1019 .read_ber = rtl2832_read_ber,
1021 .i2c_gate_ctrl = rtl2832_i2c_gate_ctrl,
1025 * We implement own I2C access routines for regmap in order to get manual access
1026 * to I2C adapter lock, which is needed for I2C mux adapter.
1028 static int rtl2832_regmap_read(void *context, const void *reg_buf,
1029 size_t reg_size, void *val_buf, size_t val_size)
1031 struct i2c_client *client = context;
1033 struct i2c_msg msg[2] = {
1035 .addr = client->addr,
1038 .buf = (u8 *)reg_buf,
1040 .addr = client->addr,
1047 ret = __i2c_transfer(client->adapter, msg, 2);
1049 dev_warn(&client->dev, "i2c reg read failed %d\n", ret);
1057 static int rtl2832_regmap_write(void *context, const void *data, size_t count)
1059 struct i2c_client *client = context;
1061 struct i2c_msg msg[1] = {
1063 .addr = client->addr,
1070 ret = __i2c_transfer(client->adapter, msg, 1);
1072 dev_warn(&client->dev, "i2c reg write failed %d\n", ret);
1080 static int rtl2832_regmap_gather_write(void *context, const void *reg,
1081 size_t reg_len, const void *val,
1084 struct i2c_client *client = context;
1087 struct i2c_msg msg[1] = {
1089 .addr = client->addr,
1096 buf[0] = *(u8 const *)reg;
1097 memcpy(&buf[1], val, val_len);
1099 ret = __i2c_transfer(client->adapter, msg, 1);
1101 dev_warn(&client->dev, "i2c reg write failed %d\n", ret);
1109 static struct dvb_frontend *rtl2832_get_dvb_frontend(struct i2c_client *client)
1111 struct rtl2832_dev *dev = i2c_get_clientdata(client);
1113 dev_dbg(&client->dev, "\n");
1117 static struct i2c_adapter *rtl2832_get_i2c_adapter_(struct i2c_client *client)
1119 struct rtl2832_dev *dev = i2c_get_clientdata(client);
1121 dev_dbg(&client->dev, "\n");
1122 return dev->i2c_adapter_tuner;
1125 static struct i2c_adapter *rtl2832_get_private_i2c_adapter_(struct i2c_client *client)
1127 struct rtl2832_dev *dev = i2c_get_clientdata(client);
1129 dev_dbg(&client->dev, "\n");
1130 return dev->i2c_adapter;
1133 static int rtl2832_enable_slave_ts(struct i2c_client *client)
1135 struct rtl2832_dev *dev = i2c_get_clientdata(client);
1138 dev_dbg(&client->dev, "\n");
1140 ret = rtl2832_wr_regs(dev, 0x0c, 1, "\x5f\xff", 2);
1144 ret = rtl2832_wr_demod_reg(dev, DVBT_PIP_ON, 0x1);
1148 ret = rtl2832_wr_reg(dev, 0xbc, 0, 0x18);
1152 ret = rtl2832_wr_reg(dev, 0x22, 0, 0x01);
1156 ret = rtl2832_wr_reg(dev, 0x26, 0, 0x1f);
1160 ret = rtl2832_wr_reg(dev, 0x27, 0, 0xff);
1164 ret = rtl2832_wr_regs(dev, 0x92, 1, "\x7f\xf7\xff", 3);
1169 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
1173 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0);
1179 dev_dbg(&client->dev, "failed=%d\n", ret);
1183 static int rtl2832_probe(struct i2c_client *client,
1184 const struct i2c_device_id *id)
1186 struct rtl2832_platform_data *pdata = client->dev.platform_data;
1187 struct i2c_adapter *i2c = client->adapter;
1188 struct rtl2832_dev *dev;
1191 static const struct regmap_bus regmap_bus = {
1192 .read = rtl2832_regmap_read,
1193 .write = rtl2832_regmap_write,
1194 .gather_write = rtl2832_regmap_gather_write,
1195 .val_format_endian_default = REGMAP_ENDIAN_NATIVE,
1197 static const struct regmap_range_cfg regmap_range_cfg[] = {
1199 .selector_reg = 0x00,
1200 .selector_mask = 0xff,
1201 .selector_shift = 0,
1203 .window_len = 0x100,
1204 .range_min = 0 * 0x100,
1205 .range_max = 5 * 0x100,
1208 static const struct regmap_config regmap_config = {
1211 .max_register = 5 * 0x100,
1212 .ranges = regmap_range_cfg,
1213 .num_ranges = ARRAY_SIZE(regmap_range_cfg),
1216 dev_dbg(&client->dev, "\n");
1218 /* allocate memory for the internal state */
1219 dev = kzalloc(sizeof(struct rtl2832_dev), GFP_KERNEL);
1225 /* setup the state */
1226 i2c_set_clientdata(client, dev);
1227 dev->client = client;
1228 dev->pdata = client->dev.platform_data;
1229 if (pdata->config) {
1230 dev->pdata->clk = pdata->config->xtal;
1231 dev->pdata->tuner = pdata->config->tuner;
1233 dev->sleeping = true;
1234 INIT_DELAYED_WORK(&dev->i2c_gate_work, rtl2832_i2c_gate_work);
1235 INIT_DELAYED_WORK(&dev->stat_work, rtl2832_stat_work);
1237 dev->regmap = regmap_init(&client->dev, ®map_bus, client,
1239 if (IS_ERR(dev->regmap)) {
1240 ret = PTR_ERR(dev->regmap);
1243 /* create muxed i2c adapter for demod itself */
1244 dev->i2c_adapter = i2c_add_mux_adapter(i2c, &i2c->dev, dev, 0, 0, 0,
1245 rtl2832_select, NULL);
1246 if (dev->i2c_adapter == NULL) {
1248 goto err_regmap_exit;
1251 /* check if the demod is there */
1252 ret = rtl2832_rd_reg(dev, 0x00, 0x0, &tmp);
1254 goto err_i2c_del_mux_adapter;
1256 /* create muxed i2c adapter for demod tuner bus */
1257 dev->i2c_adapter_tuner = i2c_add_mux_adapter(i2c, &i2c->dev, dev,
1258 0, 1, 0, rtl2832_select, rtl2832_deselect);
1259 if (dev->i2c_adapter_tuner == NULL) {
1261 goto err_i2c_del_mux_adapter;
1264 /* create dvb_frontend */
1265 memcpy(&dev->fe.ops, &rtl2832_ops, sizeof(struct dvb_frontend_ops));
1266 dev->fe.demodulator_priv = dev;
1268 /* setup callbacks */
1269 pdata->get_dvb_frontend = rtl2832_get_dvb_frontend;
1270 pdata->get_i2c_adapter = rtl2832_get_i2c_adapter_;
1271 pdata->get_private_i2c_adapter = rtl2832_get_private_i2c_adapter_;
1272 pdata->enable_slave_ts = rtl2832_enable_slave_ts;
1274 dev_info(&client->dev, "Realtek RTL2832 successfully attached\n");
1276 err_i2c_del_mux_adapter:
1277 i2c_del_mux_adapter(dev->i2c_adapter);
1279 regmap_exit(dev->regmap);
1283 dev_dbg(&client->dev, "failed=%d\n", ret);
1287 static int rtl2832_remove(struct i2c_client *client)
1289 struct rtl2832_dev *dev = i2c_get_clientdata(client);
1291 dev_dbg(&client->dev, "\n");
1293 cancel_delayed_work_sync(&dev->i2c_gate_work);
1295 i2c_del_mux_adapter(dev->i2c_adapter_tuner);
1297 i2c_del_mux_adapter(dev->i2c_adapter);
1299 regmap_exit(dev->regmap);
1306 static const struct i2c_device_id rtl2832_id_table[] = {
1310 MODULE_DEVICE_TABLE(i2c, rtl2832_id_table);
1312 static struct i2c_driver rtl2832_driver = {
1314 .owner = THIS_MODULE,
1317 .probe = rtl2832_probe,
1318 .remove = rtl2832_remove,
1319 .id_table = rtl2832_id_table,
1322 module_i2c_driver(rtl2832_driver);
1324 MODULE_AUTHOR("Thomas Mair <mair.thomas86@gmail.com>");
1325 MODULE_DESCRIPTION("Realtek RTL2832 DVB-T demodulator driver");
1326 MODULE_LICENSE("GPL");
1327 MODULE_VERSION("0.5");