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