cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rtl2832.c (28771B)


      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
     13static 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
    143static 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;
    168err:
    169	dev_dbg(&client->dev, "failed=%d\n", ret);
    170	return ret;
    171}
    172
    173static 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;
    206err:
    207	dev_dbg(&client->dev, "failed=%d\n", ret);
    208	return ret;
    209}
    210
    211static 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;
    240err:
    241	dev_dbg(&client->dev, "failed=%d\n", ret);
    242	return ret;
    243}
    244
    245static 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;
    364err:
    365	dev_dbg(&client->dev, "failed=%d\n", ret);
    366	return ret;
    367}
    368
    369static 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;
    385err:
    386	dev_dbg(&client->dev, "failed=%d\n", ret);
    387	return ret;
    388}
    389
    390static 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
    403static 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;
    519err:
    520	dev_dbg(&client->dev, "failed=%d\n", ret);
    521	return ret;
    522}
    523
    524static 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;
    632err:
    633	dev_dbg(&client->dev, "failed=%d\n", ret);
    634	return ret;
    635}
    636
    637static 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		ret = -EINVAL;
    702		if (constellation > CONSTELLATION_NUM - 1)
    703			goto err;
    704
    705		hierarchy = (u8tmp >> 4) & 0x07; /* [6:4] */
    706		if (hierarchy > HIERARCHY_NUM - 1)
    707			goto err;
    708
    709		ret = regmap_bulk_read(dev->regmap, 0x40c, buf, 2);
    710		if (ret)
    711			goto err;
    712
    713		u16tmp = buf[0] << 8 | buf[1] << 0;
    714		if (u16tmp)
    715			tmp = (constant[constellation][hierarchy] -
    716			       intlog10(u16tmp)) / ((1 << 24) / 10000);
    717		else
    718			tmp = 0;
    719
    720		dev_dbg(&client->dev, "cnr raw=%u\n", u16tmp);
    721
    722		c->cnr.stat[0].scale = FE_SCALE_DECIBEL;
    723		c->cnr.stat[0].svalue = tmp;
    724	} else {
    725		c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
    726	}
    727
    728	/* BER */
    729	if (dev->fe_status & FE_HAS_LOCK) {
    730		ret = regmap_bulk_read(dev->regmap, 0x34e, buf, 2);
    731		if (ret)
    732			goto err;
    733
    734		u16tmp = buf[0] << 8 | buf[1] << 0;
    735		dev->post_bit_error += u16tmp;
    736		dev->post_bit_count += 1000000;
    737
    738		dev_dbg(&client->dev, "ber errors=%u total=1000000\n", u16tmp);
    739
    740		c->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
    741		c->post_bit_error.stat[0].uvalue = dev->post_bit_error;
    742		c->post_bit_count.stat[0].scale = FE_SCALE_COUNTER;
    743		c->post_bit_count.stat[0].uvalue = dev->post_bit_count;
    744	} else {
    745		c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
    746		c->post_bit_count.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
    747	}
    748
    749	return 0;
    750err:
    751	dev_dbg(&client->dev, "failed=%d\n", ret);
    752	return ret;
    753}
    754
    755static int rtl2832_read_snr(struct dvb_frontend *fe, u16 *snr)
    756{
    757	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
    758
    759	/* report SNR in resolution of 0.1 dB */
    760	if (c->cnr.stat[0].scale == FE_SCALE_DECIBEL)
    761		*snr = div_s64(c->cnr.stat[0].svalue, 100);
    762	else
    763		*snr = 0;
    764
    765	return 0;
    766}
    767
    768static int rtl2832_read_ber(struct dvb_frontend *fe, u32 *ber)
    769{
    770	struct rtl2832_dev *dev = fe->demodulator_priv;
    771
    772	*ber = (dev->post_bit_error - dev->post_bit_error_prev);
    773	dev->post_bit_error_prev = dev->post_bit_error;
    774
    775	return 0;
    776}
    777
    778/*
    779 * I2C gate/mux/repeater logic
    780 * There is delay mechanism to avoid unneeded I2C gate open / close. Gate close
    781 * is delayed here a little bit in order to see if there is sequence of I2C
    782 * messages sent to same I2C bus.
    783 */
    784static void rtl2832_i2c_gate_work(struct work_struct *work)
    785{
    786	struct rtl2832_dev *dev = container_of(work, struct rtl2832_dev, i2c_gate_work.work);
    787	struct i2c_client *client = dev->client;
    788	int ret;
    789
    790	/* close gate */
    791	ret = regmap_update_bits(dev->regmap, 0x101, 0x08, 0x00);
    792	if (ret)
    793		goto err;
    794
    795	return;
    796err:
    797	dev_dbg(&client->dev, "failed=%d\n", ret);
    798}
    799
    800static int rtl2832_select(struct i2c_mux_core *muxc, u32 chan_id)
    801{
    802	struct rtl2832_dev *dev = i2c_mux_priv(muxc);
    803	struct i2c_client *client = dev->client;
    804	int ret;
    805
    806	/* terminate possible gate closing */
    807	cancel_delayed_work(&dev->i2c_gate_work);
    808
    809	/* open gate */
    810	ret = regmap_update_bits(dev->regmap, 0x101, 0x08, 0x08);
    811	if (ret)
    812		goto err;
    813
    814	return 0;
    815err:
    816	dev_dbg(&client->dev, "failed=%d\n", ret);
    817	return ret;
    818}
    819
    820static int rtl2832_deselect(struct i2c_mux_core *muxc, u32 chan_id)
    821{
    822	struct rtl2832_dev *dev = i2c_mux_priv(muxc);
    823
    824	schedule_delayed_work(&dev->i2c_gate_work, usecs_to_jiffies(100));
    825	return 0;
    826}
    827
    828static const struct dvb_frontend_ops rtl2832_ops = {
    829	.delsys = { SYS_DVBT },
    830	.info = {
    831		.name = "Realtek RTL2832 (DVB-T)",
    832		.frequency_min_hz	= 174 * MHz,
    833		.frequency_max_hz	= 862 * MHz,
    834		.frequency_stepsize_hz	= 166667,
    835		.caps = FE_CAN_FEC_1_2 |
    836			FE_CAN_FEC_2_3 |
    837			FE_CAN_FEC_3_4 |
    838			FE_CAN_FEC_5_6 |
    839			FE_CAN_FEC_7_8 |
    840			FE_CAN_FEC_AUTO |
    841			FE_CAN_QPSK |
    842			FE_CAN_QAM_16 |
    843			FE_CAN_QAM_64 |
    844			FE_CAN_QAM_AUTO |
    845			FE_CAN_TRANSMISSION_MODE_AUTO |
    846			FE_CAN_GUARD_INTERVAL_AUTO |
    847			FE_CAN_HIERARCHY_AUTO |
    848			FE_CAN_RECOVER |
    849			FE_CAN_MUTE_TS
    850	 },
    851
    852	.init = rtl2832_init,
    853	.sleep = rtl2832_sleep,
    854
    855	.get_tune_settings = rtl2832_get_tune_settings,
    856
    857	.set_frontend = rtl2832_set_frontend,
    858	.get_frontend = rtl2832_get_frontend,
    859
    860	.read_status = rtl2832_read_status,
    861	.read_snr = rtl2832_read_snr,
    862	.read_ber = rtl2832_read_ber,
    863};
    864
    865static bool rtl2832_volatile_reg(struct device *dev, unsigned int reg)
    866{
    867	switch (reg) {
    868	case 0x305:
    869	case 0x33c:
    870	case 0x34e:
    871	case 0x351:
    872	case 0x40c ... 0x40d:
    873		return true;
    874	default:
    875		break;
    876	}
    877
    878	return false;
    879}
    880
    881static struct dvb_frontend *rtl2832_get_dvb_frontend(struct i2c_client *client)
    882{
    883	struct rtl2832_dev *dev = i2c_get_clientdata(client);
    884
    885	dev_dbg(&client->dev, "\n");
    886	return &dev->fe;
    887}
    888
    889static struct i2c_adapter *rtl2832_get_i2c_adapter(struct i2c_client *client)
    890{
    891	struct rtl2832_dev *dev = i2c_get_clientdata(client);
    892
    893	dev_dbg(&client->dev, "\n");
    894	return dev->muxc->adapter[0];
    895}
    896
    897static int rtl2832_slave_ts_ctrl(struct i2c_client *client, bool enable)
    898{
    899	struct rtl2832_dev *dev = i2c_get_clientdata(client);
    900	int ret;
    901
    902	dev_dbg(&client->dev, "enable=%d\n", enable);
    903
    904	if (enable) {
    905		ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0);
    906		if (ret)
    907			goto err;
    908		ret = regmap_bulk_write(dev->regmap, 0x10c, "\x5f\xff", 2);
    909		if (ret)
    910			goto err;
    911		ret = rtl2832_wr_demod_reg(dev, DVBT_PIP_ON, 0x1);
    912		if (ret)
    913			goto err;
    914		ret = regmap_bulk_write(dev->regmap, 0x0bc, "\x18", 1);
    915		if (ret)
    916			goto err;
    917		ret = regmap_bulk_write(dev->regmap, 0x192, "\x7f\xf7\xff", 3);
    918		if (ret)
    919			goto err;
    920	} else {
    921		ret = regmap_bulk_write(dev->regmap, 0x192, "\x00\x0f\xff", 3);
    922		if (ret)
    923			goto err;
    924		ret = regmap_bulk_write(dev->regmap, 0x0bc, "\x08", 1);
    925		if (ret)
    926			goto err;
    927		ret = rtl2832_wr_demod_reg(dev, DVBT_PIP_ON, 0x0);
    928		if (ret)
    929			goto err;
    930		ret = regmap_bulk_write(dev->regmap, 0x10c, "\x00\x00", 2);
    931		if (ret)
    932			goto err;
    933		ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
    934		if (ret)
    935			goto err;
    936	}
    937
    938	dev->slave_ts = enable;
    939
    940	return 0;
    941err:
    942	dev_dbg(&client->dev, "failed=%d\n", ret);
    943	return ret;
    944}
    945
    946static int rtl2832_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
    947{
    948	struct rtl2832_dev *dev = fe->demodulator_priv;
    949	struct i2c_client *client = dev->client;
    950	int ret;
    951	u8 u8tmp;
    952
    953	dev_dbg(&client->dev, "onoff=%d, slave_ts=%d\n", onoff, dev->slave_ts);
    954
    955	/* enable / disable PID filter */
    956	if (onoff)
    957		u8tmp = 0x80;
    958	else
    959		u8tmp = 0x00;
    960
    961	if (dev->slave_ts)
    962		ret = regmap_update_bits(dev->regmap, 0x021, 0xc0, u8tmp);
    963	else
    964		ret = regmap_update_bits(dev->regmap, 0x061, 0xc0, u8tmp);
    965	if (ret)
    966		goto err;
    967
    968	return 0;
    969err:
    970	dev_dbg(&client->dev, "failed=%d\n", ret);
    971	return ret;
    972}
    973
    974static int rtl2832_pid_filter(struct dvb_frontend *fe, u8 index, u16 pid,
    975			      int onoff)
    976{
    977	struct rtl2832_dev *dev = fe->demodulator_priv;
    978	struct i2c_client *client = dev->client;
    979	int ret;
    980	u8 buf[4];
    981
    982	dev_dbg(&client->dev, "index=%d pid=%04x onoff=%d slave_ts=%d\n",
    983		index, pid, onoff, dev->slave_ts);
    984
    985	/* skip invalid PIDs (0x2000) */
    986	if (pid > 0x1fff || index > 32)
    987		return 0;
    988
    989	if (onoff)
    990		set_bit(index, &dev->filters);
    991	else
    992		clear_bit(index, &dev->filters);
    993
    994	/* enable / disable PIDs */
    995	buf[0] = (dev->filters >>  0) & 0xff;
    996	buf[1] = (dev->filters >>  8) & 0xff;
    997	buf[2] = (dev->filters >> 16) & 0xff;
    998	buf[3] = (dev->filters >> 24) & 0xff;
    999
   1000	if (dev->slave_ts)
   1001		ret = regmap_bulk_write(dev->regmap, 0x022, buf, 4);
   1002	else
   1003		ret = regmap_bulk_write(dev->regmap, 0x062, buf, 4);
   1004	if (ret)
   1005		goto err;
   1006
   1007	/* add PID */
   1008	buf[0] = (pid >> 8) & 0xff;
   1009	buf[1] = (pid >> 0) & 0xff;
   1010
   1011	if (dev->slave_ts)
   1012		ret = regmap_bulk_write(dev->regmap, 0x026 + 2 * index, buf, 2);
   1013	else
   1014		ret = regmap_bulk_write(dev->regmap, 0x066 + 2 * index, buf, 2);
   1015	if (ret)
   1016		goto err;
   1017
   1018	return 0;
   1019err:
   1020	dev_dbg(&client->dev, "failed=%d\n", ret);
   1021	return ret;
   1022}
   1023
   1024static int rtl2832_probe(struct i2c_client *client,
   1025		const struct i2c_device_id *id)
   1026{
   1027	struct rtl2832_platform_data *pdata = client->dev.platform_data;
   1028	struct i2c_adapter *i2c = client->adapter;
   1029	struct rtl2832_dev *dev;
   1030	int ret;
   1031	u8 tmp;
   1032	static const struct regmap_range_cfg regmap_range_cfg[] = {
   1033		{
   1034			.selector_reg     = 0x00,
   1035			.selector_mask    = 0xff,
   1036			.selector_shift   = 0,
   1037			.window_start     = 0,
   1038			.window_len       = 0x100,
   1039			.range_min        = 0 * 0x100,
   1040			.range_max        = 5 * 0x100,
   1041		},
   1042	};
   1043
   1044	dev_dbg(&client->dev, "\n");
   1045
   1046	/* allocate memory for the internal state */
   1047	dev = kzalloc(sizeof(struct rtl2832_dev), GFP_KERNEL);
   1048	if (dev == NULL) {
   1049		ret = -ENOMEM;
   1050		goto err;
   1051	}
   1052
   1053	/* setup the state */
   1054	i2c_set_clientdata(client, dev);
   1055	dev->client = client;
   1056	dev->pdata = client->dev.platform_data;
   1057	dev->sleeping = true;
   1058	INIT_DELAYED_WORK(&dev->i2c_gate_work, rtl2832_i2c_gate_work);
   1059	/* create regmap */
   1060	dev->regmap_config.reg_bits =  8;
   1061	dev->regmap_config.val_bits =  8;
   1062	dev->regmap_config.volatile_reg = rtl2832_volatile_reg;
   1063	dev->regmap_config.max_register = 5 * 0x100;
   1064	dev->regmap_config.ranges = regmap_range_cfg;
   1065	dev->regmap_config.num_ranges = ARRAY_SIZE(regmap_range_cfg);
   1066	dev->regmap_config.cache_type = REGCACHE_NONE;
   1067	dev->regmap = regmap_init_i2c(client, &dev->regmap_config);
   1068	if (IS_ERR(dev->regmap)) {
   1069		ret = PTR_ERR(dev->regmap);
   1070		goto err_kfree;
   1071	}
   1072
   1073	/* check if the demod is there */
   1074	ret = regmap_bulk_read(dev->regmap, 0x000, &tmp, 1);
   1075	if (ret)
   1076		goto err_regmap_exit;
   1077
   1078	/* create muxed i2c adapter for demod tuner bus */
   1079	dev->muxc = i2c_mux_alloc(i2c, &i2c->dev, 1, 0, I2C_MUX_LOCKED,
   1080				  rtl2832_select, rtl2832_deselect);
   1081	if (!dev->muxc) {
   1082		ret = -ENOMEM;
   1083		goto err_regmap_exit;
   1084	}
   1085	dev->muxc->priv = dev;
   1086	ret = i2c_mux_add_adapter(dev->muxc, 0, 0, 0);
   1087	if (ret)
   1088		goto err_regmap_exit;
   1089
   1090	/* create dvb_frontend */
   1091	memcpy(&dev->fe.ops, &rtl2832_ops, sizeof(struct dvb_frontend_ops));
   1092	dev->fe.demodulator_priv = dev;
   1093
   1094	/* setup callbacks */
   1095	pdata->get_dvb_frontend = rtl2832_get_dvb_frontend;
   1096	pdata->get_i2c_adapter = rtl2832_get_i2c_adapter;
   1097	pdata->slave_ts_ctrl = rtl2832_slave_ts_ctrl;
   1098	pdata->pid_filter = rtl2832_pid_filter;
   1099	pdata->pid_filter_ctrl = rtl2832_pid_filter_ctrl;
   1100	pdata->regmap = dev->regmap;
   1101
   1102	dev_info(&client->dev, "Realtek RTL2832 successfully attached\n");
   1103	return 0;
   1104err_regmap_exit:
   1105	regmap_exit(dev->regmap);
   1106err_kfree:
   1107	kfree(dev);
   1108err:
   1109	dev_dbg(&client->dev, "failed=%d\n", ret);
   1110	return ret;
   1111}
   1112
   1113static int rtl2832_remove(struct i2c_client *client)
   1114{
   1115	struct rtl2832_dev *dev = i2c_get_clientdata(client);
   1116
   1117	dev_dbg(&client->dev, "\n");
   1118
   1119	cancel_delayed_work_sync(&dev->i2c_gate_work);
   1120
   1121	i2c_mux_del_adapters(dev->muxc);
   1122
   1123	regmap_exit(dev->regmap);
   1124
   1125	kfree(dev);
   1126
   1127	return 0;
   1128}
   1129
   1130static const struct i2c_device_id rtl2832_id_table[] = {
   1131	{"rtl2832", 0},
   1132	{}
   1133};
   1134MODULE_DEVICE_TABLE(i2c, rtl2832_id_table);
   1135
   1136static struct i2c_driver rtl2832_driver = {
   1137	.driver = {
   1138		.name	= "rtl2832",
   1139		.suppress_bind_attrs	= true,
   1140	},
   1141	.probe		= rtl2832_probe,
   1142	.remove		= rtl2832_remove,
   1143	.id_table	= rtl2832_id_table,
   1144};
   1145
   1146module_i2c_driver(rtl2832_driver);
   1147
   1148MODULE_AUTHOR("Thomas Mair <mair.thomas86@gmail.com>");
   1149MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
   1150MODULE_DESCRIPTION("Realtek RTL2832 DVB-T demodulator driver");
   1151MODULE_LICENSE("GPL");