23 #include <linux/bitops.h>
29 #define REG_MASK(b) (BIT(b + 1) - 1)
168 .addr = priv->
cfg.i2c_addr,
176 memcpy(&buf[1], val, len);
182 dev_warn(&priv->
i2c->dev,
"%s: i2c wr failed=%d reg=%02x " \
183 "len=%d\n", KBUILD_MODNAME, ret, reg, len);
200 .addr = priv->
cfg.i2c_addr,
211 dev_warn(&priv->
i2c->dev,
"%s: i2c rd failed=%d reg=%02x " \
212 "len=%d\n", KBUILD_MODNAME, ret, reg, len);
225 if (page != priv->
page) {
226 ret = rtl2832_wr(priv, 0x00, &page, 1);
233 return rtl2832_wr(priv, reg, val, len);
243 if (page != priv->
page) {
244 ret = rtl2832_wr(priv, 0x00, &page, 1);
251 return rtl2832_rd(priv, reg, val, len);
258 return rtl2832_wr_regs(priv, reg, page, &val, 1);
265 return rtl2832_rd_regs(priv, reg, page, val, 1);
287 len = (msb >> 3) + 1;
290 ret = rtl2832_rd_regs(priv, reg_start_addr, page, &reading[0], len);
295 for (i = 0; i <
len; i++)
296 reading_tmp |= reading[i] << ((len - 1 - i) * 8);
298 *val = (reading_tmp >>
lsb) & mask;
303 dev_dbg(&priv->
i2c->dev,
"%s: failed=%d\n", __func__, ret);
329 len = (msb >> 3) + 1;
333 ret = rtl2832_rd_regs(priv, reg_start_addr, page, &reading[0], len);
338 for (i = 0; i <
len; i++)
339 reading_tmp |= reading[i] << ((len - 1 - i) * 8);
341 writing_tmp = reading_tmp & ~(mask <<
lsb);
342 writing_tmp |= ((val &
mask) << lsb);
345 for (i = 0; i <
len; i++)
346 writing[i] = (writing_tmp >> ((len - 1 - i) * 8)) & 0xff;
348 ret = rtl2832_wr_regs(priv, reg_start_addr, page, &writing[0], len);
355 dev_dbg(&priv->
i2c->dev,
"%s: failed=%d\n", __func__, ret);
365 dev_dbg(&priv->
i2c->dev,
"%s: enable=%d\n", __func__, enable);
379 dev_dbg(&priv->
i2c->dev,
"%s: failed=%d\n", __func__, ret);
440 en_bbin = (priv->
cfg.if_dvbt == 0 ? 0x1 : 0x0);
446 pset_iffreq = priv->
cfg.if_dvbt % priv->
cfg.xtal;
447 pset_iffreq *= 0x400000;
448 pset_iffreq = div_u64(pset_iffreq, priv->
cfg.xtal);
449 pset_iffreq = pset_iffreq & 0x3fffff;
451 for (i = 0; i <
ARRAY_SIZE(rtl2832_initial_regs); i++) {
453 rtl2832_initial_regs[i].
value);
459 dev_dbg(&priv->
i2c->dev,
"%s: load settings for tuner=%02x\n",
460 __func__, priv->
cfg.tuner);
461 switch (priv->
cfg.tuner) {
465 init = rtl2832_tuner_init_fc0012;
469 init = rtl2832_tuner_init_tua9001;
473 init = rtl2832_tuner_init_e4000;
480 for (i = 0; i < len; i++) {
500 dev_dbg(&priv->
i2c->dev,
"%s: failed=%d\n", __func__, ret);
521 s->
max_drift = (fe->
ops.info.frequency_stepsize * 2) + 1;
525 static int rtl2832_set_frontend(
struct dvb_frontend *fe)
531 u32 resamp_ratio, cfreq_off_ratio;
532 static u8 bw_params[3][32] = {
535 0xf5, 0xff, 0x15, 0x38, 0x5d, 0x6d, 0x52, 0x07, 0xfa, 0x2f,
536 0x53, 0xf5, 0x3f, 0xca, 0x0b, 0x91, 0xea, 0x30, 0x63, 0xb2,
537 0x13, 0xda, 0x0b, 0xc4, 0x18, 0x7e, 0x16, 0x66, 0x08, 0x67,
543 0xe7, 0xcc, 0xb5, 0xba, 0xe8, 0x2f, 0x67, 0x61, 0x00, 0xaf,
544 0x86, 0xf2, 0xbf, 0x59, 0x04, 0x11, 0xb6, 0x33, 0xa4, 0x30,
545 0x15, 0x10, 0x0a, 0x42, 0x18, 0xf8, 0x17, 0xd9, 0x07, 0x22,
551 0x09, 0xf6, 0xd2, 0xa7, 0x9a, 0xc9, 0x27, 0x77, 0x06, 0xbf,
552 0xec, 0xf4, 0x4f, 0x0b, 0xfc, 0x01, 0x63, 0x35, 0x54, 0xa7,
553 0x16, 0x66, 0x08, 0xb4, 0x19, 0x6e, 0x19, 0x65, 0x05, 0xc8,
559 dev_dbg(&priv->
i2c->dev,
"%s: frequency=%d bandwidth_hz=%d " \
560 "inversion=%d\n", __func__, c->
frequency,
564 if (fe->
ops.tuner_ops.set_params)
565 fe->
ops.tuner_ops.set_params(fe);
581 dev_dbg(&priv->
i2c->dev,
"%s: invalid bandwidth\n", __func__);
585 for (j = 0; j <
sizeof(bw_params[0]); j++) {
586 ret = rtl2832_wr_regs(priv, 0x1c+j, 1, &bw_params[i][j], 1);
595 num = priv->
cfg.xtal * 7;
597 num = div_u64(num, bw_mode);
598 resamp_ratio = num & 0x3ffffff;
608 num2 = priv->
cfg.xtal * 7;
609 num = div_u64(num, num2);
611 cfreq_off_ratio = num & 0xfffff;
628 dev_dbg(&priv->
i2c->dev,
"%s: failed=%d\n", __func__, ret);
632 static int rtl2832_get_frontend(
struct dvb_frontend *fe)
642 ret = rtl2832_rd_regs(priv, 0x3c, 3, buf, 2);
646 ret = rtl2832_rd_reg(priv, 0x51, 3, &buf[2]);
650 dev_dbg(&priv->
i2c->dev,
"%s: TPS=%*ph\n", __func__, 3, buf);
652 switch ((buf[0] >> 2) & 3) {
664 switch ((buf[2] >> 2) & 1) {
672 switch ((buf[2] >> 0) & 3) {
687 switch ((buf[0] >> 4) & 7) {
702 switch ((buf[1] >> 3) & 7) {
720 switch ((buf[1] >> 0) & 7) {
740 dev_dbg(&priv->
i2c->dev,
"%s: failed=%d\n", __func__, ret);
771 dev_dbg(&priv->
i2c->dev,
"%s: failed=%d\n", __func__, ret);
778 int ret, hierarchy, constellation;
781 #define CONSTELLATION_NUM 3
782 #define HIERARCHY_NUM 4
784 { 85387325, 85387325, 85387325, 85387325 },
785 { 86676178, 86676178, 87167949, 87795660 },
786 { 87659938, 87659938, 87885178, 88241743 },
791 ret = rtl2832_rd_reg(priv, 0x3c, 3, &tmp);
795 constellation = (tmp >> 2) & 0x03;
796 if (constellation > CONSTELLATION_NUM - 1)
799 hierarchy = (tmp >> 4) & 0x07;
800 if (hierarchy > HIERARCHY_NUM - 1)
803 ret = rtl2832_rd_regs(priv, 0x0c, 4, buf, 2);
807 tmp16 = buf[0] << 8 | buf[1];
810 *snr = (snr_constant[constellation][hierarchy] -
811 intlog10(tmp16)) / ((1 << 24) / 100);
817 dev_dbg(&priv->
i2c->dev,
"%s: failed=%d\n", __func__, ret);
827 ret = rtl2832_rd_regs(priv, 0x4e, 3, buf, 2);
831 *ber = buf[0] << 8 | buf[1];
835 dev_dbg(&priv->
i2c->dev,
"%s: failed=%d\n", __func__, ret);
869 ret = rtl2832_rd_reg(priv, 0x00, 0x0, &tmp);
875 priv->
fe.demodulator_priv =
priv;
882 dev_dbg(&i2c->
dev,
"%s: failed=%d\n", __func__, ret);
891 .name =
"Realtek RTL2832 (DVB-T)",
892 .frequency_min = 174000000,
893 .frequency_max = 862000000,
894 .frequency_stepsize = 166667,
912 .release = rtl2832_release,
914 .init = rtl2832_init,
915 .sleep = rtl2832_sleep,
919 .set_frontend = rtl2832_set_frontend,
920 .get_frontend = rtl2832_get_frontend,
922 .read_status = rtl2832_read_status,
923 .read_snr = rtl2832_read_snr,
924 .read_ber = rtl2832_read_ber,
926 .i2c_gate_ctrl = rtl2832_i2c_gate_ctrl,