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
26static 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! */
157static 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
169static 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
181static 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
193static 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;
218err:
219	dev_dbg(&client->dev, "failed=%d\n", ret);
220	return ret;
221}
222
223static 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;
256err:
257	dev_dbg(&client->dev, "failed=%d\n", ret);
258	return ret;
259}
260
261static 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;
290err:
291	dev_dbg(&client->dev, "failed=%d\n", ret);
292	return ret;
293}
294
295static 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	for (i = 0; i < ARRAY_SIZE(rtl2832_initial_regs); i++) {
351		ret = rtl2832_wr_demod_reg(dev, rtl2832_initial_regs[i].reg,
352			rtl2832_initial_regs[i].value);
353		if (ret)
354			goto err;
355	}
356
357	/* load tuner specific settings */
358	dev_dbg(&client->dev, "load settings for tuner=%02x\n",
359		dev->pdata->tuner);
360	switch (dev->pdata->tuner) {
361	case RTL2832_TUNER_FC2580:
362		len = ARRAY_SIZE(rtl2832_tuner_init_fc2580);
363		init = rtl2832_tuner_init_fc2580;
364		break;
365	case RTL2832_TUNER_FC0012:
366	case RTL2832_TUNER_FC0013:
367		len = ARRAY_SIZE(rtl2832_tuner_init_fc0012);
368		init = rtl2832_tuner_init_fc0012;
369		break;
370	case RTL2832_TUNER_TUA9001:
371		len = ARRAY_SIZE(rtl2832_tuner_init_tua9001);
372		init = rtl2832_tuner_init_tua9001;
373		break;
374	case RTL2832_TUNER_E4000:
375		len = ARRAY_SIZE(rtl2832_tuner_init_e4000);
376		init = rtl2832_tuner_init_e4000;
377		break;
378	case RTL2832_TUNER_R820T:
379	case RTL2832_TUNER_R828D:
380		len = ARRAY_SIZE(rtl2832_tuner_init_r820t);
381		init = rtl2832_tuner_init_r820t;
382		break;
383	case RTL2832_TUNER_SI2157:
384		len = ARRAY_SIZE(rtl2832_tuner_init_si2157);
385		init = rtl2832_tuner_init_si2157;
386		break;
387	default:
388		ret = -EINVAL;
389		goto err;
390	}
391
392	for (i = 0; i < len; i++) {
393		ret = rtl2832_wr_demod_reg(dev, init[i].reg, init[i].value);
394		if (ret)
395			goto err;
396	}
397
398	/* init stats here in order signal app which stats are supported */
399	c->strength.len = 1;
400	c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
401	c->cnr.len = 1;
402	c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
403	c->post_bit_error.len = 1;
404	c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
405	c->post_bit_count.len = 1;
406	c->post_bit_count.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
407	/* start statistics polling */
408	schedule_delayed_work(&dev->stat_work, msecs_to_jiffies(2000));
409	dev->sleeping = false;
410
411	return 0;
412err:
413	dev_dbg(&client->dev, "failed=%d\n", ret);
414	return ret;
415}
416
417static int rtl2832_sleep(struct dvb_frontend *fe)
418{
419	struct rtl2832_dev *dev = fe->demodulator_priv;
420	struct i2c_client *client = dev->client;
421	int ret;
422
423	dev_dbg(&client->dev, "\n");
424
425	dev->sleeping = true;
426	/* stop statistics polling */
427	cancel_delayed_work_sync(&dev->stat_work);
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;
435err:
436	dev_dbg(&client->dev, "failed=%d\n", ret);
437	return ret;
438}
439
440static 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
453static 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	/* PIP mode related */
495	ret = rtl2832_bulk_write(client, 0x192, "\x00\x0f\xff", 3);
496	if (ret)
497		goto err;
498
499	/* If the frontend has get_if_frequency(), use it */
500	if (fe->ops.tuner_ops.get_if_frequency) {
501		u32 if_freq;
502
503		ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
504		if (ret)
505			goto err;
506
507		ret = rtl2832_set_if(fe, if_freq);
508		if (ret)
509			goto err;
510	}
511
512	switch (c->bandwidth_hz) {
513	case 6000000:
514		i = 0;
515		bw_mode = 48000000;
516		break;
517	case 7000000:
518		i = 1;
519		bw_mode = 56000000;
520		break;
521	case 8000000:
522		i = 2;
523		bw_mode = 64000000;
524		break;
525	default:
526		dev_err(&client->dev, "invalid bandwidth_hz %u\n",
527			c->bandwidth_hz);
528		ret = -EINVAL;
529		goto err;
530	}
531
532	for (j = 0; j < sizeof(bw_params[0]); j++) {
533		ret = rtl2832_bulk_write(client, 0x11c + j, &bw_params[i][j], 1);
534		if (ret)
535			goto err;
536	}
537
538	/* calculate and set resample ratio
539	* RSAMP_RATIO = floor(CrystalFreqHz * 7 * pow(2, 22)
540	*	/ ConstWithBandwidthMode)
541	*/
542	num = dev->pdata->clk * 7;
543	num *= 0x400000;
544	num = div_u64(num, bw_mode);
545	resamp_ratio =  num & 0x3ffffff;
546	ret = rtl2832_wr_demod_reg(dev, DVBT_RSAMP_RATIO, resamp_ratio);
547	if (ret)
548		goto err;
549
550	/* calculate and set cfreq off ratio
551	* CFREQ_OFF_RATIO = - floor(ConstWithBandwidthMode * pow(2, 20)
552	*	/ (CrystalFreqHz * 7))
553	*/
554	num = bw_mode << 20;
555	num2 = dev->pdata->clk * 7;
556	num = div_u64(num, num2);
557	num = -num;
558	cfreq_off_ratio = num & 0xfffff;
559	ret = rtl2832_wr_demod_reg(dev, DVBT_CFREQ_OFF_RATIO, cfreq_off_ratio);
560	if (ret)
561		goto err;
562
563	/* soft reset */
564	ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
565	if (ret)
566		goto err;
567
568	ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0);
569	if (ret)
570		goto err;
571
572	return 0;
573err:
574	dev_dbg(&client->dev, "failed=%d\n", ret);
575	return ret;
576}
577
578static int rtl2832_get_frontend(struct dvb_frontend *fe)
579{
580	struct rtl2832_dev *dev = fe->demodulator_priv;
581	struct i2c_client *client = dev->client;
582	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
583	int ret;
584	u8 buf[3];
585
586	if (dev->sleeping)
587		return 0;
588
589	ret = rtl2832_bulk_read(client, 0x33c, buf, 2);
590	if (ret)
591		goto err;
592
593	ret = rtl2832_bulk_read(client, 0x351, &buf[2], 1);
594	if (ret)
595		goto err;
596
597	dev_dbg(&client->dev, "TPS=%*ph\n", 3, buf);
598
599	switch ((buf[0] >> 2) & 3) {
600	case 0:
601		c->modulation = QPSK;
602		break;
603	case 1:
604		c->modulation = QAM_16;
605		break;
606	case 2:
607		c->modulation = QAM_64;
608		break;
609	}
610
611	switch ((buf[2] >> 2) & 1) {
612	case 0:
613		c->transmission_mode = TRANSMISSION_MODE_2K;
614		break;
615	case 1:
616		c->transmission_mode = TRANSMISSION_MODE_8K;
617	}
618
619	switch ((buf[2] >> 0) & 3) {
620	case 0:
621		c->guard_interval = GUARD_INTERVAL_1_32;
622		break;
623	case 1:
624		c->guard_interval = GUARD_INTERVAL_1_16;
625		break;
626	case 2:
627		c->guard_interval = GUARD_INTERVAL_1_8;
628		break;
629	case 3:
630		c->guard_interval = GUARD_INTERVAL_1_4;
631		break;
632	}
633
634	switch ((buf[0] >> 4) & 7) {
635	case 0:
636		c->hierarchy = HIERARCHY_NONE;
637		break;
638	case 1:
639		c->hierarchy = HIERARCHY_1;
640		break;
641	case 2:
642		c->hierarchy = HIERARCHY_2;
643		break;
644	case 3:
645		c->hierarchy = HIERARCHY_4;
646		break;
647	}
648
649	switch ((buf[1] >> 3) & 7) {
650	case 0:
651		c->code_rate_HP = FEC_1_2;
652		break;
653	case 1:
654		c->code_rate_HP = FEC_2_3;
655		break;
656	case 2:
657		c->code_rate_HP = FEC_3_4;
658		break;
659	case 3:
660		c->code_rate_HP = FEC_5_6;
661		break;
662	case 4:
663		c->code_rate_HP = FEC_7_8;
664		break;
665	}
666
667	switch ((buf[1] >> 0) & 7) {
668	case 0:
669		c->code_rate_LP = FEC_1_2;
670		break;
671	case 1:
672		c->code_rate_LP = FEC_2_3;
673		break;
674	case 2:
675		c->code_rate_LP = FEC_3_4;
676		break;
677	case 3:
678		c->code_rate_LP = FEC_5_6;
679		break;
680	case 4:
681		c->code_rate_LP = FEC_7_8;
682		break;
683	}
684
685	return 0;
686err:
687	dev_dbg(&client->dev, "failed=%d\n", ret);
688	return ret;
689}
690
691static int rtl2832_read_status(struct dvb_frontend *fe, enum fe_status *status)
692{
693	struct rtl2832_dev *dev = fe->demodulator_priv;
694	struct i2c_client *client = dev->client;
695	int ret;
696	u32 uninitialized_var(tmp);
697
698	dev_dbg(&client->dev, "\n");
699
700	*status = 0;
701	if (dev->sleeping)
702		return 0;
703
704	ret = rtl2832_rd_demod_reg(dev, DVBT_FSM_STAGE, &tmp);
705	if (ret)
706		goto err;
707
708	if (tmp == 11) {
709		*status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
710				FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
711	} else if (tmp == 10) {
712		*status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
713				FE_HAS_VITERBI;
714	}
715
716	dev->fe_status = *status;
717	return 0;
718err:
719	dev_dbg(&client->dev, "failed=%d\n", ret);
720	return ret;
721}
722
723static int rtl2832_read_snr(struct dvb_frontend *fe, u16 *snr)
724{
725	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
726
727	/* report SNR in resolution of 0.1 dB */
728	if (c->cnr.stat[0].scale == FE_SCALE_DECIBEL)
729		*snr = div_s64(c->cnr.stat[0].svalue, 100);
730	else
731		*snr = 0;
732
733	return 0;
734}
735
736static int rtl2832_read_ber(struct dvb_frontend *fe, u32 *ber)
737{
738	struct rtl2832_dev *dev = fe->demodulator_priv;
739
740	*ber = (dev->post_bit_error - dev->post_bit_error_prev);
741	dev->post_bit_error_prev = dev->post_bit_error;
742
743	return 0;
744}
745
746static void rtl2832_stat_work(struct work_struct *work)
747{
748	struct rtl2832_dev *dev = container_of(work, struct rtl2832_dev, stat_work.work);
749	struct i2c_client *client = dev->client;
750	struct dtv_frontend_properties *c = &dev->fe.dtv_property_cache;
751	int ret, tmp;
752	u8 u8tmp, buf[2];
753	u16 u16tmp;
754
755	dev_dbg(&client->dev, "\n");
756
757	/* signal strength */
758	if (dev->fe_status & FE_HAS_SIGNAL) {
759		/* read digital AGC */
760		ret = rtl2832_bulk_read(client, 0x305, &u8tmp, 1);
761		if (ret)
762			goto err;
763
764		dev_dbg(&client->dev, "digital agc=%02x", u8tmp);
765
766		u8tmp = ~u8tmp;
767		u16tmp = u8tmp << 8 | u8tmp << 0;
768
769		c->strength.stat[0].scale = FE_SCALE_RELATIVE;
770		c->strength.stat[0].uvalue = u16tmp;
771	} else {
772		c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
773	}
774
775	/* CNR */
776	if (dev->fe_status & FE_HAS_VITERBI) {
777		unsigned hierarchy, constellation;
778		#define CONSTELLATION_NUM 3
779		#define HIERARCHY_NUM 4
780		static const u32 constant[CONSTELLATION_NUM][HIERARCHY_NUM] = {
781			{85387325, 85387325, 85387325, 85387325},
782			{86676178, 86676178, 87167949, 87795660},
783			{87659938, 87659938, 87885178, 88241743},
784		};
785
786		ret = rtl2832_bulk_read(client, 0x33c, &u8tmp, 1);
787		if (ret)
788			goto err;
789
790		constellation = (u8tmp >> 2) & 0x03; /* [3:2] */
791		if (constellation > CONSTELLATION_NUM - 1)
792			goto err_schedule_delayed_work;
793
794		hierarchy = (u8tmp >> 4) & 0x07; /* [6:4] */
795		if (hierarchy > HIERARCHY_NUM - 1)
796			goto err_schedule_delayed_work;
797
798		ret = rtl2832_bulk_read(client, 0x40c, buf, 2);
799		if (ret)
800			goto err;
801
802		u16tmp = buf[0] << 8 | buf[1] << 0;
803		if (u16tmp)
804			tmp = (constant[constellation][hierarchy] -
805			       intlog10(u16tmp)) / ((1 << 24) / 10000);
806		else
807			tmp = 0;
808
809		dev_dbg(&client->dev, "cnr raw=%u\n", u16tmp);
810
811		c->cnr.stat[0].scale = FE_SCALE_DECIBEL;
812		c->cnr.stat[0].svalue = tmp;
813	} else {
814		c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
815	}
816
817	/* BER */
818	if (dev->fe_status & FE_HAS_LOCK) {
819		ret = rtl2832_bulk_read(client, 0x34e, buf, 2);
820		if (ret)
821			goto err;
822
823		u16tmp = buf[0] << 8 | buf[1] << 0;
824		dev->post_bit_error += u16tmp;
825		dev->post_bit_count += 1000000;
826
827		dev_dbg(&client->dev, "ber errors=%u total=1000000\n", u16tmp);
828
829		c->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
830		c->post_bit_error.stat[0].uvalue = dev->post_bit_error;
831		c->post_bit_count.stat[0].scale = FE_SCALE_COUNTER;
832		c->post_bit_count.stat[0].uvalue = dev->post_bit_count;
833	} else {
834		c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
835		c->post_bit_count.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
836	}
837
838err_schedule_delayed_work:
839	schedule_delayed_work(&dev->stat_work, msecs_to_jiffies(2000));
840	return;
841err:
842	dev_dbg(&client->dev, "failed=%d\n", ret);
843}
844
845/*
846 * I2C gate/mux/repeater logic
847 * We must use unlocked __i2c_transfer() here (through regmap) because of I2C
848 * adapter lock is already taken by tuner driver.
849 * There is delay mechanism to avoid unneeded I2C gate open / close. Gate close
850 * is delayed here a little bit in order to see if there is sequence of I2C
851 * messages sent to same I2C bus.
852 */
853static void rtl2832_i2c_gate_work(struct work_struct *work)
854{
855	struct rtl2832_dev *dev = container_of(work, struct rtl2832_dev, i2c_gate_work.work);
856	struct i2c_client *client = dev->client;
857	int ret;
858
859	/* close gate */
860	ret = rtl2832_update_bits(dev->client, 0x101, 0x08, 0x00);
861	if (ret)
862		goto err;
863
864	return;
865err:
866	dev_dbg(&client->dev, "failed=%d\n", ret);
867}
868
869static int rtl2832_select(struct i2c_adapter *adap, void *mux_priv, u32 chan_id)
870{
871	struct rtl2832_dev *dev = mux_priv;
872	struct i2c_client *client = dev->client;
873	int ret;
874
875	/* terminate possible gate closing */
876	cancel_delayed_work(&dev->i2c_gate_work);
877
878	/*
879	 * I2C adapter lock is already taken and due to that we will use
880	 * regmap_update_bits() which does not lock again I2C adapter.
881	 */
882	ret = regmap_update_bits(dev->regmap, 0x101, 0x08, 0x08);
883	if (ret)
884		goto err;
885
886	return 0;
887err:
888	dev_dbg(&client->dev, "failed=%d\n", ret);
889	return ret;
890}
891
892static int rtl2832_deselect(struct i2c_adapter *adap, void *mux_priv,
893			    u32 chan_id)
894{
895	struct rtl2832_dev *dev = mux_priv;
896
897	schedule_delayed_work(&dev->i2c_gate_work, usecs_to_jiffies(100));
898	return 0;
899}
900
901static struct dvb_frontend_ops rtl2832_ops = {
902	.delsys = { SYS_DVBT },
903	.info = {
904		.name = "Realtek RTL2832 (DVB-T)",
905		.frequency_min	  = 174000000,
906		.frequency_max	  = 862000000,
907		.frequency_stepsize = 166667,
908		.caps = FE_CAN_FEC_1_2 |
909			FE_CAN_FEC_2_3 |
910			FE_CAN_FEC_3_4 |
911			FE_CAN_FEC_5_6 |
912			FE_CAN_FEC_7_8 |
913			FE_CAN_FEC_AUTO |
914			FE_CAN_QPSK |
915			FE_CAN_QAM_16 |
916			FE_CAN_QAM_64 |
917			FE_CAN_QAM_AUTO |
918			FE_CAN_TRANSMISSION_MODE_AUTO |
919			FE_CAN_GUARD_INTERVAL_AUTO |
920			FE_CAN_HIERARCHY_AUTO |
921			FE_CAN_RECOVER |
922			FE_CAN_MUTE_TS
923	 },
924
925	.init = rtl2832_init,
926	.sleep = rtl2832_sleep,
927
928	.get_tune_settings = rtl2832_get_tune_settings,
929
930	.set_frontend = rtl2832_set_frontend,
931	.get_frontend = rtl2832_get_frontend,
932
933	.read_status = rtl2832_read_status,
934	.read_snr = rtl2832_read_snr,
935	.read_ber = rtl2832_read_ber,
936};
937
938static bool rtl2832_volatile_reg(struct device *dev, unsigned int reg)
939{
940	switch (reg) {
941	case 0x305:
942	case 0x33c:
943	case 0x34e:
944	case 0x351:
945	case 0x40c ... 0x40d:
946		return true;
947	default:
948		break;
949	}
950
951	return false;
952}
953
954/*
955 * We implement own I2C access routines for regmap in order to get manual access
956 * to I2C adapter lock, which is needed for I2C mux adapter.
957 */
958static int rtl2832_regmap_read(void *context, const void *reg_buf,
959			       size_t reg_size, void *val_buf, size_t val_size)
960{
961	struct i2c_client *client = context;
962	int ret;
963	struct i2c_msg msg[2] = {
964		{
965			.addr = client->addr,
966			.flags = 0,
967			.len = reg_size,
968			.buf = (u8 *)reg_buf,
969		}, {
970			.addr = client->addr,
971			.flags = I2C_M_RD,
972			.len = val_size,
973			.buf = val_buf,
974		}
975	};
976
977	ret = __i2c_transfer(client->adapter, msg, 2);
978	if (ret != 2) {
979		dev_warn(&client->dev, "i2c reg read failed %d\n", ret);
980		if (ret >= 0)
981			ret = -EREMOTEIO;
982		return ret;
983	}
984	return 0;
985}
986
987static int rtl2832_regmap_write(void *context, const void *data, size_t count)
988{
989	struct i2c_client *client = context;
990	int ret;
991	struct i2c_msg msg[1] = {
992		{
993			.addr = client->addr,
994			.flags = 0,
995			.len = count,
996			.buf = (u8 *)data,
997		}
998	};
999
1000	ret = __i2c_transfer(client->adapter, msg, 1);
1001	if (ret != 1) {
1002		dev_warn(&client->dev, "i2c reg write failed %d\n", ret);
1003		if (ret >= 0)
1004			ret = -EREMOTEIO;
1005		return ret;
1006	}
1007	return 0;
1008}
1009
1010static int rtl2832_regmap_gather_write(void *context, const void *reg,
1011				       size_t reg_len, const void *val,
1012				       size_t val_len)
1013{
1014	struct i2c_client *client = context;
1015	int ret;
1016	u8 buf[256];
1017	struct i2c_msg msg[1] = {
1018		{
1019			.addr = client->addr,
1020			.flags = 0,
1021			.len = 1 + val_len,
1022			.buf = buf,
1023		}
1024	};
1025
1026	buf[0] = *(u8 const *)reg;
1027	memcpy(&buf[1], val, val_len);
1028
1029	ret = __i2c_transfer(client->adapter, msg, 1);
1030	if (ret != 1) {
1031		dev_warn(&client->dev, "i2c reg write failed %d\n", ret);
1032		if (ret >= 0)
1033			ret = -EREMOTEIO;
1034		return ret;
1035	}
1036	return 0;
1037}
1038
1039/*
1040 * FIXME: Hack. Implement own regmap locking in order to silence lockdep
1041 * recursive lock warning. That happens when regmap I2C client calls I2C mux
1042 * adapter, which leads demod I2C repeater enable via demod regmap. Operation
1043 * takes two regmap locks recursively - but those are different regmap instances
1044 * in a two different I2C drivers, so it is not deadlock. Proper fix is to make
1045 * regmap aware of lockdep.
1046 */
1047static void rtl2832_regmap_lock(void *__dev)
1048{
1049	struct rtl2832_dev *dev = __dev;
1050	struct i2c_client *client = dev->client;
1051
1052	dev_dbg(&client->dev, "\n");
1053	mutex_lock(&dev->regmap_mutex);
1054}
1055
1056static void rtl2832_regmap_unlock(void *__dev)
1057{
1058	struct rtl2832_dev *dev = __dev;
1059	struct i2c_client *client = dev->client;
1060
1061	dev_dbg(&client->dev, "\n");
1062	mutex_unlock(&dev->regmap_mutex);
1063}
1064
1065static struct dvb_frontend *rtl2832_get_dvb_frontend(struct i2c_client *client)
1066{
1067	struct rtl2832_dev *dev = i2c_get_clientdata(client);
1068
1069	dev_dbg(&client->dev, "\n");
1070	return &dev->fe;
1071}
1072
1073static struct i2c_adapter *rtl2832_get_i2c_adapter(struct i2c_client *client)
1074{
1075	struct rtl2832_dev *dev = i2c_get_clientdata(client);
1076
1077	dev_dbg(&client->dev, "\n");
1078	return dev->i2c_adapter_tuner;
1079}
1080
1081static int rtl2832_enable_slave_ts(struct i2c_client *client)
1082{
1083	struct rtl2832_dev *dev = i2c_get_clientdata(client);
1084	int ret;
1085
1086	dev_dbg(&client->dev, "\n");
1087
1088	ret = rtl2832_bulk_write(client, 0x10c, "\x5f\xff", 2);
1089	if (ret)
1090		goto err;
1091
1092	ret = rtl2832_wr_demod_reg(dev, DVBT_PIP_ON, 0x1);
1093	if (ret)
1094		goto err;
1095
1096	ret = rtl2832_bulk_write(client, 0x0bc, "\x18", 1);
1097	if (ret)
1098		goto err;
1099
1100	ret = rtl2832_bulk_write(client, 0x022, "\x01", 1);
1101	if (ret)
1102		goto err;
1103
1104	ret = rtl2832_bulk_write(client, 0x026, "\x1f", 1);
1105	if (ret)
1106		goto err;
1107
1108	ret = rtl2832_bulk_write(client, 0x027, "\xff", 1);
1109	if (ret)
1110		goto err;
1111
1112	ret = rtl2832_bulk_write(client, 0x192, "\x7f\xf7\xff", 3);
1113	if (ret)
1114		goto err;
1115
1116	/* soft reset */
1117	ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
1118	if (ret)
1119		goto err;
1120
1121	ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0);
1122	if (ret)
1123		goto err;
1124
1125	return 0;
1126err:
1127	dev_dbg(&client->dev, "failed=%d\n", ret);
1128	return ret;
1129}
1130
1131static int rtl2832_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
1132{
1133	struct rtl2832_dev *dev = fe->demodulator_priv;
1134	struct i2c_client *client = dev->client;
1135	int ret;
1136	u8 u8tmp;
1137
1138	dev_dbg(&client->dev, "onoff=%d\n", onoff);
1139
1140	/* enable / disable PID filter */
1141	if (onoff)
1142		u8tmp = 0x80;
1143	else
1144		u8tmp = 0x00;
1145
1146	ret = rtl2832_update_bits(client, 0x061, 0xc0, u8tmp);
1147	if (ret)
1148		goto err;
1149
1150	return 0;
1151err:
1152	dev_dbg(&client->dev, "failed=%d\n", ret);
1153	return ret;
1154}
1155
1156static int rtl2832_pid_filter(struct dvb_frontend *fe, u8 index, u16 pid,
1157			      int onoff)
1158{
1159	struct rtl2832_dev *dev = fe->demodulator_priv;
1160	struct i2c_client *client = dev->client;
1161	int ret;
1162	u8 buf[4];
1163
1164	dev_dbg(&client->dev, "index=%d pid=%04x onoff=%d\n",
1165		index, pid, onoff);
1166
1167	/* skip invalid PIDs (0x2000) */
1168	if (pid > 0x1fff || index > 32)
1169		return 0;
1170
1171	if (onoff)
1172		set_bit(index, &dev->filters);
1173	else
1174		clear_bit(index, &dev->filters);
1175
1176	/* enable / disable PIDs */
1177	buf[0] = (dev->filters >>  0) & 0xff;
1178	buf[1] = (dev->filters >>  8) & 0xff;
1179	buf[2] = (dev->filters >> 16) & 0xff;
1180	buf[3] = (dev->filters >> 24) & 0xff;
1181	ret = rtl2832_bulk_write(client, 0x062, buf, 4);
1182	if (ret)
1183		goto err;
1184
1185	/* add PID */
1186	buf[0] = (pid >> 8) & 0xff;
1187	buf[1] = (pid >> 0) & 0xff;
1188	ret = rtl2832_bulk_write(client, 0x066 + 2 * index, buf, 2);
1189	if (ret)
1190		goto err;
1191
1192	return 0;
1193err:
1194	dev_dbg(&client->dev, "failed=%d\n", ret);
1195	return ret;
1196}
1197
1198static int rtl2832_probe(struct i2c_client *client,
1199		const struct i2c_device_id *id)
1200{
1201	struct rtl2832_platform_data *pdata = client->dev.platform_data;
1202	struct i2c_adapter *i2c = client->adapter;
1203	struct rtl2832_dev *dev;
1204	int ret;
1205	u8 tmp;
1206	static const struct regmap_bus regmap_bus = {
1207		.read = rtl2832_regmap_read,
1208		.write = rtl2832_regmap_write,
1209		.gather_write = rtl2832_regmap_gather_write,
1210		.val_format_endian_default = REGMAP_ENDIAN_NATIVE,
1211	};
1212	static const struct regmap_range_cfg regmap_range_cfg[] = {
1213		{
1214			.selector_reg     = 0x00,
1215			.selector_mask    = 0xff,
1216			.selector_shift   = 0,
1217			.window_start     = 0,
1218			.window_len       = 0x100,
1219			.range_min        = 0 * 0x100,
1220			.range_max        = 5 * 0x100,
1221		},
1222	};
1223
1224	dev_dbg(&client->dev, "\n");
1225
1226	/* allocate memory for the internal state */
1227	dev = kzalloc(sizeof(struct rtl2832_dev), GFP_KERNEL);
1228	if (dev == NULL) {
1229		ret = -ENOMEM;
1230		goto err;
1231	}
1232
1233	/* setup the state */
1234	i2c_set_clientdata(client, dev);
1235	dev->client = client;
1236	dev->pdata = client->dev.platform_data;
1237	dev->sleeping = true;
1238	INIT_DELAYED_WORK(&dev->i2c_gate_work, rtl2832_i2c_gate_work);
1239	INIT_DELAYED_WORK(&dev->stat_work, rtl2832_stat_work);
1240	/* create regmap */
1241	mutex_init(&dev->regmap_mutex);
1242	dev->regmap_config.reg_bits =  8,
1243	dev->regmap_config.val_bits =  8,
1244	dev->regmap_config.lock = rtl2832_regmap_lock,
1245	dev->regmap_config.unlock = rtl2832_regmap_unlock,
1246	dev->regmap_config.lock_arg = dev,
1247	dev->regmap_config.volatile_reg = rtl2832_volatile_reg,
1248	dev->regmap_config.max_register = 5 * 0x100,
1249	dev->regmap_config.ranges = regmap_range_cfg,
1250	dev->regmap_config.num_ranges = ARRAY_SIZE(regmap_range_cfg),
1251	dev->regmap_config.cache_type = REGCACHE_NONE,
1252	dev->regmap = regmap_init(&client->dev, &regmap_bus, client,
1253				  &dev->regmap_config);
1254	if (IS_ERR(dev->regmap)) {
1255		ret = PTR_ERR(dev->regmap);
1256		goto err_kfree;
1257	}
1258
1259	/* check if the demod is there */
1260	ret = rtl2832_bulk_read(client, 0x000, &tmp, 1);
1261	if (ret)
1262		goto err_regmap_exit;
1263
1264	/* create muxed i2c adapter for demod tuner bus */
1265	dev->i2c_adapter_tuner = i2c_add_mux_adapter(i2c, &i2c->dev, dev,
1266			0, 0, 0, rtl2832_select, rtl2832_deselect);
1267	if (dev->i2c_adapter_tuner == NULL) {
1268		ret = -ENODEV;
1269		goto err_regmap_exit;
1270	}
1271
1272	/* create dvb_frontend */
1273	memcpy(&dev->fe.ops, &rtl2832_ops, sizeof(struct dvb_frontend_ops));
1274	dev->fe.demodulator_priv = dev;
1275
1276	/* setup callbacks */
1277	pdata->get_dvb_frontend = rtl2832_get_dvb_frontend;
1278	pdata->get_i2c_adapter = rtl2832_get_i2c_adapter;
1279	pdata->enable_slave_ts = rtl2832_enable_slave_ts;
1280	pdata->pid_filter = rtl2832_pid_filter;
1281	pdata->pid_filter_ctrl = rtl2832_pid_filter_ctrl;
1282	pdata->bulk_read = rtl2832_bulk_read;
1283	pdata->bulk_write = rtl2832_bulk_write;
1284	pdata->update_bits = rtl2832_update_bits;
1285
1286	dev_info(&client->dev, "Realtek RTL2832 successfully attached\n");
1287	return 0;
1288err_regmap_exit:
1289	regmap_exit(dev->regmap);
1290err_kfree:
1291	kfree(dev);
1292err:
1293	dev_dbg(&client->dev, "failed=%d\n", ret);
1294	return ret;
1295}
1296
1297static int rtl2832_remove(struct i2c_client *client)
1298{
1299	struct rtl2832_dev *dev = i2c_get_clientdata(client);
1300
1301	dev_dbg(&client->dev, "\n");
1302
1303	cancel_delayed_work_sync(&dev->i2c_gate_work);
1304
1305	i2c_del_mux_adapter(dev->i2c_adapter_tuner);
1306
1307	regmap_exit(dev->regmap);
1308
1309	kfree(dev);
1310
1311	return 0;
1312}
1313
1314static const struct i2c_device_id rtl2832_id_table[] = {
1315	{"rtl2832", 0},
1316	{}
1317};
1318MODULE_DEVICE_TABLE(i2c, rtl2832_id_table);
1319
1320static struct i2c_driver rtl2832_driver = {
1321	.driver = {
1322		.name	= "rtl2832",
1323	},
1324	.probe		= rtl2832_probe,
1325	.remove		= rtl2832_remove,
1326	.id_table	= rtl2832_id_table,
1327};
1328
1329module_i2c_driver(rtl2832_driver);
1330
1331MODULE_AUTHOR("Thomas Mair <mair.thomas86@gmail.com>");
1332MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1333MODULE_DESCRIPTION("Realtek RTL2832 DVB-T demodulator driver");
1334MODULE_LICENSE("GPL");
1335