1 /*
2  * Realtek RTL2832 DVB-T demodulator driver
3  *
4  * Copyright (C) 2012 Thomas Mair <thomas.mair86@gmail.com>
5  *
6  *	This program is free software; you can redistribute it and/or modify
7  *	it under the terms of the GNU General Public License as published by
8  *	the Free Software Foundation; either version 2 of the License, or
9  *	(at your option) any later version.
10  *
11  *	This program is distributed in the hope that it will be useful,
12  *	but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *	GNU General Public License for more details.
15  *
16  *	You should have received a copy of the GNU General Public License along
17  *	with this program; if not, write to the Free Software Foundation, Inc.,
18  *	51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19  */
20 
21 #include "rtl2832_priv.h"
22 #include "dvb_math.h"
23 #include <linux/bitops.h>
24 
25 /* Max transfer size done by I2C transfer functions */
26 #define MAX_XFER_SIZE  64
27 #define REG_MASK(b) (BIT(b + 1) - 1)
28 
29 static const struct rtl2832_reg_entry registers[] = {
30 	[DVBT_SOFT_RST]		= {0x1, 0x1,   2, 2},
31 	[DVBT_IIC_REPEAT]	= {0x1, 0x1,   3, 3},
32 	[DVBT_TR_WAIT_MIN_8K]	= {0x1, 0x88, 11, 2},
33 	[DVBT_RSD_BER_FAIL_VAL]	= {0x1, 0x8f, 15, 0},
34 	[DVBT_EN_BK_TRK]	= {0x1, 0xa6,  7, 7},
35 	[DVBT_AD_EN_REG]	= {0x0, 0x8,   7, 7},
36 	[DVBT_AD_EN_REG1]	= {0x0, 0x8,   6, 6},
37 	[DVBT_EN_BBIN]		= {0x1, 0xb1,  0, 0},
38 	[DVBT_MGD_THD0]		= {0x1, 0x95,  7, 0},
39 	[DVBT_MGD_THD1]		= {0x1, 0x96,  7, 0},
40 	[DVBT_MGD_THD2]		= {0x1, 0x97,  7, 0},
41 	[DVBT_MGD_THD3]		= {0x1, 0x98,  7, 0},
42 	[DVBT_MGD_THD4]		= {0x1, 0x99,  7, 0},
43 	[DVBT_MGD_THD5]		= {0x1, 0x9a,  7, 0},
44 	[DVBT_MGD_THD6]		= {0x1, 0x9b,  7, 0},
45 	[DVBT_MGD_THD7]		= {0x1, 0x9c,  7, 0},
46 	[DVBT_EN_CACQ_NOTCH]	= {0x1, 0x61,  4, 4},
47 	[DVBT_AD_AV_REF]	= {0x0, 0x9,   6, 0},
48 	[DVBT_REG_PI]		= {0x0, 0xa,   2, 0},
49 	[DVBT_PIP_ON]		= {0x0, 0x21,  3, 3},
50 	[DVBT_SCALE1_B92]	= {0x2, 0x92,  7, 0},
51 	[DVBT_SCALE1_B93]	= {0x2, 0x93,  7, 0},
52 	[DVBT_SCALE1_BA7]	= {0x2, 0xa7,  7, 0},
53 	[DVBT_SCALE1_BA9]	= {0x2, 0xa9,  7, 0},
54 	[DVBT_SCALE1_BAA]	= {0x2, 0xaa,  7, 0},
55 	[DVBT_SCALE1_BAB]	= {0x2, 0xab,  7, 0},
56 	[DVBT_SCALE1_BAC]	= {0x2, 0xac,  7, 0},
57 	[DVBT_SCALE1_BB0]	= {0x2, 0xb0,  7, 0},
58 	[DVBT_SCALE1_BB1]	= {0x2, 0xb1,  7, 0},
59 	[DVBT_KB_P1]		= {0x1, 0x64,  3, 1},
60 	[DVBT_KB_P2]		= {0x1, 0x64,  6, 4},
61 	[DVBT_KB_P3]		= {0x1, 0x65,  2, 0},
62 	[DVBT_OPT_ADC_IQ]	= {0x0, 0x6,   5, 4},
63 	[DVBT_AD_AVI]		= {0x0, 0x9,   1, 0},
64 	[DVBT_AD_AVQ]		= {0x0, 0x9,   3, 2},
65 	[DVBT_K1_CR_STEP12]	= {0x2, 0xad,  9, 4},
66 	[DVBT_TRK_KS_P2]	= {0x1, 0x6f,  2, 0},
67 	[DVBT_TRK_KS_I2]	= {0x1, 0x70,  5, 3},
68 	[DVBT_TR_THD_SET2]	= {0x1, 0x72,  3, 0},
69 	[DVBT_TRK_KC_P2]	= {0x1, 0x73,  5, 3},
70 	[DVBT_TRK_KC_I2]	= {0x1, 0x75,  2, 0},
71 	[DVBT_CR_THD_SET2]	= {0x1, 0x76,  7, 6},
72 	[DVBT_PSET_IFFREQ]	= {0x1, 0x19, 21, 0},
73 	[DVBT_SPEC_INV]		= {0x1, 0x15,  0, 0},
74 	[DVBT_RSAMP_RATIO]	= {0x1, 0x9f, 27, 2},
75 	[DVBT_CFREQ_OFF_RATIO]	= {0x1, 0x9d, 23, 4},
76 	[DVBT_FSM_STAGE]	= {0x3, 0x51,  6, 3},
77 	[DVBT_RX_CONSTEL]	= {0x3, 0x3c,  3, 2},
78 	[DVBT_RX_HIER]		= {0x3, 0x3c,  6, 4},
79 	[DVBT_RX_C_RATE_LP]	= {0x3, 0x3d,  2, 0},
80 	[DVBT_RX_C_RATE_HP]	= {0x3, 0x3d,  5, 3},
81 	[DVBT_GI_IDX]		= {0x3, 0x51,  1, 0},
82 	[DVBT_FFT_MODE_IDX]	= {0x3, 0x51,  2, 2},
83 	[DVBT_RSD_BER_EST]	= {0x3, 0x4e, 15, 0},
84 	[DVBT_CE_EST_EVM]	= {0x4, 0xc,  15, 0},
85 	[DVBT_RF_AGC_VAL]	= {0x3, 0x5b, 13, 0},
86 	[DVBT_IF_AGC_VAL]	= {0x3, 0x59, 13, 0},
87 	[DVBT_DAGC_VAL]		= {0x3, 0x5,   7, 0},
88 	[DVBT_SFREQ_OFF]	= {0x3, 0x18, 13, 0},
89 	[DVBT_CFREQ_OFF]	= {0x3, 0x5f, 17, 0},
90 	[DVBT_POLAR_RF_AGC]	= {0x0, 0xe,   1, 1},
91 	[DVBT_POLAR_IF_AGC]	= {0x0, 0xe,   0, 0},
92 	[DVBT_AAGC_HOLD]	= {0x1, 0x4,   5, 5},
93 	[DVBT_EN_RF_AGC]	= {0x1, 0x4,   6, 6},
94 	[DVBT_EN_IF_AGC]	= {0x1, 0x4,   7, 7},
95 	[DVBT_IF_AGC_MIN]	= {0x1, 0x8,   7, 0},
96 	[DVBT_IF_AGC_MAX]	= {0x1, 0x9,   7, 0},
97 	[DVBT_RF_AGC_MIN]	= {0x1, 0xa,   7, 0},
98 	[DVBT_RF_AGC_MAX]	= {0x1, 0xb,   7, 0},
99 	[DVBT_IF_AGC_MAN]	= {0x1, 0xc,   6, 6},
100 	[DVBT_IF_AGC_MAN_VAL]	= {0x1, 0xc,  13, 0},
101 	[DVBT_RF_AGC_MAN]	= {0x1, 0xe,   6, 6},
102 	[DVBT_RF_AGC_MAN_VAL]	= {0x1, 0xe,  13, 0},
103 	[DVBT_DAGC_TRG_VAL]	= {0x1, 0x12,  7, 0},
104 	[DVBT_AGC_TARG_VAL_0]	= {0x1, 0x2,   0, 0},
105 	[DVBT_AGC_TARG_VAL_8_1]	= {0x1, 0x3,   7, 0},
106 	[DVBT_AAGC_LOOP_GAIN]	= {0x1, 0xc7,  5, 1},
107 	[DVBT_LOOP_GAIN2_3_0]	= {0x1, 0x4,   4, 1},
108 	[DVBT_LOOP_GAIN2_4]	= {0x1, 0x5,   7, 7},
109 	[DVBT_LOOP_GAIN3]	= {0x1, 0xc8,  4, 0},
110 	[DVBT_VTOP1]		= {0x1, 0x6,   5, 0},
111 	[DVBT_VTOP2]		= {0x1, 0xc9,  5, 0},
112 	[DVBT_VTOP3]		= {0x1, 0xca,  5, 0},
113 	[DVBT_KRF1]		= {0x1, 0xcb,  7, 0},
114 	[DVBT_KRF2]		= {0x1, 0x7,   7, 0},
115 	[DVBT_KRF3]		= {0x1, 0xcd,  7, 0},
116 	[DVBT_KRF4]		= {0x1, 0xce,  7, 0},
117 	[DVBT_EN_GI_PGA]	= {0x1, 0xe5,  0, 0},
118 	[DVBT_THD_LOCK_UP]	= {0x1, 0xd9,  8, 0},
119 	[DVBT_THD_LOCK_DW]	= {0x1, 0xdb,  8, 0},
120 	[DVBT_THD_UP1]		= {0x1, 0xdd,  7, 0},
121 	[DVBT_THD_DW1]		= {0x1, 0xde,  7, 0},
122 	[DVBT_INTER_CNT_LEN]	= {0x1, 0xd8,  3, 0},
123 	[DVBT_GI_PGA_STATE]	= {0x1, 0xe6,  3, 3},
124 	[DVBT_EN_AGC_PGA]	= {0x1, 0xd7,  0, 0},
125 	[DVBT_CKOUTPAR]		= {0x1, 0x7b,  5, 5},
126 	[DVBT_CKOUT_PWR]	= {0x1, 0x7b,  6, 6},
127 	[DVBT_SYNC_DUR]		= {0x1, 0x7b,  7, 7},
128 	[DVBT_ERR_DUR]		= {0x1, 0x7c,  0, 0},
129 	[DVBT_SYNC_LVL]		= {0x1, 0x7c,  1, 1},
130 	[DVBT_ERR_LVL]		= {0x1, 0x7c,  2, 2},
131 	[DVBT_VAL_LVL]		= {0x1, 0x7c,  3, 3},
132 	[DVBT_SERIAL]		= {0x1, 0x7c,  4, 4},
133 	[DVBT_SER_LSB]		= {0x1, 0x7c,  5, 5},
134 	[DVBT_CDIV_PH0]		= {0x1, 0x7d,  3, 0},
135 	[DVBT_CDIV_PH1]		= {0x1, 0x7d,  7, 4},
136 	[DVBT_MPEG_IO_OPT_2_2]	= {0x0, 0x6,   7, 7},
137 	[DVBT_MPEG_IO_OPT_1_0]	= {0x0, 0x7,   7, 6},
138 	[DVBT_CKOUTPAR_PIP]	= {0x0, 0xb7,  4, 4},
139 	[DVBT_CKOUT_PWR_PIP]	= {0x0, 0xb7,  3, 3},
140 	[DVBT_SYNC_LVL_PIP]	= {0x0, 0xb7,  2, 2},
141 	[DVBT_ERR_LVL_PIP]	= {0x0, 0xb7,  1, 1},
142 	[DVBT_VAL_LVL_PIP]	= {0x0, 0xb7,  0, 0},
143 	[DVBT_CKOUTPAR_PID]	= {0x0, 0xb9,  4, 4},
144 	[DVBT_CKOUT_PWR_PID]	= {0x0, 0xb9,  3, 3},
145 	[DVBT_SYNC_LVL_PID]	= {0x0, 0xb9,  2, 2},
146 	[DVBT_ERR_LVL_PID]	= {0x0, 0xb9,  1, 1},
147 	[DVBT_VAL_LVL_PID]	= {0x0, 0xb9,  0, 0},
148 	[DVBT_SM_PASS]		= {0x1, 0x93, 11, 0},
149 	[DVBT_AD7_SETTING]	= {0x0, 0x11, 15, 0},
150 	[DVBT_RSSI_R]		= {0x3, 0x1,   6, 0},
151 	[DVBT_ACI_DET_IND]	= {0x3, 0x12,  0, 0},
152 	[DVBT_REG_MON]		= {0x0, 0xd,   1, 0},
153 	[DVBT_REG_MONSEL]	= {0x0, 0xd,   2, 2},
154 	[DVBT_REG_GPE]		= {0x0, 0xd,   7, 7},
155 	[DVBT_REG_GPO]		= {0x0, 0x10,  0, 0},
156 	[DVBT_REG_4MSEL]	= {0x0, 0x13,  0, 0},
157 };
158 
159 /* write multiple hardware registers */
160 static int rtl2832_wr(struct rtl2832_priv *priv, u8 reg, u8 *val, int len)
161 {
162 	int ret;
163 	u8 buf[MAX_XFER_SIZE];
164 	struct i2c_msg msg[1] = {
165 		{
166 			.addr = priv->cfg.i2c_addr,
167 			.flags = 0,
168 			.len = 1 + len,
169 			.buf = buf,
170 		}
171 	};
172 
173 	if (1 + len > sizeof(buf)) {
174 		dev_warn(&priv->i2c->dev,
175 			 "%s: i2c wr reg=%04x: len=%d is too big!\n",
176 			 KBUILD_MODNAME, reg, len);
177 		return -EINVAL;
178 	}
179 
180 	buf[0] = reg;
181 	memcpy(&buf[1], val, len);
182 
183 	ret = i2c_transfer(priv->i2c_adapter, msg, 1);
184 	if (ret == 1) {
185 		ret = 0;
186 	} else {
187 		dev_warn(&priv->i2c->dev,
188 				"%s: i2c wr failed=%d reg=%02x len=%d\n",
189 				KBUILD_MODNAME, ret, reg, len);
190 		ret = -EREMOTEIO;
191 	}
192 	return ret;
193 }
194 
195 /* read multiple hardware registers */
196 static int rtl2832_rd(struct rtl2832_priv *priv, u8 reg, u8 *val, int len)
197 {
198 	int ret;
199 	struct i2c_msg msg[2] = {
200 		{
201 			.addr = priv->cfg.i2c_addr,
202 			.flags = 0,
203 			.len = 1,
204 			.buf = &reg,
205 		}, {
206 			.addr = priv->cfg.i2c_addr,
207 			.flags = I2C_M_RD,
208 			.len = len,
209 			.buf = val,
210 		}
211 	};
212 
213 	ret = i2c_transfer(priv->i2c_adapter, msg, 2);
214 	if (ret == 2) {
215 		ret = 0;
216 	} else {
217 		dev_warn(&priv->i2c->dev,
218 				"%s: i2c rd failed=%d reg=%02x len=%d\n",
219 				KBUILD_MODNAME, ret, reg, len);
220 		ret = -EREMOTEIO;
221 	}
222 	return ret;
223 }
224 
225 /* write multiple registers */
226 static int rtl2832_wr_regs(struct rtl2832_priv *priv, u8 reg, u8 page, u8 *val,
227 	int len)
228 {
229 	int ret;
230 
231 	/* switch bank if needed */
232 	if (page != priv->page) {
233 		ret = rtl2832_wr(priv, 0x00, &page, 1);
234 		if (ret)
235 			return ret;
236 
237 		priv->page = page;
238 }
239 
240 return rtl2832_wr(priv, reg, val, len);
241 }
242 
243 /* read multiple registers */
244 static int rtl2832_rd_regs(struct rtl2832_priv *priv, u8 reg, u8 page, u8 *val,
245 	int len)
246 {
247 	int ret;
248 
249 	/* switch bank if needed */
250 	if (page != priv->page) {
251 		ret = rtl2832_wr(priv, 0x00, &page, 1);
252 		if (ret)
253 			return ret;
254 
255 		priv->page = page;
256 	}
257 
258 	return rtl2832_rd(priv, reg, val, len);
259 }
260 
261 #if 0 /* currently not used */
262 /* write single register */
263 static int rtl2832_wr_reg(struct rtl2832_priv *priv, u8 reg, u8 page, u8 val)
264 {
265 	return rtl2832_wr_regs(priv, reg, page, &val, 1);
266 }
267 #endif
268 
269 /* read single register */
270 static int rtl2832_rd_reg(struct rtl2832_priv *priv, u8 reg, u8 page, u8 *val)
271 {
272 	return rtl2832_rd_regs(priv, reg, page, val, 1);
273 }
274 
275 static int rtl2832_rd_demod_reg(struct rtl2832_priv *priv, int reg, u32 *val)
276 {
277 	int ret;
278 
279 	u8 reg_start_addr;
280 	u8 msb, lsb;
281 	u8 page;
282 	u8 reading[4];
283 	u32 reading_tmp;
284 	int i;
285 
286 	u8 len;
287 	u32 mask;
288 
289 	reg_start_addr = registers[reg].start_address;
290 	msb = registers[reg].msb;
291 	lsb = registers[reg].lsb;
292 	page = registers[reg].page;
293 
294 	len = (msb >> 3) + 1;
295 	mask = REG_MASK(msb - lsb);
296 
297 	ret = rtl2832_rd_regs(priv, reg_start_addr, page, &reading[0], len);
298 	if (ret)
299 		goto err;
300 
301 	reading_tmp = 0;
302 	for (i = 0; i < len; i++)
303 		reading_tmp |= reading[i] << ((len - 1 - i) * 8);
304 
305 	*val = (reading_tmp >> lsb) & mask;
306 
307 	return ret;
308 
309 err:
310 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
311 	return ret;
312 
313 }
314 
315 static int rtl2832_wr_demod_reg(struct rtl2832_priv *priv, int reg, u32 val)
316 {
317 	int ret, i;
318 	u8 len;
319 	u8 reg_start_addr;
320 	u8 msb, lsb;
321 	u8 page;
322 	u32 mask;
323 
324 
325 	u8 reading[4];
326 	u8 writing[4];
327 	u32 reading_tmp;
328 	u32 writing_tmp;
329 
330 
331 	reg_start_addr = registers[reg].start_address;
332 	msb = registers[reg].msb;
333 	lsb = registers[reg].lsb;
334 	page = registers[reg].page;
335 
336 	len = (msb >> 3) + 1;
337 	mask = REG_MASK(msb - lsb);
338 
339 
340 	ret = rtl2832_rd_regs(priv, reg_start_addr, page, &reading[0], len);
341 	if (ret)
342 		goto err;
343 
344 	reading_tmp = 0;
345 	for (i = 0; i < len; i++)
346 		reading_tmp |= reading[i] << ((len - 1 - i) * 8);
347 
348 	writing_tmp = reading_tmp & ~(mask << lsb);
349 	writing_tmp |= ((val & mask) << lsb);
350 
351 
352 	for (i = 0; i < len; i++)
353 		writing[i] = (writing_tmp >> ((len - 1 - i) * 8)) & 0xff;
354 
355 	ret = rtl2832_wr_regs(priv, reg_start_addr, page, &writing[0], len);
356 	if (ret)
357 		goto err;
358 
359 	return ret;
360 
361 err:
362 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
363 	return ret;
364 
365 }
366 
367 static int rtl2832_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
368 {
369 	int ret;
370 	struct rtl2832_priv *priv = fe->demodulator_priv;
371 
372 	dev_dbg(&priv->i2c->dev, "%s: enable=%d\n", __func__, enable);
373 
374 	/* gate already open or close */
375 	if (priv->i2c_gate_state == enable)
376 		return 0;
377 
378 	ret = rtl2832_wr_demod_reg(priv, DVBT_IIC_REPEAT, (enable ? 0x1 : 0x0));
379 	if (ret)
380 		goto err;
381 
382 	priv->i2c_gate_state = enable;
383 
384 	return ret;
385 err:
386 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
387 	return ret;
388 }
389 
390 
391 static int rtl2832_set_if(struct dvb_frontend *fe, u32 if_freq)
392 {
393 	struct rtl2832_priv *priv = fe->demodulator_priv;
394 	int ret;
395 	u64 pset_iffreq;
396 	u8 en_bbin = (if_freq == 0 ? 0x1 : 0x0);
397 
398 	/*
399 	* PSET_IFFREQ = - floor((IfFreqHz % CrystalFreqHz) * pow(2, 22)
400 	*		/ CrystalFreqHz)
401 	*/
402 
403 	pset_iffreq = if_freq % priv->cfg.xtal;
404 	pset_iffreq *= 0x400000;
405 	pset_iffreq = div_u64(pset_iffreq, priv->cfg.xtal);
406 	pset_iffreq = -pset_iffreq;
407 	pset_iffreq = pset_iffreq & 0x3fffff;
408 	dev_dbg(&priv->i2c->dev, "%s: if_frequency=%d pset_iffreq=%08x\n",
409 			__func__, if_freq, (unsigned)pset_iffreq);
410 
411 	ret = rtl2832_wr_demod_reg(priv, DVBT_EN_BBIN, en_bbin);
412 	if (ret)
413 		return ret;
414 
415 	ret = rtl2832_wr_demod_reg(priv, DVBT_PSET_IFFREQ, pset_iffreq);
416 
417 	return ret;
418 }
419 
420 static int rtl2832_init(struct dvb_frontend *fe)
421 {
422 	struct rtl2832_priv *priv = fe->demodulator_priv;
423 	const struct rtl2832_reg_value *init;
424 	int i, ret, len;
425 
426 	/* initialization values for the demodulator registers */
427 	struct rtl2832_reg_value rtl2832_initial_regs[] = {
428 		{DVBT_AD_EN_REG,		0x1},
429 		{DVBT_AD_EN_REG1,		0x1},
430 		{DVBT_RSD_BER_FAIL_VAL,		0x2800},
431 		{DVBT_MGD_THD0,			0x10},
432 		{DVBT_MGD_THD1,			0x20},
433 		{DVBT_MGD_THD2,			0x20},
434 		{DVBT_MGD_THD3,			0x40},
435 		{DVBT_MGD_THD4,			0x22},
436 		{DVBT_MGD_THD5,			0x32},
437 		{DVBT_MGD_THD6,			0x37},
438 		{DVBT_MGD_THD7,			0x39},
439 		{DVBT_EN_BK_TRK,		0x0},
440 		{DVBT_EN_CACQ_NOTCH,		0x0},
441 		{DVBT_AD_AV_REF,		0x2a},
442 		{DVBT_REG_PI,			0x6},
443 		{DVBT_PIP_ON,			0x0},
444 		{DVBT_CDIV_PH0,			0x8},
445 		{DVBT_CDIV_PH1,			0x8},
446 		{DVBT_SCALE1_B92,		0x4},
447 		{DVBT_SCALE1_B93,		0xb0},
448 		{DVBT_SCALE1_BA7,		0x78},
449 		{DVBT_SCALE1_BA9,		0x28},
450 		{DVBT_SCALE1_BAA,		0x59},
451 		{DVBT_SCALE1_BAB,		0x83},
452 		{DVBT_SCALE1_BAC,		0xd4},
453 		{DVBT_SCALE1_BB0,		0x65},
454 		{DVBT_SCALE1_BB1,		0x43},
455 		{DVBT_KB_P1,			0x1},
456 		{DVBT_KB_P2,			0x4},
457 		{DVBT_KB_P3,			0x7},
458 		{DVBT_K1_CR_STEP12,		0xa},
459 		{DVBT_REG_GPE,			0x1},
460 		{DVBT_SERIAL,			0x0},
461 		{DVBT_CDIV_PH0,			0x9},
462 		{DVBT_CDIV_PH1,			0x9},
463 		{DVBT_MPEG_IO_OPT_2_2,		0x0},
464 		{DVBT_MPEG_IO_OPT_1_0,		0x0},
465 		{DVBT_TRK_KS_P2,		0x4},
466 		{DVBT_TRK_KS_I2,		0x7},
467 		{DVBT_TR_THD_SET2,		0x6},
468 		{DVBT_TRK_KC_I2,		0x5},
469 		{DVBT_CR_THD_SET2,		0x1},
470 	};
471 
472 	dev_dbg(&priv->i2c->dev, "%s:\n", __func__);
473 
474 	for (i = 0; i < ARRAY_SIZE(rtl2832_initial_regs); i++) {
475 		ret = rtl2832_wr_demod_reg(priv, rtl2832_initial_regs[i].reg,
476 			rtl2832_initial_regs[i].value);
477 		if (ret)
478 			goto err;
479 	}
480 
481 	/* load tuner specific settings */
482 	dev_dbg(&priv->i2c->dev, "%s: load settings for tuner=%02x\n",
483 			__func__, priv->cfg.tuner);
484 	switch (priv->cfg.tuner) {
485 	case RTL2832_TUNER_FC0012:
486 	case RTL2832_TUNER_FC0013:
487 		len = ARRAY_SIZE(rtl2832_tuner_init_fc0012);
488 		init = rtl2832_tuner_init_fc0012;
489 		break;
490 	case RTL2832_TUNER_TUA9001:
491 		len = ARRAY_SIZE(rtl2832_tuner_init_tua9001);
492 		init = rtl2832_tuner_init_tua9001;
493 		break;
494 	case RTL2832_TUNER_E4000:
495 		len = ARRAY_SIZE(rtl2832_tuner_init_e4000);
496 		init = rtl2832_tuner_init_e4000;
497 		break;
498 	case RTL2832_TUNER_R820T:
499 	case RTL2832_TUNER_R828D:
500 		len = ARRAY_SIZE(rtl2832_tuner_init_r820t);
501 		init = rtl2832_tuner_init_r820t;
502 		break;
503 	default:
504 		ret = -EINVAL;
505 		goto err;
506 	}
507 
508 	for (i = 0; i < len; i++) {
509 		ret = rtl2832_wr_demod_reg(priv, init[i].reg, init[i].value);
510 		if (ret)
511 			goto err;
512 	}
513 
514 	/*
515 	 * r820t NIM code does a software reset here at the demod -
516 	 * may not be needed, as there's already a software reset at
517 	 * set_params()
518 	 */
519 #if 1
520 	/* soft reset */
521 	ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x1);
522 	if (ret)
523 		goto err;
524 
525 	ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x0);
526 	if (ret)
527 		goto err;
528 #endif
529 
530 	priv->sleeping = false;
531 
532 	return ret;
533 
534 err:
535 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
536 	return ret;
537 }
538 
539 static int rtl2832_sleep(struct dvb_frontend *fe)
540 {
541 	struct rtl2832_priv *priv = fe->demodulator_priv;
542 
543 	dev_dbg(&priv->i2c->dev, "%s:\n", __func__);
544 	priv->sleeping = true;
545 	return 0;
546 }
547 
548 static int rtl2832_get_tune_settings(struct dvb_frontend *fe,
549 	struct dvb_frontend_tune_settings *s)
550 {
551 	struct rtl2832_priv *priv = fe->demodulator_priv;
552 
553 	dev_dbg(&priv->i2c->dev, "%s:\n", __func__);
554 	s->min_delay_ms = 1000;
555 	s->step_size = fe->ops.info.frequency_stepsize * 2;
556 	s->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;
557 	return 0;
558 }
559 
560 static int rtl2832_set_frontend(struct dvb_frontend *fe)
561 {
562 	struct rtl2832_priv *priv = fe->demodulator_priv;
563 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
564 	int ret, i, j;
565 	u64 bw_mode, num, num2;
566 	u32 resamp_ratio, cfreq_off_ratio;
567 	static u8 bw_params[3][32] = {
568 	/* 6 MHz bandwidth */
569 		{
570 		0xf5, 0xff, 0x15, 0x38, 0x5d, 0x6d, 0x52, 0x07, 0xfa, 0x2f,
571 		0x53, 0xf5, 0x3f, 0xca, 0x0b, 0x91, 0xea, 0x30, 0x63, 0xb2,
572 		0x13, 0xda, 0x0b, 0xc4, 0x18, 0x7e, 0x16, 0x66, 0x08, 0x67,
573 		0x19, 0xe0,
574 		},
575 
576 	/*  7 MHz bandwidth */
577 		{
578 		0xe7, 0xcc, 0xb5, 0xba, 0xe8, 0x2f, 0x67, 0x61, 0x00, 0xaf,
579 		0x86, 0xf2, 0xbf, 0x59, 0x04, 0x11, 0xb6, 0x33, 0xa4, 0x30,
580 		0x15, 0x10, 0x0a, 0x42, 0x18, 0xf8, 0x17, 0xd9, 0x07, 0x22,
581 		0x19, 0x10,
582 		},
583 
584 	/*  8 MHz bandwidth */
585 		{
586 		0x09, 0xf6, 0xd2, 0xa7, 0x9a, 0xc9, 0x27, 0x77, 0x06, 0xbf,
587 		0xec, 0xf4, 0x4f, 0x0b, 0xfc, 0x01, 0x63, 0x35, 0x54, 0xa7,
588 		0x16, 0x66, 0x08, 0xb4, 0x19, 0x6e, 0x19, 0x65, 0x05, 0xc8,
589 		0x19, 0xe0,
590 		},
591 	};
592 
593 
594 	dev_dbg(&priv->i2c->dev,
595 			"%s: frequency=%d bandwidth_hz=%d inversion=%d\n",
596 			__func__, c->frequency, c->bandwidth_hz, c->inversion);
597 
598 	/* program tuner */
599 	if (fe->ops.tuner_ops.set_params)
600 		fe->ops.tuner_ops.set_params(fe);
601 
602 	/* If the frontend has get_if_frequency(), use it */
603 	if (fe->ops.tuner_ops.get_if_frequency) {
604 		u32 if_freq;
605 
606 		ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
607 		if (ret)
608 			goto err;
609 
610 		ret = rtl2832_set_if(fe, if_freq);
611 		if (ret)
612 			goto err;
613 	}
614 
615 	switch (c->bandwidth_hz) {
616 	case 6000000:
617 		i = 0;
618 		bw_mode = 48000000;
619 		break;
620 	case 7000000:
621 		i = 1;
622 		bw_mode = 56000000;
623 		break;
624 	case 8000000:
625 		i = 2;
626 		bw_mode = 64000000;
627 		break;
628 	default:
629 		dev_dbg(&priv->i2c->dev, "%s: invalid bandwidth\n", __func__);
630 		return -EINVAL;
631 	}
632 
633 	for (j = 0; j < sizeof(bw_params[0]); j++) {
634 		ret = rtl2832_wr_regs(priv, 0x1c+j, 1, &bw_params[i][j], 1);
635 		if (ret)
636 			goto err;
637 	}
638 
639 	/* calculate and set resample ratio
640 	* RSAMP_RATIO = floor(CrystalFreqHz * 7 * pow(2, 22)
641 	*	/ ConstWithBandwidthMode)
642 	*/
643 	num = priv->cfg.xtal * 7;
644 	num *= 0x400000;
645 	num = div_u64(num, bw_mode);
646 	resamp_ratio =  num & 0x3ffffff;
647 	ret = rtl2832_wr_demod_reg(priv, DVBT_RSAMP_RATIO, resamp_ratio);
648 	if (ret)
649 		goto err;
650 
651 	/* calculate and set cfreq off ratio
652 	* CFREQ_OFF_RATIO = - floor(ConstWithBandwidthMode * pow(2, 20)
653 	*	/ (CrystalFreqHz * 7))
654 	*/
655 	num = bw_mode << 20;
656 	num2 = priv->cfg.xtal * 7;
657 	num = div_u64(num, num2);
658 	num = -num;
659 	cfreq_off_ratio = num & 0xfffff;
660 	ret = rtl2832_wr_demod_reg(priv, DVBT_CFREQ_OFF_RATIO, cfreq_off_ratio);
661 	if (ret)
662 		goto err;
663 
664 
665 	/* soft reset */
666 	ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x1);
667 	if (ret)
668 		goto err;
669 
670 	ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x0);
671 	if (ret)
672 		goto err;
673 
674 	return ret;
675 err:
676 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
677 	return ret;
678 }
679 
680 static int rtl2832_get_frontend(struct dvb_frontend *fe)
681 {
682 	struct rtl2832_priv *priv = fe->demodulator_priv;
683 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
684 	int ret;
685 	u8 buf[3];
686 
687 	if (priv->sleeping)
688 		return 0;
689 
690 	ret = rtl2832_rd_regs(priv, 0x3c, 3, buf, 2);
691 	if (ret)
692 		goto err;
693 
694 	ret = rtl2832_rd_reg(priv, 0x51, 3, &buf[2]);
695 	if (ret)
696 		goto err;
697 
698 	dev_dbg(&priv->i2c->dev, "%s: TPS=%*ph\n", __func__, 3, buf);
699 
700 	switch ((buf[0] >> 2) & 3) {
701 	case 0:
702 		c->modulation = QPSK;
703 		break;
704 	case 1:
705 		c->modulation = QAM_16;
706 		break;
707 	case 2:
708 		c->modulation = QAM_64;
709 		break;
710 	}
711 
712 	switch ((buf[2] >> 2) & 1) {
713 	case 0:
714 		c->transmission_mode = TRANSMISSION_MODE_2K;
715 		break;
716 	case 1:
717 		c->transmission_mode = TRANSMISSION_MODE_8K;
718 	}
719 
720 	switch ((buf[2] >> 0) & 3) {
721 	case 0:
722 		c->guard_interval = GUARD_INTERVAL_1_32;
723 		break;
724 	case 1:
725 		c->guard_interval = GUARD_INTERVAL_1_16;
726 		break;
727 	case 2:
728 		c->guard_interval = GUARD_INTERVAL_1_8;
729 		break;
730 	case 3:
731 		c->guard_interval = GUARD_INTERVAL_1_4;
732 		break;
733 	}
734 
735 	switch ((buf[0] >> 4) & 7) {
736 	case 0:
737 		c->hierarchy = HIERARCHY_NONE;
738 		break;
739 	case 1:
740 		c->hierarchy = HIERARCHY_1;
741 		break;
742 	case 2:
743 		c->hierarchy = HIERARCHY_2;
744 		break;
745 	case 3:
746 		c->hierarchy = HIERARCHY_4;
747 		break;
748 	}
749 
750 	switch ((buf[1] >> 3) & 7) {
751 	case 0:
752 		c->code_rate_HP = FEC_1_2;
753 		break;
754 	case 1:
755 		c->code_rate_HP = FEC_2_3;
756 		break;
757 	case 2:
758 		c->code_rate_HP = FEC_3_4;
759 		break;
760 	case 3:
761 		c->code_rate_HP = FEC_5_6;
762 		break;
763 	case 4:
764 		c->code_rate_HP = FEC_7_8;
765 		break;
766 	}
767 
768 	switch ((buf[1] >> 0) & 7) {
769 	case 0:
770 		c->code_rate_LP = FEC_1_2;
771 		break;
772 	case 1:
773 		c->code_rate_LP = FEC_2_3;
774 		break;
775 	case 2:
776 		c->code_rate_LP = FEC_3_4;
777 		break;
778 	case 3:
779 		c->code_rate_LP = FEC_5_6;
780 		break;
781 	case 4:
782 		c->code_rate_LP = FEC_7_8;
783 		break;
784 	}
785 
786 	return 0;
787 err:
788 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
789 	return ret;
790 }
791 
792 static int rtl2832_read_status(struct dvb_frontend *fe, fe_status_t *status)
793 {
794 	struct rtl2832_priv *priv = fe->demodulator_priv;
795 	int ret;
796 	u32 tmp;
797 	*status = 0;
798 
799 	dev_dbg(&priv->i2c->dev, "%s:\n", __func__);
800 	if (priv->sleeping)
801 		return 0;
802 
803 	ret = rtl2832_rd_demod_reg(priv, DVBT_FSM_STAGE, &tmp);
804 	if (ret)
805 		goto err;
806 
807 	if (tmp == 11) {
808 		*status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
809 				FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
810 	}
811 	/* TODO find out if this is also true for rtl2832? */
812 	/*else if (tmp == 10) {
813 		*status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
814 				FE_HAS_VITERBI;
815 	}*/
816 
817 	return ret;
818 err:
819 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
820 	return ret;
821 }
822 
823 static int rtl2832_read_snr(struct dvb_frontend *fe, u16 *snr)
824 {
825 	struct rtl2832_priv *priv = fe->demodulator_priv;
826 	int ret, hierarchy, constellation;
827 	u8 buf[2], tmp;
828 	u16 tmp16;
829 #define CONSTELLATION_NUM 3
830 #define HIERARCHY_NUM 4
831 	static const u32 snr_constant[CONSTELLATION_NUM][HIERARCHY_NUM] = {
832 		{ 85387325, 85387325, 85387325, 85387325 },
833 		{ 86676178, 86676178, 87167949, 87795660 },
834 		{ 87659938, 87659938, 87885178, 88241743 },
835 	};
836 
837 	/* reports SNR in resolution of 0.1 dB */
838 
839 	ret = rtl2832_rd_reg(priv, 0x3c, 3, &tmp);
840 	if (ret)
841 		goto err;
842 
843 	constellation = (tmp >> 2) & 0x03; /* [3:2] */
844 	if (constellation > CONSTELLATION_NUM - 1)
845 		goto err;
846 
847 	hierarchy = (tmp >> 4) & 0x07; /* [6:4] */
848 	if (hierarchy > HIERARCHY_NUM - 1)
849 		goto err;
850 
851 	ret = rtl2832_rd_regs(priv, 0x0c, 4, buf, 2);
852 	if (ret)
853 		goto err;
854 
855 	tmp16 = buf[0] << 8 | buf[1];
856 
857 	if (tmp16)
858 		*snr = (snr_constant[constellation][hierarchy] -
859 				intlog10(tmp16)) / ((1 << 24) / 100);
860 	else
861 		*snr = 0;
862 
863 	return 0;
864 err:
865 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
866 	return ret;
867 }
868 
869 static int rtl2832_read_ber(struct dvb_frontend *fe, u32 *ber)
870 {
871 	struct rtl2832_priv *priv = fe->demodulator_priv;
872 	int ret;
873 	u8 buf[2];
874 
875 	ret = rtl2832_rd_regs(priv, 0x4e, 3, buf, 2);
876 	if (ret)
877 		goto err;
878 
879 	*ber = buf[0] << 8 | buf[1];
880 
881 	return 0;
882 err:
883 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
884 	return ret;
885 }
886 
887 static struct dvb_frontend_ops rtl2832_ops;
888 
889 static void rtl2832_release(struct dvb_frontend *fe)
890 {
891 	struct rtl2832_priv *priv = fe->demodulator_priv;
892 
893 	dev_dbg(&priv->i2c->dev, "%s:\n", __func__);
894 	cancel_delayed_work_sync(&priv->i2c_gate_work);
895 	i2c_del_mux_adapter(priv->i2c_adapter_tuner);
896 	i2c_del_mux_adapter(priv->i2c_adapter);
897 	kfree(priv);
898 }
899 
900 /*
901  * Delay mechanism to avoid unneeded I2C gate open / close. Gate close is
902  * delayed here a little bit in order to see if there is sequence of I2C
903  * messages sent to same I2C bus.
904  * We must use unlocked version of __i2c_transfer() in order to avoid deadlock
905  * as lock is already taken by calling muxed i2c_transfer().
906  */
907 static void rtl2832_i2c_gate_work(struct work_struct *work)
908 {
909 	struct rtl2832_priv *priv = container_of(work,
910 			struct rtl2832_priv, i2c_gate_work.work);
911 	struct i2c_adapter *adap = priv->i2c;
912 	int ret;
913 	u8 buf[2];
914 	struct i2c_msg msg[1] = {
915 		{
916 			.addr = priv->cfg.i2c_addr,
917 			.flags = 0,
918 			.len = sizeof(buf),
919 			.buf = buf,
920 		}
921 	};
922 
923 	/* select reg bank 1 */
924 	buf[0] = 0x00;
925 	buf[1] = 0x01;
926 	ret = __i2c_transfer(adap, msg, 1);
927 	if (ret != 1)
928 		goto err;
929 
930 	priv->page = 1;
931 
932 	/* close I2C repeater gate */
933 	buf[0] = 0x01;
934 	buf[1] = 0x10;
935 	ret = __i2c_transfer(adap, msg, 1);
936 	if (ret != 1)
937 		goto err;
938 
939 	priv->i2c_gate_state = false;
940 
941 	return;
942 err:
943 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
944 
945 	return;
946 }
947 
948 static int rtl2832_select(struct i2c_adapter *adap, void *mux_priv, u32 chan_id)
949 {
950 	struct rtl2832_priv *priv = mux_priv;
951 	int ret;
952 	u8 buf[2], val;
953 	struct i2c_msg msg[1] = {
954 		{
955 			.addr = priv->cfg.i2c_addr,
956 			.flags = 0,
957 			.len = sizeof(buf),
958 			.buf = buf,
959 		}
960 	};
961 	struct i2c_msg msg_rd[2] = {
962 		{
963 			.addr = priv->cfg.i2c_addr,
964 			.flags = 0,
965 			.len = 1,
966 			.buf = "\x01",
967 		}, {
968 			.addr = priv->cfg.i2c_addr,
969 			.flags = I2C_M_RD,
970 			.len = 1,
971 			.buf = &val,
972 		}
973 	};
974 
975 	/* terminate possible gate closing */
976 	cancel_delayed_work_sync(&priv->i2c_gate_work);
977 
978 	if (priv->i2c_gate_state == chan_id)
979 		return 0;
980 
981 	/* select reg bank 1 */
982 	buf[0] = 0x00;
983 	buf[1] = 0x01;
984 	ret = __i2c_transfer(adap, msg, 1);
985 	if (ret != 1)
986 		goto err;
987 
988 	priv->page = 1;
989 
990 	/* we must read that register, otherwise there will be errors */
991 	ret = __i2c_transfer(adap, msg_rd, 2);
992 	if (ret != 2)
993 		goto err;
994 
995 	/* open or close I2C repeater gate */
996 	buf[0] = 0x01;
997 	if (chan_id == 1)
998 		buf[1] = 0x18; /* open */
999 	else
1000 		buf[1] = 0x10; /* close */
1001 
1002 	ret = __i2c_transfer(adap, msg, 1);
1003 	if (ret != 1)
1004 		goto err;
1005 
1006 	priv->i2c_gate_state = chan_id;
1007 
1008 	return 0;
1009 err:
1010 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
1011 
1012 	return -EREMOTEIO;
1013 }
1014 
1015 static int rtl2832_deselect(struct i2c_adapter *adap, void *mux_priv,
1016 		u32 chan_id)
1017 {
1018 	struct rtl2832_priv *priv = mux_priv;
1019 	schedule_delayed_work(&priv->i2c_gate_work, usecs_to_jiffies(100));
1020 	return 0;
1021 }
1022 
1023 struct i2c_adapter *rtl2832_get_i2c_adapter(struct dvb_frontend *fe)
1024 {
1025 	struct rtl2832_priv *priv = fe->demodulator_priv;
1026 	return priv->i2c_adapter_tuner;
1027 }
1028 EXPORT_SYMBOL(rtl2832_get_i2c_adapter);
1029 
1030 struct i2c_adapter *rtl2832_get_private_i2c_adapter(struct dvb_frontend *fe)
1031 {
1032 	struct rtl2832_priv *priv = fe->demodulator_priv;
1033 	return priv->i2c_adapter;
1034 }
1035 EXPORT_SYMBOL(rtl2832_get_private_i2c_adapter);
1036 
1037 struct dvb_frontend *rtl2832_attach(const struct rtl2832_config *cfg,
1038 	struct i2c_adapter *i2c)
1039 {
1040 	struct rtl2832_priv *priv = NULL;
1041 	int ret = 0;
1042 	u8 tmp;
1043 
1044 	dev_dbg(&i2c->dev, "%s:\n", __func__);
1045 
1046 	/* allocate memory for the internal state */
1047 	priv = kzalloc(sizeof(struct rtl2832_priv), GFP_KERNEL);
1048 	if (priv == NULL)
1049 		goto err;
1050 
1051 	/* setup the priv */
1052 	priv->i2c = i2c;
1053 	priv->tuner = cfg->tuner;
1054 	memcpy(&priv->cfg, cfg, sizeof(struct rtl2832_config));
1055 	INIT_DELAYED_WORK(&priv->i2c_gate_work, rtl2832_i2c_gate_work);
1056 
1057 	/* create muxed i2c adapter for demod itself */
1058 	priv->i2c_adapter = i2c_add_mux_adapter(i2c, &i2c->dev, priv, 0, 0, 0,
1059 			rtl2832_select, NULL);
1060 	if (priv->i2c_adapter == NULL)
1061 		goto err;
1062 
1063 	/* check if the demod is there */
1064 	ret = rtl2832_rd_reg(priv, 0x00, 0x0, &tmp);
1065 	if (ret)
1066 		goto err;
1067 
1068 	/* create muxed i2c adapter for demod tuner bus */
1069 	priv->i2c_adapter_tuner = i2c_add_mux_adapter(i2c, &i2c->dev, priv,
1070 			0, 1, 0, rtl2832_select, rtl2832_deselect);
1071 	if (priv->i2c_adapter_tuner == NULL)
1072 		goto err;
1073 
1074 	/* create dvb_frontend */
1075 	memcpy(&priv->fe.ops, &rtl2832_ops, sizeof(struct dvb_frontend_ops));
1076 	priv->fe.demodulator_priv = priv;
1077 
1078 	/* TODO implement sleep mode */
1079 	priv->sleeping = true;
1080 
1081 	return &priv->fe;
1082 err:
1083 	dev_dbg(&i2c->dev, "%s: failed=%d\n", __func__, ret);
1084 	if (priv && priv->i2c_adapter)
1085 		i2c_del_mux_adapter(priv->i2c_adapter);
1086 	kfree(priv);
1087 	return NULL;
1088 }
1089 EXPORT_SYMBOL(rtl2832_attach);
1090 
1091 static struct dvb_frontend_ops rtl2832_ops = {
1092 	.delsys = { SYS_DVBT },
1093 	.info = {
1094 		.name = "Realtek RTL2832 (DVB-T)",
1095 		.frequency_min	  = 174000000,
1096 		.frequency_max	  = 862000000,
1097 		.frequency_stepsize = 166667,
1098 		.caps = FE_CAN_FEC_1_2 |
1099 			FE_CAN_FEC_2_3 |
1100 			FE_CAN_FEC_3_4 |
1101 			FE_CAN_FEC_5_6 |
1102 			FE_CAN_FEC_7_8 |
1103 			FE_CAN_FEC_AUTO |
1104 			FE_CAN_QPSK |
1105 			FE_CAN_QAM_16 |
1106 			FE_CAN_QAM_64 |
1107 			FE_CAN_QAM_AUTO |
1108 			FE_CAN_TRANSMISSION_MODE_AUTO |
1109 			FE_CAN_GUARD_INTERVAL_AUTO |
1110 			FE_CAN_HIERARCHY_AUTO |
1111 			FE_CAN_RECOVER |
1112 			FE_CAN_MUTE_TS
1113 	 },
1114 
1115 	.release = rtl2832_release,
1116 
1117 	.init = rtl2832_init,
1118 	.sleep = rtl2832_sleep,
1119 
1120 	.get_tune_settings = rtl2832_get_tune_settings,
1121 
1122 	.set_frontend = rtl2832_set_frontend,
1123 	.get_frontend = rtl2832_get_frontend,
1124 
1125 	.read_status = rtl2832_read_status,
1126 	.read_snr = rtl2832_read_snr,
1127 	.read_ber = rtl2832_read_ber,
1128 
1129 	.i2c_gate_ctrl = rtl2832_i2c_gate_ctrl,
1130 };
1131 
1132 MODULE_AUTHOR("Thomas Mair <mair.thomas86@gmail.com>");
1133 MODULE_DESCRIPTION("Realtek RTL2832 DVB-T demodulator driver");
1134 MODULE_LICENSE("GPL");
1135 MODULE_VERSION("0.5");
1136