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 #include "rtl2832_priv.h" 10 11 #define REG_MASK(b) (BIT(b + 1) - 1) 12 13 static const struct rtl2832_reg_entry registers[] = { 14 [DVBT_SOFT_RST] = {0x101, 2, 2}, 15 [DVBT_IIC_REPEAT] = {0x101, 3, 3}, 16 [DVBT_TR_WAIT_MIN_8K] = {0x188, 11, 2}, 17 [DVBT_RSD_BER_FAIL_VAL] = {0x18f, 15, 0}, 18 [DVBT_EN_BK_TRK] = {0x1a6, 7, 7}, 19 [DVBT_AD_EN_REG] = {0x008, 7, 7}, 20 [DVBT_AD_EN_REG1] = {0x008, 6, 6}, 21 [DVBT_EN_BBIN] = {0x1b1, 0, 0}, 22 [DVBT_MGD_THD0] = {0x195, 7, 0}, 23 [DVBT_MGD_THD1] = {0x196, 7, 0}, 24 [DVBT_MGD_THD2] = {0x197, 7, 0}, 25 [DVBT_MGD_THD3] = {0x198, 7, 0}, 26 [DVBT_MGD_THD4] = {0x199, 7, 0}, 27 [DVBT_MGD_THD5] = {0x19a, 7, 0}, 28 [DVBT_MGD_THD6] = {0x19b, 7, 0}, 29 [DVBT_MGD_THD7] = {0x19c, 7, 0}, 30 [DVBT_EN_CACQ_NOTCH] = {0x161, 4, 4}, 31 [DVBT_AD_AV_REF] = {0x009, 6, 0}, 32 [DVBT_REG_PI] = {0x00a, 2, 0}, 33 [DVBT_PIP_ON] = {0x021, 3, 3}, 34 [DVBT_SCALE1_B92] = {0x292, 7, 0}, 35 [DVBT_SCALE1_B93] = {0x293, 7, 0}, 36 [DVBT_SCALE1_BA7] = {0x2a7, 7, 0}, 37 [DVBT_SCALE1_BA9] = {0x2a9, 7, 0}, 38 [DVBT_SCALE1_BAA] = {0x2aa, 7, 0}, 39 [DVBT_SCALE1_BAB] = {0x2ab, 7, 0}, 40 [DVBT_SCALE1_BAC] = {0x2ac, 7, 0}, 41 [DVBT_SCALE1_BB0] = {0x2b0, 7, 0}, 42 [DVBT_SCALE1_BB1] = {0x2b1, 7, 0}, 43 [DVBT_KB_P1] = {0x164, 3, 1}, 44 [DVBT_KB_P2] = {0x164, 6, 4}, 45 [DVBT_KB_P3] = {0x165, 2, 0}, 46 [DVBT_OPT_ADC_IQ] = {0x006, 5, 4}, 47 [DVBT_AD_AVI] = {0x009, 1, 0}, 48 [DVBT_AD_AVQ] = {0x009, 3, 2}, 49 [DVBT_K1_CR_STEP12] = {0x2ad, 9, 4}, 50 [DVBT_TRK_KS_P2] = {0x16f, 2, 0}, 51 [DVBT_TRK_KS_I2] = {0x170, 5, 3}, 52 [DVBT_TR_THD_SET2] = {0x172, 3, 0}, 53 [DVBT_TRK_KC_P2] = {0x173, 5, 3}, 54 [DVBT_TRK_KC_I2] = {0x175, 2, 0}, 55 [DVBT_CR_THD_SET2] = {0x176, 7, 6}, 56 [DVBT_PSET_IFFREQ] = {0x119, 21, 0}, 57 [DVBT_SPEC_INV] = {0x115, 0, 0}, 58 [DVBT_RSAMP_RATIO] = {0x19f, 27, 2}, 59 [DVBT_CFREQ_OFF_RATIO] = {0x19d, 23, 4}, 60 [DVBT_FSM_STAGE] = {0x351, 6, 3}, 61 [DVBT_RX_CONSTEL] = {0x33c, 3, 2}, 62 [DVBT_RX_HIER] = {0x33c, 6, 4}, 63 [DVBT_RX_C_RATE_LP] = {0x33d, 2, 0}, 64 [DVBT_RX_C_RATE_HP] = {0x33d, 5, 3}, 65 [DVBT_GI_IDX] = {0x351, 1, 0}, 66 [DVBT_FFT_MODE_IDX] = {0x351, 2, 2}, 67 [DVBT_RSD_BER_EST] = {0x34e, 15, 0}, 68 [DVBT_CE_EST_EVM] = {0x40c, 15, 0}, 69 [DVBT_RF_AGC_VAL] = {0x35b, 13, 0}, 70 [DVBT_IF_AGC_VAL] = {0x359, 13, 0}, 71 [DVBT_DAGC_VAL] = {0x305, 7, 0}, 72 [DVBT_SFREQ_OFF] = {0x318, 13, 0}, 73 [DVBT_CFREQ_OFF] = {0x35f, 17, 0}, 74 [DVBT_POLAR_RF_AGC] = {0x00e, 1, 1}, 75 [DVBT_POLAR_IF_AGC] = {0x00e, 0, 0}, 76 [DVBT_AAGC_HOLD] = {0x104, 5, 5}, 77 [DVBT_EN_RF_AGC] = {0x104, 6, 6}, 78 [DVBT_EN_IF_AGC] = {0x104, 7, 7}, 79 [DVBT_IF_AGC_MIN] = {0x108, 7, 0}, 80 [DVBT_IF_AGC_MAX] = {0x109, 7, 0}, 81 [DVBT_RF_AGC_MIN] = {0x10a, 7, 0}, 82 [DVBT_RF_AGC_MAX] = {0x10b, 7, 0}, 83 [DVBT_IF_AGC_MAN] = {0x10c, 6, 6}, 84 [DVBT_IF_AGC_MAN_VAL] = {0x10c, 13, 0}, 85 [DVBT_RF_AGC_MAN] = {0x10e, 6, 6}, 86 [DVBT_RF_AGC_MAN_VAL] = {0x10e, 13, 0}, 87 [DVBT_DAGC_TRG_VAL] = {0x112, 7, 0}, 88 [DVBT_AGC_TARG_VAL_0] = {0x102, 0, 0}, 89 [DVBT_AGC_TARG_VAL_8_1] = {0x103, 7, 0}, 90 [DVBT_AAGC_LOOP_GAIN] = {0x1c7, 5, 1}, 91 [DVBT_LOOP_GAIN2_3_0] = {0x104, 4, 1}, 92 [DVBT_LOOP_GAIN2_4] = {0x105, 7, 7}, 93 [DVBT_LOOP_GAIN3] = {0x1c8, 4, 0}, 94 [DVBT_VTOP1] = {0x106, 5, 0}, 95 [DVBT_VTOP2] = {0x1c9, 5, 0}, 96 [DVBT_VTOP3] = {0x1ca, 5, 0}, 97 [DVBT_KRF1] = {0x1cb, 7, 0}, 98 [DVBT_KRF2] = {0x107, 7, 0}, 99 [DVBT_KRF3] = {0x1cd, 7, 0}, 100 [DVBT_KRF4] = {0x1ce, 7, 0}, 101 [DVBT_EN_GI_PGA] = {0x1e5, 0, 0}, 102 [DVBT_THD_LOCK_UP] = {0x1d9, 8, 0}, 103 [DVBT_THD_LOCK_DW] = {0x1db, 8, 0}, 104 [DVBT_THD_UP1] = {0x1dd, 7, 0}, 105 [DVBT_THD_DW1] = {0x1de, 7, 0}, 106 [DVBT_INTER_CNT_LEN] = {0x1d8, 3, 0}, 107 [DVBT_GI_PGA_STATE] = {0x1e6, 3, 3}, 108 [DVBT_EN_AGC_PGA] = {0x1d7, 0, 0}, 109 [DVBT_CKOUTPAR] = {0x17b, 5, 5}, 110 [DVBT_CKOUT_PWR] = {0x17b, 6, 6}, 111 [DVBT_SYNC_DUR] = {0x17b, 7, 7}, 112 [DVBT_ERR_DUR] = {0x17c, 0, 0}, 113 [DVBT_SYNC_LVL] = {0x17c, 1, 1}, 114 [DVBT_ERR_LVL] = {0x17c, 2, 2}, 115 [DVBT_VAL_LVL] = {0x17c, 3, 3}, 116 [DVBT_SERIAL] = {0x17c, 4, 4}, 117 [DVBT_SER_LSB] = {0x17c, 5, 5}, 118 [DVBT_CDIV_PH0] = {0x17d, 3, 0}, 119 [DVBT_CDIV_PH1] = {0x17d, 7, 4}, 120 [DVBT_MPEG_IO_OPT_2_2] = {0x006, 7, 7}, 121 [DVBT_MPEG_IO_OPT_1_0] = {0x007, 7, 6}, 122 [DVBT_CKOUTPAR_PIP] = {0x0b7, 4, 4}, 123 [DVBT_CKOUT_PWR_PIP] = {0x0b7, 3, 3}, 124 [DVBT_SYNC_LVL_PIP] = {0x0b7, 2, 2}, 125 [DVBT_ERR_LVL_PIP] = {0x0b7, 1, 1}, 126 [DVBT_VAL_LVL_PIP] = {0x0b7, 0, 0}, 127 [DVBT_CKOUTPAR_PID] = {0x0b9, 4, 4}, 128 [DVBT_CKOUT_PWR_PID] = {0x0b9, 3, 3}, 129 [DVBT_SYNC_LVL_PID] = {0x0b9, 2, 2}, 130 [DVBT_ERR_LVL_PID] = {0x0b9, 1, 1}, 131 [DVBT_VAL_LVL_PID] = {0x0b9, 0, 0}, 132 [DVBT_SM_PASS] = {0x193, 11, 0}, 133 [DVBT_AD7_SETTING] = {0x011, 15, 0}, 134 [DVBT_RSSI_R] = {0x301, 6, 0}, 135 [DVBT_ACI_DET_IND] = {0x312, 0, 0}, 136 [DVBT_REG_MON] = {0x00d, 1, 0}, 137 [DVBT_REG_MONSEL] = {0x00d, 2, 2}, 138 [DVBT_REG_GPE] = {0x00d, 7, 7}, 139 [DVBT_REG_GPO] = {0x010, 0, 0}, 140 [DVBT_REG_4MSEL] = {0x013, 0, 0}, 141 }; 142 143 static int rtl2832_rd_demod_reg(struct rtl2832_dev *dev, int reg, u32 *val) 144 { 145 struct i2c_client *client = dev->client; 146 int ret, i; 147 u16 reg_start_addr; 148 u8 msb, lsb, reading[4], len; 149 u32 reading_tmp, mask; 150 151 reg_start_addr = registers[reg].start_address; 152 msb = registers[reg].msb; 153 lsb = registers[reg].lsb; 154 len = (msb >> 3) + 1; 155 mask = REG_MASK(msb - lsb); 156 157 ret = regmap_bulk_read(dev->regmap, reg_start_addr, reading, len); 158 if (ret) 159 goto err; 160 161 reading_tmp = 0; 162 for (i = 0; i < len; i++) 163 reading_tmp |= reading[i] << ((len - 1 - i) * 8); 164 165 *val = (reading_tmp >> lsb) & mask; 166 167 return 0; 168 err: 169 dev_dbg(&client->dev, "failed=%d\n", ret); 170 return ret; 171 } 172 173 static int rtl2832_wr_demod_reg(struct rtl2832_dev *dev, int reg, u32 val) 174 { 175 struct i2c_client *client = dev->client; 176 int ret, i; 177 u16 reg_start_addr; 178 u8 msb, lsb, reading[4], writing[4], len; 179 u32 reading_tmp, writing_tmp, mask; 180 181 reg_start_addr = registers[reg].start_address; 182 msb = registers[reg].msb; 183 lsb = registers[reg].lsb; 184 len = (msb >> 3) + 1; 185 mask = REG_MASK(msb - lsb); 186 187 ret = regmap_bulk_read(dev->regmap, reg_start_addr, reading, len); 188 if (ret) 189 goto err; 190 191 reading_tmp = 0; 192 for (i = 0; i < len; i++) 193 reading_tmp |= reading[i] << ((len - 1 - i) * 8); 194 195 writing_tmp = reading_tmp & ~(mask << lsb); 196 writing_tmp |= ((val & mask) << lsb); 197 198 for (i = 0; i < len; i++) 199 writing[i] = (writing_tmp >> ((len - 1 - i) * 8)) & 0xff; 200 201 ret = regmap_bulk_write(dev->regmap, reg_start_addr, writing, len); 202 if (ret) 203 goto err; 204 205 return 0; 206 err: 207 dev_dbg(&client->dev, "failed=%d\n", ret); 208 return ret; 209 } 210 211 static int rtl2832_set_if(struct dvb_frontend *fe, u32 if_freq) 212 { 213 struct rtl2832_dev *dev = fe->demodulator_priv; 214 struct i2c_client *client = dev->client; 215 int ret; 216 u64 pset_iffreq; 217 u8 en_bbin = (if_freq == 0 ? 0x1 : 0x0); 218 219 /* 220 * PSET_IFFREQ = - floor((IfFreqHz % CrystalFreqHz) * pow(2, 22) 221 * / CrystalFreqHz) 222 */ 223 pset_iffreq = if_freq % dev->pdata->clk; 224 pset_iffreq *= 0x400000; 225 pset_iffreq = div_u64(pset_iffreq, dev->pdata->clk); 226 pset_iffreq = -pset_iffreq; 227 pset_iffreq = pset_iffreq & 0x3fffff; 228 dev_dbg(&client->dev, "if_frequency=%d pset_iffreq=%08x\n", 229 if_freq, (unsigned)pset_iffreq); 230 231 ret = rtl2832_wr_demod_reg(dev, DVBT_EN_BBIN, en_bbin); 232 if (ret) 233 goto err; 234 235 ret = rtl2832_wr_demod_reg(dev, DVBT_PSET_IFFREQ, pset_iffreq); 236 if (ret) 237 goto err; 238 239 return 0; 240 err: 241 dev_dbg(&client->dev, "failed=%d\n", ret); 242 return ret; 243 } 244 245 static int rtl2832_init(struct dvb_frontend *fe) 246 { 247 struct rtl2832_dev *dev = fe->demodulator_priv; 248 struct i2c_client *client = dev->client; 249 struct dtv_frontend_properties *c = &dev->fe.dtv_property_cache; 250 const struct rtl2832_reg_value *init; 251 int i, ret, len; 252 /* initialization values for the demodulator registers */ 253 struct rtl2832_reg_value rtl2832_initial_regs[] = { 254 {DVBT_AD_EN_REG, 0x1}, 255 {DVBT_AD_EN_REG1, 0x1}, 256 {DVBT_RSD_BER_FAIL_VAL, 0x2800}, 257 {DVBT_MGD_THD0, 0x10}, 258 {DVBT_MGD_THD1, 0x20}, 259 {DVBT_MGD_THD2, 0x20}, 260 {DVBT_MGD_THD3, 0x40}, 261 {DVBT_MGD_THD4, 0x22}, 262 {DVBT_MGD_THD5, 0x32}, 263 {DVBT_MGD_THD6, 0x37}, 264 {DVBT_MGD_THD7, 0x39}, 265 {DVBT_EN_BK_TRK, 0x0}, 266 {DVBT_EN_CACQ_NOTCH, 0x0}, 267 {DVBT_AD_AV_REF, 0x2a}, 268 {DVBT_REG_PI, 0x6}, 269 {DVBT_PIP_ON, 0x0}, 270 {DVBT_CDIV_PH0, 0x8}, 271 {DVBT_CDIV_PH1, 0x8}, 272 {DVBT_SCALE1_B92, 0x4}, 273 {DVBT_SCALE1_B93, 0xb0}, 274 {DVBT_SCALE1_BA7, 0x78}, 275 {DVBT_SCALE1_BA9, 0x28}, 276 {DVBT_SCALE1_BAA, 0x59}, 277 {DVBT_SCALE1_BAB, 0x83}, 278 {DVBT_SCALE1_BAC, 0xd4}, 279 {DVBT_SCALE1_BB0, 0x65}, 280 {DVBT_SCALE1_BB1, 0x43}, 281 {DVBT_KB_P1, 0x1}, 282 {DVBT_KB_P2, 0x4}, 283 {DVBT_KB_P3, 0x7}, 284 {DVBT_K1_CR_STEP12, 0xa}, 285 {DVBT_REG_GPE, 0x1}, 286 {DVBT_SERIAL, 0x0}, 287 {DVBT_CDIV_PH0, 0x9}, 288 {DVBT_CDIV_PH1, 0x9}, 289 {DVBT_MPEG_IO_OPT_2_2, 0x0}, 290 {DVBT_MPEG_IO_OPT_1_0, 0x0}, 291 {DVBT_TRK_KS_P2, 0x4}, 292 {DVBT_TRK_KS_I2, 0x7}, 293 {DVBT_TR_THD_SET2, 0x6}, 294 {DVBT_TRK_KC_I2, 0x5}, 295 {DVBT_CR_THD_SET2, 0x1}, 296 }; 297 298 dev_dbg(&client->dev, "\n"); 299 300 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0); 301 if (ret) 302 goto err; 303 304 for (i = 0; i < ARRAY_SIZE(rtl2832_initial_regs); i++) { 305 ret = rtl2832_wr_demod_reg(dev, rtl2832_initial_regs[i].reg, 306 rtl2832_initial_regs[i].value); 307 if (ret) 308 goto err; 309 } 310 311 /* load tuner specific settings */ 312 dev_dbg(&client->dev, "load settings for tuner=%02x\n", 313 dev->pdata->tuner); 314 switch (dev->pdata->tuner) { 315 case RTL2832_TUNER_FC2580: 316 len = ARRAY_SIZE(rtl2832_tuner_init_fc2580); 317 init = rtl2832_tuner_init_fc2580; 318 break; 319 case RTL2832_TUNER_FC0012: 320 case RTL2832_TUNER_FC0013: 321 len = ARRAY_SIZE(rtl2832_tuner_init_fc0012); 322 init = rtl2832_tuner_init_fc0012; 323 break; 324 case RTL2832_TUNER_TUA9001: 325 len = ARRAY_SIZE(rtl2832_tuner_init_tua9001); 326 init = rtl2832_tuner_init_tua9001; 327 break; 328 case RTL2832_TUNER_E4000: 329 len = ARRAY_SIZE(rtl2832_tuner_init_e4000); 330 init = rtl2832_tuner_init_e4000; 331 break; 332 case RTL2832_TUNER_R820T: 333 case RTL2832_TUNER_R828D: 334 len = ARRAY_SIZE(rtl2832_tuner_init_r820t); 335 init = rtl2832_tuner_init_r820t; 336 break; 337 case RTL2832_TUNER_SI2157: 338 len = ARRAY_SIZE(rtl2832_tuner_init_si2157); 339 init = rtl2832_tuner_init_si2157; 340 break; 341 default: 342 ret = -EINVAL; 343 goto err; 344 } 345 346 for (i = 0; i < len; i++) { 347 ret = rtl2832_wr_demod_reg(dev, init[i].reg, init[i].value); 348 if (ret) 349 goto err; 350 } 351 352 /* init stats here in order signal app which stats are supported */ 353 c->strength.len = 1; 354 c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE; 355 c->cnr.len = 1; 356 c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE; 357 c->post_bit_error.len = 1; 358 c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE; 359 c->post_bit_count.len = 1; 360 c->post_bit_count.stat[0].scale = FE_SCALE_NOT_AVAILABLE; 361 dev->sleeping = false; 362 363 return 0; 364 err: 365 dev_dbg(&client->dev, "failed=%d\n", ret); 366 return ret; 367 } 368 369 static int rtl2832_sleep(struct dvb_frontend *fe) 370 { 371 struct rtl2832_dev *dev = fe->demodulator_priv; 372 struct i2c_client *client = dev->client; 373 int ret; 374 375 dev_dbg(&client->dev, "\n"); 376 377 dev->sleeping = true; 378 dev->fe_status = 0; 379 380 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1); 381 if (ret) 382 goto err; 383 384 return 0; 385 err: 386 dev_dbg(&client->dev, "failed=%d\n", ret); 387 return ret; 388 } 389 390 static int rtl2832_get_tune_settings(struct dvb_frontend *fe, 391 struct dvb_frontend_tune_settings *s) 392 { 393 struct rtl2832_dev *dev = fe->demodulator_priv; 394 struct i2c_client *client = dev->client; 395 396 dev_dbg(&client->dev, "\n"); 397 s->min_delay_ms = 1000; 398 s->step_size = fe->ops.info.frequency_stepsize_hz * 2; 399 s->max_drift = (fe->ops.info.frequency_stepsize_hz * 2) + 1; 400 return 0; 401 } 402 403 static int rtl2832_set_frontend(struct dvb_frontend *fe) 404 { 405 struct rtl2832_dev *dev = fe->demodulator_priv; 406 struct i2c_client *client = dev->client; 407 struct dtv_frontend_properties *c = &fe->dtv_property_cache; 408 int ret, i, j; 409 u64 bw_mode, num, num2; 410 u32 resamp_ratio, cfreq_off_ratio; 411 static u8 bw_params[3][32] = { 412 /* 6 MHz bandwidth */ 413 { 414 0xf5, 0xff, 0x15, 0x38, 0x5d, 0x6d, 0x52, 0x07, 0xfa, 0x2f, 415 0x53, 0xf5, 0x3f, 0xca, 0x0b, 0x91, 0xea, 0x30, 0x63, 0xb2, 416 0x13, 0xda, 0x0b, 0xc4, 0x18, 0x7e, 0x16, 0x66, 0x08, 0x67, 417 0x19, 0xe0, 418 }, 419 420 /* 7 MHz bandwidth */ 421 { 422 0xe7, 0xcc, 0xb5, 0xba, 0xe8, 0x2f, 0x67, 0x61, 0x00, 0xaf, 423 0x86, 0xf2, 0xbf, 0x59, 0x04, 0x11, 0xb6, 0x33, 0xa4, 0x30, 424 0x15, 0x10, 0x0a, 0x42, 0x18, 0xf8, 0x17, 0xd9, 0x07, 0x22, 425 0x19, 0x10, 426 }, 427 428 /* 8 MHz bandwidth */ 429 { 430 0x09, 0xf6, 0xd2, 0xa7, 0x9a, 0xc9, 0x27, 0x77, 0x06, 0xbf, 431 0xec, 0xf4, 0x4f, 0x0b, 0xfc, 0x01, 0x63, 0x35, 0x54, 0xa7, 432 0x16, 0x66, 0x08, 0xb4, 0x19, 0x6e, 0x19, 0x65, 0x05, 0xc8, 433 0x19, 0xe0, 434 }, 435 }; 436 437 dev_dbg(&client->dev, "frequency=%u bandwidth_hz=%u inversion=%u\n", 438 c->frequency, c->bandwidth_hz, c->inversion); 439 440 /* program tuner */ 441 if (fe->ops.tuner_ops.set_params) 442 fe->ops.tuner_ops.set_params(fe); 443 444 /* If the frontend has get_if_frequency(), use it */ 445 if (fe->ops.tuner_ops.get_if_frequency) { 446 u32 if_freq; 447 448 ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq); 449 if (ret) 450 goto err; 451 452 ret = rtl2832_set_if(fe, if_freq); 453 if (ret) 454 goto err; 455 } 456 457 switch (c->bandwidth_hz) { 458 case 6000000: 459 i = 0; 460 bw_mode = 48000000; 461 break; 462 case 7000000: 463 i = 1; 464 bw_mode = 56000000; 465 break; 466 case 8000000: 467 i = 2; 468 bw_mode = 64000000; 469 break; 470 default: 471 dev_err(&client->dev, "invalid bandwidth_hz %u\n", 472 c->bandwidth_hz); 473 ret = -EINVAL; 474 goto err; 475 } 476 477 for (j = 0; j < sizeof(bw_params[0]); j++) { 478 ret = regmap_bulk_write(dev->regmap, 479 0x11c + j, &bw_params[i][j], 1); 480 if (ret) 481 goto err; 482 } 483 484 /* calculate and set resample ratio 485 * RSAMP_RATIO = floor(CrystalFreqHz * 7 * pow(2, 22) 486 * / ConstWithBandwidthMode) 487 */ 488 num = dev->pdata->clk * 7ULL; 489 num *= 0x400000; 490 num = div_u64(num, bw_mode); 491 resamp_ratio = num & 0x3ffffff; 492 ret = rtl2832_wr_demod_reg(dev, DVBT_RSAMP_RATIO, resamp_ratio); 493 if (ret) 494 goto err; 495 496 /* calculate and set cfreq off ratio 497 * CFREQ_OFF_RATIO = - floor(ConstWithBandwidthMode * pow(2, 20) 498 * / (CrystalFreqHz * 7)) 499 */ 500 num = bw_mode << 20; 501 num2 = dev->pdata->clk * 7ULL; 502 num = div_u64(num, num2); 503 num = -num; 504 cfreq_off_ratio = num & 0xfffff; 505 ret = rtl2832_wr_demod_reg(dev, DVBT_CFREQ_OFF_RATIO, cfreq_off_ratio); 506 if (ret) 507 goto err; 508 509 /* soft reset */ 510 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1); 511 if (ret) 512 goto err; 513 514 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0); 515 if (ret) 516 goto err; 517 518 return 0; 519 err: 520 dev_dbg(&client->dev, "failed=%d\n", ret); 521 return ret; 522 } 523 524 static int rtl2832_get_frontend(struct dvb_frontend *fe, 525 struct dtv_frontend_properties *c) 526 { 527 struct rtl2832_dev *dev = fe->demodulator_priv; 528 struct i2c_client *client = dev->client; 529 int ret; 530 u8 buf[3]; 531 532 if (dev->sleeping) 533 return 0; 534 535 ret = regmap_bulk_read(dev->regmap, 0x33c, buf, 2); 536 if (ret) 537 goto err; 538 539 ret = regmap_bulk_read(dev->regmap, 0x351, &buf[2], 1); 540 if (ret) 541 goto err; 542 543 dev_dbg(&client->dev, "TPS=%*ph\n", 3, buf); 544 545 switch ((buf[0] >> 2) & 3) { 546 case 0: 547 c->modulation = QPSK; 548 break; 549 case 1: 550 c->modulation = QAM_16; 551 break; 552 case 2: 553 c->modulation = QAM_64; 554 break; 555 } 556 557 switch ((buf[2] >> 2) & 1) { 558 case 0: 559 c->transmission_mode = TRANSMISSION_MODE_2K; 560 break; 561 case 1: 562 c->transmission_mode = TRANSMISSION_MODE_8K; 563 } 564 565 switch ((buf[2] >> 0) & 3) { 566 case 0: 567 c->guard_interval = GUARD_INTERVAL_1_32; 568 break; 569 case 1: 570 c->guard_interval = GUARD_INTERVAL_1_16; 571 break; 572 case 2: 573 c->guard_interval = GUARD_INTERVAL_1_8; 574 break; 575 case 3: 576 c->guard_interval = GUARD_INTERVAL_1_4; 577 break; 578 } 579 580 switch ((buf[0] >> 4) & 7) { 581 case 0: 582 c->hierarchy = HIERARCHY_NONE; 583 break; 584 case 1: 585 c->hierarchy = HIERARCHY_1; 586 break; 587 case 2: 588 c->hierarchy = HIERARCHY_2; 589 break; 590 case 3: 591 c->hierarchy = HIERARCHY_4; 592 break; 593 } 594 595 switch ((buf[1] >> 3) & 7) { 596 case 0: 597 c->code_rate_HP = FEC_1_2; 598 break; 599 case 1: 600 c->code_rate_HP = FEC_2_3; 601 break; 602 case 2: 603 c->code_rate_HP = FEC_3_4; 604 break; 605 case 3: 606 c->code_rate_HP = FEC_5_6; 607 break; 608 case 4: 609 c->code_rate_HP = FEC_7_8; 610 break; 611 } 612 613 switch ((buf[1] >> 0) & 7) { 614 case 0: 615 c->code_rate_LP = FEC_1_2; 616 break; 617 case 1: 618 c->code_rate_LP = FEC_2_3; 619 break; 620 case 2: 621 c->code_rate_LP = FEC_3_4; 622 break; 623 case 3: 624 c->code_rate_LP = FEC_5_6; 625 break; 626 case 4: 627 c->code_rate_LP = FEC_7_8; 628 break; 629 } 630 631 return 0; 632 err: 633 dev_dbg(&client->dev, "failed=%d\n", ret); 634 return ret; 635 } 636 637 static int rtl2832_read_status(struct dvb_frontend *fe, enum fe_status *status) 638 { 639 struct rtl2832_dev *dev = fe->demodulator_priv; 640 struct i2c_client *client = dev->client; 641 struct dtv_frontend_properties *c = &fe->dtv_property_cache; 642 int ret; 643 u32 tmp; 644 u8 u8tmp, buf[2]; 645 u16 u16tmp; 646 647 dev_dbg(&client->dev, "\n"); 648 649 *status = 0; 650 if (dev->sleeping) 651 return 0; 652 653 ret = rtl2832_rd_demod_reg(dev, DVBT_FSM_STAGE, &tmp); 654 if (ret) 655 goto err; 656 657 if (tmp == 11) { 658 *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER | 659 FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK; 660 } else if (tmp == 10) { 661 *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER | 662 FE_HAS_VITERBI; 663 } 664 665 dev->fe_status = *status; 666 667 /* signal strength */ 668 if (dev->fe_status & FE_HAS_SIGNAL) { 669 /* read digital AGC */ 670 ret = regmap_bulk_read(dev->regmap, 0x305, &u8tmp, 1); 671 if (ret) 672 goto err; 673 674 dev_dbg(&client->dev, "digital agc=%02x", u8tmp); 675 676 u8tmp = ~u8tmp; 677 u16tmp = u8tmp << 8 | u8tmp << 0; 678 679 c->strength.stat[0].scale = FE_SCALE_RELATIVE; 680 c->strength.stat[0].uvalue = u16tmp; 681 } else { 682 c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE; 683 } 684 685 /* CNR */ 686 if (dev->fe_status & FE_HAS_VITERBI) { 687 unsigned hierarchy, constellation; 688 #define CONSTELLATION_NUM 3 689 #define HIERARCHY_NUM 4 690 static const u32 constant[CONSTELLATION_NUM][HIERARCHY_NUM] = { 691 {85387325, 85387325, 85387325, 85387325}, 692 {86676178, 86676178, 87167949, 87795660}, 693 {87659938, 87659938, 87885178, 88241743}, 694 }; 695 696 ret = regmap_bulk_read(dev->regmap, 0x33c, &u8tmp, 1); 697 if (ret) 698 goto err; 699 700 constellation = (u8tmp >> 2) & 0x03; /* [3:2] */ 701 if (constellation > CONSTELLATION_NUM - 1) 702 goto err; 703 704 hierarchy = (u8tmp >> 4) & 0x07; /* [6:4] */ 705 if (hierarchy > HIERARCHY_NUM - 1) 706 goto err; 707 708 ret = regmap_bulk_read(dev->regmap, 0x40c, buf, 2); 709 if (ret) 710 goto err; 711 712 u16tmp = buf[0] << 8 | buf[1] << 0; 713 if (u16tmp) 714 tmp = (constant[constellation][hierarchy] - 715 intlog10(u16tmp)) / ((1 << 24) / 10000); 716 else 717 tmp = 0; 718 719 dev_dbg(&client->dev, "cnr raw=%u\n", u16tmp); 720 721 c->cnr.stat[0].scale = FE_SCALE_DECIBEL; 722 c->cnr.stat[0].svalue = tmp; 723 } else { 724 c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE; 725 } 726 727 /* BER */ 728 if (dev->fe_status & FE_HAS_LOCK) { 729 ret = regmap_bulk_read(dev->regmap, 0x34e, buf, 2); 730 if (ret) 731 goto err; 732 733 u16tmp = buf[0] << 8 | buf[1] << 0; 734 dev->post_bit_error += u16tmp; 735 dev->post_bit_count += 1000000; 736 737 dev_dbg(&client->dev, "ber errors=%u total=1000000\n", u16tmp); 738 739 c->post_bit_error.stat[0].scale = FE_SCALE_COUNTER; 740 c->post_bit_error.stat[0].uvalue = dev->post_bit_error; 741 c->post_bit_count.stat[0].scale = FE_SCALE_COUNTER; 742 c->post_bit_count.stat[0].uvalue = dev->post_bit_count; 743 } else { 744 c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE; 745 c->post_bit_count.stat[0].scale = FE_SCALE_NOT_AVAILABLE; 746 } 747 748 return 0; 749 err: 750 dev_dbg(&client->dev, "failed=%d\n", ret); 751 return ret; 752 } 753 754 static int rtl2832_read_snr(struct dvb_frontend *fe, u16 *snr) 755 { 756 struct dtv_frontend_properties *c = &fe->dtv_property_cache; 757 758 /* report SNR in resolution of 0.1 dB */ 759 if (c->cnr.stat[0].scale == FE_SCALE_DECIBEL) 760 *snr = div_s64(c->cnr.stat[0].svalue, 100); 761 else 762 *snr = 0; 763 764 return 0; 765 } 766 767 static int rtl2832_read_ber(struct dvb_frontend *fe, u32 *ber) 768 { 769 struct rtl2832_dev *dev = fe->demodulator_priv; 770 771 *ber = (dev->post_bit_error - dev->post_bit_error_prev); 772 dev->post_bit_error_prev = dev->post_bit_error; 773 774 return 0; 775 } 776 777 /* 778 * I2C gate/mux/repeater logic 779 * There is delay mechanism to avoid unneeded I2C gate open / close. Gate close 780 * is delayed here a little bit in order to see if there is sequence of I2C 781 * messages sent to same I2C bus. 782 */ 783 static void rtl2832_i2c_gate_work(struct work_struct *work) 784 { 785 struct rtl2832_dev *dev = container_of(work, struct rtl2832_dev, i2c_gate_work.work); 786 struct i2c_client *client = dev->client; 787 int ret; 788 789 /* close gate */ 790 ret = regmap_update_bits(dev->regmap, 0x101, 0x08, 0x00); 791 if (ret) 792 goto err; 793 794 return; 795 err: 796 dev_dbg(&client->dev, "failed=%d\n", ret); 797 } 798 799 static int rtl2832_select(struct i2c_mux_core *muxc, u32 chan_id) 800 { 801 struct rtl2832_dev *dev = i2c_mux_priv(muxc); 802 struct i2c_client *client = dev->client; 803 int ret; 804 805 /* terminate possible gate closing */ 806 cancel_delayed_work(&dev->i2c_gate_work); 807 808 /* open gate */ 809 ret = regmap_update_bits(dev->regmap, 0x101, 0x08, 0x08); 810 if (ret) 811 goto err; 812 813 return 0; 814 err: 815 dev_dbg(&client->dev, "failed=%d\n", ret); 816 return ret; 817 } 818 819 static int rtl2832_deselect(struct i2c_mux_core *muxc, u32 chan_id) 820 { 821 struct rtl2832_dev *dev = i2c_mux_priv(muxc); 822 823 schedule_delayed_work(&dev->i2c_gate_work, usecs_to_jiffies(100)); 824 return 0; 825 } 826 827 static const struct dvb_frontend_ops rtl2832_ops = { 828 .delsys = { SYS_DVBT }, 829 .info = { 830 .name = "Realtek RTL2832 (DVB-T)", 831 .frequency_min_hz = 174 * MHz, 832 .frequency_max_hz = 862 * MHz, 833 .frequency_stepsize_hz = 166667, 834 .caps = FE_CAN_FEC_1_2 | 835 FE_CAN_FEC_2_3 | 836 FE_CAN_FEC_3_4 | 837 FE_CAN_FEC_5_6 | 838 FE_CAN_FEC_7_8 | 839 FE_CAN_FEC_AUTO | 840 FE_CAN_QPSK | 841 FE_CAN_QAM_16 | 842 FE_CAN_QAM_64 | 843 FE_CAN_QAM_AUTO | 844 FE_CAN_TRANSMISSION_MODE_AUTO | 845 FE_CAN_GUARD_INTERVAL_AUTO | 846 FE_CAN_HIERARCHY_AUTO | 847 FE_CAN_RECOVER | 848 FE_CAN_MUTE_TS 849 }, 850 851 .init = rtl2832_init, 852 .sleep = rtl2832_sleep, 853 854 .get_tune_settings = rtl2832_get_tune_settings, 855 856 .set_frontend = rtl2832_set_frontend, 857 .get_frontend = rtl2832_get_frontend, 858 859 .read_status = rtl2832_read_status, 860 .read_snr = rtl2832_read_snr, 861 .read_ber = rtl2832_read_ber, 862 }; 863 864 static bool rtl2832_volatile_reg(struct device *dev, unsigned int reg) 865 { 866 switch (reg) { 867 case 0x305: 868 case 0x33c: 869 case 0x34e: 870 case 0x351: 871 case 0x40c ... 0x40d: 872 return true; 873 default: 874 break; 875 } 876 877 return false; 878 } 879 880 static struct dvb_frontend *rtl2832_get_dvb_frontend(struct i2c_client *client) 881 { 882 struct rtl2832_dev *dev = i2c_get_clientdata(client); 883 884 dev_dbg(&client->dev, "\n"); 885 return &dev->fe; 886 } 887 888 static struct i2c_adapter *rtl2832_get_i2c_adapter(struct i2c_client *client) 889 { 890 struct rtl2832_dev *dev = i2c_get_clientdata(client); 891 892 dev_dbg(&client->dev, "\n"); 893 return dev->muxc->adapter[0]; 894 } 895 896 static int rtl2832_slave_ts_ctrl(struct i2c_client *client, bool enable) 897 { 898 struct rtl2832_dev *dev = i2c_get_clientdata(client); 899 int ret; 900 901 dev_dbg(&client->dev, "enable=%d\n", enable); 902 903 if (enable) { 904 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0); 905 if (ret) 906 goto err; 907 ret = regmap_bulk_write(dev->regmap, 0x10c, "\x5f\xff", 2); 908 if (ret) 909 goto err; 910 ret = rtl2832_wr_demod_reg(dev, DVBT_PIP_ON, 0x1); 911 if (ret) 912 goto err; 913 ret = regmap_bulk_write(dev->regmap, 0x0bc, "\x18", 1); 914 if (ret) 915 goto err; 916 ret = regmap_bulk_write(dev->regmap, 0x192, "\x7f\xf7\xff", 3); 917 if (ret) 918 goto err; 919 } else { 920 ret = regmap_bulk_write(dev->regmap, 0x192, "\x00\x0f\xff", 3); 921 if (ret) 922 goto err; 923 ret = regmap_bulk_write(dev->regmap, 0x0bc, "\x08", 1); 924 if (ret) 925 goto err; 926 ret = rtl2832_wr_demod_reg(dev, DVBT_PIP_ON, 0x0); 927 if (ret) 928 goto err; 929 ret = regmap_bulk_write(dev->regmap, 0x10c, "\x00\x00", 2); 930 if (ret) 931 goto err; 932 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1); 933 if (ret) 934 goto err; 935 } 936 937 dev->slave_ts = enable; 938 939 return 0; 940 err: 941 dev_dbg(&client->dev, "failed=%d\n", ret); 942 return ret; 943 } 944 945 static int rtl2832_pid_filter_ctrl(struct dvb_frontend *fe, int onoff) 946 { 947 struct rtl2832_dev *dev = fe->demodulator_priv; 948 struct i2c_client *client = dev->client; 949 int ret; 950 u8 u8tmp; 951 952 dev_dbg(&client->dev, "onoff=%d, slave_ts=%d\n", onoff, dev->slave_ts); 953 954 /* enable / disable PID filter */ 955 if (onoff) 956 u8tmp = 0x80; 957 else 958 u8tmp = 0x00; 959 960 if (dev->slave_ts) 961 ret = regmap_update_bits(dev->regmap, 0x021, 0xc0, u8tmp); 962 else 963 ret = regmap_update_bits(dev->regmap, 0x061, 0xc0, u8tmp); 964 if (ret) 965 goto err; 966 967 return 0; 968 err: 969 dev_dbg(&client->dev, "failed=%d\n", ret); 970 return ret; 971 } 972 973 static int rtl2832_pid_filter(struct dvb_frontend *fe, u8 index, u16 pid, 974 int onoff) 975 { 976 struct rtl2832_dev *dev = fe->demodulator_priv; 977 struct i2c_client *client = dev->client; 978 int ret; 979 u8 buf[4]; 980 981 dev_dbg(&client->dev, "index=%d pid=%04x onoff=%d slave_ts=%d\n", 982 index, pid, onoff, dev->slave_ts); 983 984 /* skip invalid PIDs (0x2000) */ 985 if (pid > 0x1fff || index > 32) 986 return 0; 987 988 if (onoff) 989 set_bit(index, &dev->filters); 990 else 991 clear_bit(index, &dev->filters); 992 993 /* enable / disable PIDs */ 994 buf[0] = (dev->filters >> 0) & 0xff; 995 buf[1] = (dev->filters >> 8) & 0xff; 996 buf[2] = (dev->filters >> 16) & 0xff; 997 buf[3] = (dev->filters >> 24) & 0xff; 998 999 if (dev->slave_ts) 1000 ret = regmap_bulk_write(dev->regmap, 0x022, buf, 4); 1001 else 1002 ret = regmap_bulk_write(dev->regmap, 0x062, buf, 4); 1003 if (ret) 1004 goto err; 1005 1006 /* add PID */ 1007 buf[0] = (pid >> 8) & 0xff; 1008 buf[1] = (pid >> 0) & 0xff; 1009 1010 if (dev->slave_ts) 1011 ret = regmap_bulk_write(dev->regmap, 0x026 + 2 * index, buf, 2); 1012 else 1013 ret = regmap_bulk_write(dev->regmap, 0x066 + 2 * index, buf, 2); 1014 if (ret) 1015 goto err; 1016 1017 return 0; 1018 err: 1019 dev_dbg(&client->dev, "failed=%d\n", ret); 1020 return ret; 1021 } 1022 1023 static int rtl2832_probe(struct i2c_client *client, 1024 const struct i2c_device_id *id) 1025 { 1026 struct rtl2832_platform_data *pdata = client->dev.platform_data; 1027 struct i2c_adapter *i2c = client->adapter; 1028 struct rtl2832_dev *dev; 1029 int ret; 1030 u8 tmp; 1031 static const struct regmap_range_cfg regmap_range_cfg[] = { 1032 { 1033 .selector_reg = 0x00, 1034 .selector_mask = 0xff, 1035 .selector_shift = 0, 1036 .window_start = 0, 1037 .window_len = 0x100, 1038 .range_min = 0 * 0x100, 1039 .range_max = 5 * 0x100, 1040 }, 1041 }; 1042 1043 dev_dbg(&client->dev, "\n"); 1044 1045 /* allocate memory for the internal state */ 1046 dev = kzalloc(sizeof(struct rtl2832_dev), GFP_KERNEL); 1047 if (dev == NULL) { 1048 ret = -ENOMEM; 1049 goto err; 1050 } 1051 1052 /* setup the state */ 1053 i2c_set_clientdata(client, dev); 1054 dev->client = client; 1055 dev->pdata = client->dev.platform_data; 1056 dev->sleeping = true; 1057 INIT_DELAYED_WORK(&dev->i2c_gate_work, rtl2832_i2c_gate_work); 1058 /* create regmap */ 1059 dev->regmap_config.reg_bits = 8; 1060 dev->regmap_config.val_bits = 8; 1061 dev->regmap_config.volatile_reg = rtl2832_volatile_reg; 1062 dev->regmap_config.max_register = 5 * 0x100; 1063 dev->regmap_config.ranges = regmap_range_cfg; 1064 dev->regmap_config.num_ranges = ARRAY_SIZE(regmap_range_cfg); 1065 dev->regmap_config.cache_type = REGCACHE_NONE; 1066 dev->regmap = regmap_init_i2c(client, &dev->regmap_config); 1067 if (IS_ERR(dev->regmap)) { 1068 ret = PTR_ERR(dev->regmap); 1069 goto err_kfree; 1070 } 1071 1072 /* check if the demod is there */ 1073 ret = regmap_bulk_read(dev->regmap, 0x000, &tmp, 1); 1074 if (ret) 1075 goto err_regmap_exit; 1076 1077 /* create muxed i2c adapter for demod tuner bus */ 1078 dev->muxc = i2c_mux_alloc(i2c, &i2c->dev, 1, 0, I2C_MUX_LOCKED, 1079 rtl2832_select, rtl2832_deselect); 1080 if (!dev->muxc) { 1081 ret = -ENOMEM; 1082 goto err_regmap_exit; 1083 } 1084 dev->muxc->priv = dev; 1085 ret = i2c_mux_add_adapter(dev->muxc, 0, 0, 0); 1086 if (ret) 1087 goto err_regmap_exit; 1088 1089 /* create dvb_frontend */ 1090 memcpy(&dev->fe.ops, &rtl2832_ops, sizeof(struct dvb_frontend_ops)); 1091 dev->fe.demodulator_priv = dev; 1092 1093 /* setup callbacks */ 1094 pdata->get_dvb_frontend = rtl2832_get_dvb_frontend; 1095 pdata->get_i2c_adapter = rtl2832_get_i2c_adapter; 1096 pdata->slave_ts_ctrl = rtl2832_slave_ts_ctrl; 1097 pdata->pid_filter = rtl2832_pid_filter; 1098 pdata->pid_filter_ctrl = rtl2832_pid_filter_ctrl; 1099 pdata->regmap = dev->regmap; 1100 1101 dev_info(&client->dev, "Realtek RTL2832 successfully attached\n"); 1102 return 0; 1103 err_regmap_exit: 1104 regmap_exit(dev->regmap); 1105 err_kfree: 1106 kfree(dev); 1107 err: 1108 dev_dbg(&client->dev, "failed=%d\n", ret); 1109 return ret; 1110 } 1111 1112 static int rtl2832_remove(struct i2c_client *client) 1113 { 1114 struct rtl2832_dev *dev = i2c_get_clientdata(client); 1115 1116 dev_dbg(&client->dev, "\n"); 1117 1118 cancel_delayed_work_sync(&dev->i2c_gate_work); 1119 1120 i2c_mux_del_adapters(dev->muxc); 1121 1122 regmap_exit(dev->regmap); 1123 1124 kfree(dev); 1125 1126 return 0; 1127 } 1128 1129 static const struct i2c_device_id rtl2832_id_table[] = { 1130 {"rtl2832", 0}, 1131 {} 1132 }; 1133 MODULE_DEVICE_TABLE(i2c, rtl2832_id_table); 1134 1135 static struct i2c_driver rtl2832_driver = { 1136 .driver = { 1137 .name = "rtl2832", 1138 .suppress_bind_attrs = true, 1139 }, 1140 .probe = rtl2832_probe, 1141 .remove = rtl2832_remove, 1142 .id_table = rtl2832_id_table, 1143 }; 1144 1145 module_i2c_driver(rtl2832_driver); 1146 1147 MODULE_AUTHOR("Thomas Mair <mair.thomas86@gmail.com>"); 1148 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); 1149 MODULE_DESCRIPTION("Realtek RTL2832 DVB-T demodulator driver"); 1150 MODULE_LICENSE("GPL"); 1151