[media] rtl2832: remove exported resources
[deliverable/linux.git] / drivers / media / dvb-frontends / rtl2832.c
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 /* write single register */
262 static int rtl2832_wr_reg(struct rtl2832_priv *priv, u8 reg, u8 page, u8 val)
263 {
264 return rtl2832_wr_regs(priv, reg, page, &val, 1);
265 }
266
267 /* read single register */
268 static int rtl2832_rd_reg(struct rtl2832_priv *priv, u8 reg, u8 page, u8 *val)
269 {
270 return rtl2832_rd_regs(priv, reg, page, val, 1);
271 }
272
273 static int rtl2832_rd_demod_reg(struct rtl2832_priv *priv, int reg, u32 *val)
274 {
275 int ret;
276
277 u8 reg_start_addr;
278 u8 msb, lsb;
279 u8 page;
280 u8 reading[4];
281 u32 reading_tmp;
282 int i;
283
284 u8 len;
285 u32 mask;
286
287 reg_start_addr = registers[reg].start_address;
288 msb = registers[reg].msb;
289 lsb = registers[reg].lsb;
290 page = registers[reg].page;
291
292 len = (msb >> 3) + 1;
293 mask = REG_MASK(msb - lsb);
294
295 ret = rtl2832_rd_regs(priv, reg_start_addr, page, &reading[0], len);
296 if (ret)
297 goto err;
298
299 reading_tmp = 0;
300 for (i = 0; i < len; i++)
301 reading_tmp |= reading[i] << ((len - 1 - i) * 8);
302
303 *val = (reading_tmp >> lsb) & mask;
304
305 return ret;
306
307 err:
308 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
309 return ret;
310
311 }
312
313 static int rtl2832_wr_demod_reg(struct rtl2832_priv *priv, int reg, u32 val)
314 {
315 int ret, i;
316 u8 len;
317 u8 reg_start_addr;
318 u8 msb, lsb;
319 u8 page;
320 u32 mask;
321
322
323 u8 reading[4];
324 u8 writing[4];
325 u32 reading_tmp;
326 u32 writing_tmp;
327
328
329 reg_start_addr = registers[reg].start_address;
330 msb = registers[reg].msb;
331 lsb = registers[reg].lsb;
332 page = registers[reg].page;
333
334 len = (msb >> 3) + 1;
335 mask = REG_MASK(msb - lsb);
336
337
338 ret = rtl2832_rd_regs(priv, reg_start_addr, page, &reading[0], len);
339 if (ret)
340 goto err;
341
342 reading_tmp = 0;
343 for (i = 0; i < len; i++)
344 reading_tmp |= reading[i] << ((len - 1 - i) * 8);
345
346 writing_tmp = reading_tmp & ~(mask << lsb);
347 writing_tmp |= ((val & mask) << lsb);
348
349
350 for (i = 0; i < len; i++)
351 writing[i] = (writing_tmp >> ((len - 1 - i) * 8)) & 0xff;
352
353 ret = rtl2832_wr_regs(priv, reg_start_addr, page, &writing[0], len);
354 if (ret)
355 goto err;
356
357 return ret;
358
359 err:
360 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
361 return ret;
362
363 }
364
365 static int rtl2832_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
366 {
367 int ret;
368 struct rtl2832_priv *priv = fe->demodulator_priv;
369
370 dev_dbg(&priv->i2c->dev, "%s: enable=%d\n", __func__, enable);
371
372 /* gate already open or close */
373 if (priv->i2c_gate_state == enable)
374 return 0;
375
376 ret = rtl2832_wr_demod_reg(priv, DVBT_IIC_REPEAT, (enable ? 0x1 : 0x0));
377 if (ret)
378 goto err;
379
380 priv->i2c_gate_state = enable;
381
382 return ret;
383 err:
384 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
385 return ret;
386 }
387
388
389 static int rtl2832_set_if(struct dvb_frontend *fe, u32 if_freq)
390 {
391 struct rtl2832_priv *priv = fe->demodulator_priv;
392 int ret;
393 u64 pset_iffreq;
394 u8 en_bbin = (if_freq == 0 ? 0x1 : 0x0);
395
396 /*
397 * PSET_IFFREQ = - floor((IfFreqHz % CrystalFreqHz) * pow(2, 22)
398 * / CrystalFreqHz)
399 */
400
401 pset_iffreq = if_freq % priv->cfg.xtal;
402 pset_iffreq *= 0x400000;
403 pset_iffreq = div_u64(pset_iffreq, priv->cfg.xtal);
404 pset_iffreq = -pset_iffreq;
405 pset_iffreq = pset_iffreq & 0x3fffff;
406 dev_dbg(&priv->i2c->dev, "%s: if_frequency=%d pset_iffreq=%08x\n",
407 __func__, if_freq, (unsigned)pset_iffreq);
408
409 ret = rtl2832_wr_demod_reg(priv, DVBT_EN_BBIN, en_bbin);
410 if (ret)
411 return ret;
412
413 ret = rtl2832_wr_demod_reg(priv, DVBT_PSET_IFFREQ, pset_iffreq);
414
415 return ret;
416 }
417
418 static int rtl2832_init(struct dvb_frontend *fe)
419 {
420 struct rtl2832_priv *priv = fe->demodulator_priv;
421 const struct rtl2832_reg_value *init;
422 int i, ret, len;
423
424 /* initialization values for the demodulator registers */
425 struct rtl2832_reg_value rtl2832_initial_regs[] = {
426 {DVBT_AD_EN_REG, 0x1},
427 {DVBT_AD_EN_REG1, 0x1},
428 {DVBT_RSD_BER_FAIL_VAL, 0x2800},
429 {DVBT_MGD_THD0, 0x10},
430 {DVBT_MGD_THD1, 0x20},
431 {DVBT_MGD_THD2, 0x20},
432 {DVBT_MGD_THD3, 0x40},
433 {DVBT_MGD_THD4, 0x22},
434 {DVBT_MGD_THD5, 0x32},
435 {DVBT_MGD_THD6, 0x37},
436 {DVBT_MGD_THD7, 0x39},
437 {DVBT_EN_BK_TRK, 0x0},
438 {DVBT_EN_CACQ_NOTCH, 0x0},
439 {DVBT_AD_AV_REF, 0x2a},
440 {DVBT_REG_PI, 0x6},
441 {DVBT_PIP_ON, 0x0},
442 {DVBT_CDIV_PH0, 0x8},
443 {DVBT_CDIV_PH1, 0x8},
444 {DVBT_SCALE1_B92, 0x4},
445 {DVBT_SCALE1_B93, 0xb0},
446 {DVBT_SCALE1_BA7, 0x78},
447 {DVBT_SCALE1_BA9, 0x28},
448 {DVBT_SCALE1_BAA, 0x59},
449 {DVBT_SCALE1_BAB, 0x83},
450 {DVBT_SCALE1_BAC, 0xd4},
451 {DVBT_SCALE1_BB0, 0x65},
452 {DVBT_SCALE1_BB1, 0x43},
453 {DVBT_KB_P1, 0x1},
454 {DVBT_KB_P2, 0x4},
455 {DVBT_KB_P3, 0x7},
456 {DVBT_K1_CR_STEP12, 0xa},
457 {DVBT_REG_GPE, 0x1},
458 {DVBT_SERIAL, 0x0},
459 {DVBT_CDIV_PH0, 0x9},
460 {DVBT_CDIV_PH1, 0x9},
461 {DVBT_MPEG_IO_OPT_2_2, 0x0},
462 {DVBT_MPEG_IO_OPT_1_0, 0x0},
463 {DVBT_TRK_KS_P2, 0x4},
464 {DVBT_TRK_KS_I2, 0x7},
465 {DVBT_TR_THD_SET2, 0x6},
466 {DVBT_TRK_KC_I2, 0x5},
467 {DVBT_CR_THD_SET2, 0x1},
468 };
469
470 dev_dbg(&priv->i2c->dev, "%s:\n", __func__);
471
472 for (i = 0; i < ARRAY_SIZE(rtl2832_initial_regs); i++) {
473 ret = rtl2832_wr_demod_reg(priv, rtl2832_initial_regs[i].reg,
474 rtl2832_initial_regs[i].value);
475 if (ret)
476 goto err;
477 }
478
479 /* load tuner specific settings */
480 dev_dbg(&priv->i2c->dev, "%s: load settings for tuner=%02x\n",
481 __func__, priv->cfg.tuner);
482 switch (priv->cfg.tuner) {
483 case RTL2832_TUNER_FC0012:
484 case RTL2832_TUNER_FC0013:
485 len = ARRAY_SIZE(rtl2832_tuner_init_fc0012);
486 init = rtl2832_tuner_init_fc0012;
487 break;
488 case RTL2832_TUNER_TUA9001:
489 len = ARRAY_SIZE(rtl2832_tuner_init_tua9001);
490 init = rtl2832_tuner_init_tua9001;
491 break;
492 case RTL2832_TUNER_E4000:
493 len = ARRAY_SIZE(rtl2832_tuner_init_e4000);
494 init = rtl2832_tuner_init_e4000;
495 break;
496 case RTL2832_TUNER_R820T:
497 case RTL2832_TUNER_R828D:
498 len = ARRAY_SIZE(rtl2832_tuner_init_r820t);
499 init = rtl2832_tuner_init_r820t;
500 break;
501 default:
502 ret = -EINVAL;
503 goto err;
504 }
505
506 for (i = 0; i < len; i++) {
507 ret = rtl2832_wr_demod_reg(priv, init[i].reg, init[i].value);
508 if (ret)
509 goto err;
510 }
511
512 /*
513 * r820t NIM code does a software reset here at the demod -
514 * may not be needed, as there's already a software reset at
515 * set_params()
516 */
517 #if 1
518 /* soft reset */
519 ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x1);
520 if (ret)
521 goto err;
522
523 ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x0);
524 if (ret)
525 goto err;
526 #endif
527
528 priv->sleeping = false;
529
530 return ret;
531
532 err:
533 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
534 return ret;
535 }
536
537 static int rtl2832_sleep(struct dvb_frontend *fe)
538 {
539 struct rtl2832_priv *priv = fe->demodulator_priv;
540
541 dev_dbg(&priv->i2c->dev, "%s:\n", __func__);
542 priv->sleeping = true;
543 return 0;
544 }
545
546 static int rtl2832_get_tune_settings(struct dvb_frontend *fe,
547 struct dvb_frontend_tune_settings *s)
548 {
549 struct rtl2832_priv *priv = fe->demodulator_priv;
550
551 dev_dbg(&priv->i2c->dev, "%s:\n", __func__);
552 s->min_delay_ms = 1000;
553 s->step_size = fe->ops.info.frequency_stepsize * 2;
554 s->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;
555 return 0;
556 }
557
558 static int rtl2832_set_frontend(struct dvb_frontend *fe)
559 {
560 struct rtl2832_priv *priv = fe->demodulator_priv;
561 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
562 int ret, i, j;
563 u64 bw_mode, num, num2;
564 u32 resamp_ratio, cfreq_off_ratio;
565 static u8 bw_params[3][32] = {
566 /* 6 MHz bandwidth */
567 {
568 0xf5, 0xff, 0x15, 0x38, 0x5d, 0x6d, 0x52, 0x07, 0xfa, 0x2f,
569 0x53, 0xf5, 0x3f, 0xca, 0x0b, 0x91, 0xea, 0x30, 0x63, 0xb2,
570 0x13, 0xda, 0x0b, 0xc4, 0x18, 0x7e, 0x16, 0x66, 0x08, 0x67,
571 0x19, 0xe0,
572 },
573
574 /* 7 MHz bandwidth */
575 {
576 0xe7, 0xcc, 0xb5, 0xba, 0xe8, 0x2f, 0x67, 0x61, 0x00, 0xaf,
577 0x86, 0xf2, 0xbf, 0x59, 0x04, 0x11, 0xb6, 0x33, 0xa4, 0x30,
578 0x15, 0x10, 0x0a, 0x42, 0x18, 0xf8, 0x17, 0xd9, 0x07, 0x22,
579 0x19, 0x10,
580 },
581
582 /* 8 MHz bandwidth */
583 {
584 0x09, 0xf6, 0xd2, 0xa7, 0x9a, 0xc9, 0x27, 0x77, 0x06, 0xbf,
585 0xec, 0xf4, 0x4f, 0x0b, 0xfc, 0x01, 0x63, 0x35, 0x54, 0xa7,
586 0x16, 0x66, 0x08, 0xb4, 0x19, 0x6e, 0x19, 0x65, 0x05, 0xc8,
587 0x19, 0xe0,
588 },
589 };
590
591
592 dev_dbg(&priv->i2c->dev,
593 "%s: frequency=%d bandwidth_hz=%d inversion=%d\n",
594 __func__, c->frequency, c->bandwidth_hz, c->inversion);
595
596 /* program tuner */
597 if (fe->ops.tuner_ops.set_params)
598 fe->ops.tuner_ops.set_params(fe);
599
600 /* PIP mode related */
601 ret = rtl2832_wr_regs(priv, 0x92, 1, "\x00\x0f\xff", 3);
602 if (ret)
603 goto err;
604
605 /* If the frontend has get_if_frequency(), use it */
606 if (fe->ops.tuner_ops.get_if_frequency) {
607 u32 if_freq;
608
609 ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
610 if (ret)
611 goto err;
612
613 ret = rtl2832_set_if(fe, if_freq);
614 if (ret)
615 goto err;
616 }
617
618 switch (c->bandwidth_hz) {
619 case 6000000:
620 i = 0;
621 bw_mode = 48000000;
622 break;
623 case 7000000:
624 i = 1;
625 bw_mode = 56000000;
626 break;
627 case 8000000:
628 i = 2;
629 bw_mode = 64000000;
630 break;
631 default:
632 dev_dbg(&priv->i2c->dev, "%s: invalid bandwidth\n", __func__);
633 return -EINVAL;
634 }
635
636 for (j = 0; j < sizeof(bw_params[0]); j++) {
637 ret = rtl2832_wr_regs(priv, 0x1c+j, 1, &bw_params[i][j], 1);
638 if (ret)
639 goto err;
640 }
641
642 /* calculate and set resample ratio
643 * RSAMP_RATIO = floor(CrystalFreqHz * 7 * pow(2, 22)
644 * / ConstWithBandwidthMode)
645 */
646 num = priv->cfg.xtal * 7;
647 num *= 0x400000;
648 num = div_u64(num, bw_mode);
649 resamp_ratio = num & 0x3ffffff;
650 ret = rtl2832_wr_demod_reg(priv, DVBT_RSAMP_RATIO, resamp_ratio);
651 if (ret)
652 goto err;
653
654 /* calculate and set cfreq off ratio
655 * CFREQ_OFF_RATIO = - floor(ConstWithBandwidthMode * pow(2, 20)
656 * / (CrystalFreqHz * 7))
657 */
658 num = bw_mode << 20;
659 num2 = priv->cfg.xtal * 7;
660 num = div_u64(num, num2);
661 num = -num;
662 cfreq_off_ratio = num & 0xfffff;
663 ret = rtl2832_wr_demod_reg(priv, DVBT_CFREQ_OFF_RATIO, cfreq_off_ratio);
664 if (ret)
665 goto err;
666
667 /* soft reset */
668 ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x1);
669 if (ret)
670 goto err;
671
672 ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x0);
673 if (ret)
674 goto err;
675
676 return ret;
677 err:
678 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
679 return ret;
680 }
681
682 static int rtl2832_get_frontend(struct dvb_frontend *fe)
683 {
684 struct rtl2832_priv *priv = fe->demodulator_priv;
685 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
686 int ret;
687 u8 buf[3];
688
689 if (priv->sleeping)
690 return 0;
691
692 ret = rtl2832_rd_regs(priv, 0x3c, 3, buf, 2);
693 if (ret)
694 goto err;
695
696 ret = rtl2832_rd_reg(priv, 0x51, 3, &buf[2]);
697 if (ret)
698 goto err;
699
700 dev_dbg(&priv->i2c->dev, "%s: TPS=%*ph\n", __func__, 3, buf);
701
702 switch ((buf[0] >> 2) & 3) {
703 case 0:
704 c->modulation = QPSK;
705 break;
706 case 1:
707 c->modulation = QAM_16;
708 break;
709 case 2:
710 c->modulation = QAM_64;
711 break;
712 }
713
714 switch ((buf[2] >> 2) & 1) {
715 case 0:
716 c->transmission_mode = TRANSMISSION_MODE_2K;
717 break;
718 case 1:
719 c->transmission_mode = TRANSMISSION_MODE_8K;
720 }
721
722 switch ((buf[2] >> 0) & 3) {
723 case 0:
724 c->guard_interval = GUARD_INTERVAL_1_32;
725 break;
726 case 1:
727 c->guard_interval = GUARD_INTERVAL_1_16;
728 break;
729 case 2:
730 c->guard_interval = GUARD_INTERVAL_1_8;
731 break;
732 case 3:
733 c->guard_interval = GUARD_INTERVAL_1_4;
734 break;
735 }
736
737 switch ((buf[0] >> 4) & 7) {
738 case 0:
739 c->hierarchy = HIERARCHY_NONE;
740 break;
741 case 1:
742 c->hierarchy = HIERARCHY_1;
743 break;
744 case 2:
745 c->hierarchy = HIERARCHY_2;
746 break;
747 case 3:
748 c->hierarchy = HIERARCHY_4;
749 break;
750 }
751
752 switch ((buf[1] >> 3) & 7) {
753 case 0:
754 c->code_rate_HP = FEC_1_2;
755 break;
756 case 1:
757 c->code_rate_HP = FEC_2_3;
758 break;
759 case 2:
760 c->code_rate_HP = FEC_3_4;
761 break;
762 case 3:
763 c->code_rate_HP = FEC_5_6;
764 break;
765 case 4:
766 c->code_rate_HP = FEC_7_8;
767 break;
768 }
769
770 switch ((buf[1] >> 0) & 7) {
771 case 0:
772 c->code_rate_LP = FEC_1_2;
773 break;
774 case 1:
775 c->code_rate_LP = FEC_2_3;
776 break;
777 case 2:
778 c->code_rate_LP = FEC_3_4;
779 break;
780 case 3:
781 c->code_rate_LP = FEC_5_6;
782 break;
783 case 4:
784 c->code_rate_LP = FEC_7_8;
785 break;
786 }
787
788 return 0;
789 err:
790 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
791 return ret;
792 }
793
794 static int rtl2832_read_status(struct dvb_frontend *fe, fe_status_t *status)
795 {
796 struct rtl2832_priv *priv = fe->demodulator_priv;
797 int ret;
798 u32 tmp;
799 *status = 0;
800
801 dev_dbg(&priv->i2c->dev, "%s:\n", __func__);
802 if (priv->sleeping)
803 return 0;
804
805 ret = rtl2832_rd_demod_reg(priv, DVBT_FSM_STAGE, &tmp);
806 if (ret)
807 goto err;
808
809 if (tmp == 11) {
810 *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
811 FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
812 }
813 /* TODO find out if this is also true for rtl2832? */
814 /*else if (tmp == 10) {
815 *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
816 FE_HAS_VITERBI;
817 }*/
818
819 return ret;
820 err:
821 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
822 return ret;
823 }
824
825 static int rtl2832_read_snr(struct dvb_frontend *fe, u16 *snr)
826 {
827 struct rtl2832_priv *priv = fe->demodulator_priv;
828 int ret, hierarchy, constellation;
829 u8 buf[2], tmp;
830 u16 tmp16;
831 #define CONSTELLATION_NUM 3
832 #define HIERARCHY_NUM 4
833 static const u32 snr_constant[CONSTELLATION_NUM][HIERARCHY_NUM] = {
834 { 85387325, 85387325, 85387325, 85387325 },
835 { 86676178, 86676178, 87167949, 87795660 },
836 { 87659938, 87659938, 87885178, 88241743 },
837 };
838
839 /* reports SNR in resolution of 0.1 dB */
840
841 ret = rtl2832_rd_reg(priv, 0x3c, 3, &tmp);
842 if (ret)
843 goto err;
844
845 constellation = (tmp >> 2) & 0x03; /* [3:2] */
846 if (constellation > CONSTELLATION_NUM - 1)
847 goto err;
848
849 hierarchy = (tmp >> 4) & 0x07; /* [6:4] */
850 if (hierarchy > HIERARCHY_NUM - 1)
851 goto err;
852
853 ret = rtl2832_rd_regs(priv, 0x0c, 4, buf, 2);
854 if (ret)
855 goto err;
856
857 tmp16 = buf[0] << 8 | buf[1];
858
859 if (tmp16)
860 *snr = (snr_constant[constellation][hierarchy] -
861 intlog10(tmp16)) / ((1 << 24) / 100);
862 else
863 *snr = 0;
864
865 return 0;
866 err:
867 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
868 return ret;
869 }
870
871 static int rtl2832_read_ber(struct dvb_frontend *fe, u32 *ber)
872 {
873 struct rtl2832_priv *priv = fe->demodulator_priv;
874 int ret;
875 u8 buf[2];
876
877 ret = rtl2832_rd_regs(priv, 0x4e, 3, buf, 2);
878 if (ret)
879 goto err;
880
881 *ber = buf[0] << 8 | buf[1];
882
883 return 0;
884 err:
885 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
886 return ret;
887 }
888
889 /*
890 * Delay mechanism to avoid unneeded I2C gate open / close. Gate close is
891 * delayed here a little bit in order to see if there is sequence of I2C
892 * messages sent to same I2C bus.
893 * We must use unlocked version of __i2c_transfer() in order to avoid deadlock
894 * as lock is already taken by calling muxed i2c_transfer().
895 */
896 static void rtl2832_i2c_gate_work(struct work_struct *work)
897 {
898 struct rtl2832_priv *priv = container_of(work,
899 struct rtl2832_priv, i2c_gate_work.work);
900 struct i2c_adapter *adap = priv->i2c;
901 int ret;
902 u8 buf[2];
903 struct i2c_msg msg[1] = {
904 {
905 .addr = priv->cfg.i2c_addr,
906 .flags = 0,
907 .len = sizeof(buf),
908 .buf = buf,
909 }
910 };
911
912 /* select reg bank 1 */
913 buf[0] = 0x00;
914 buf[1] = 0x01;
915 ret = __i2c_transfer(adap, msg, 1);
916 if (ret != 1)
917 goto err;
918
919 priv->page = 1;
920
921 /* close I2C repeater gate */
922 buf[0] = 0x01;
923 buf[1] = 0x10;
924 ret = __i2c_transfer(adap, msg, 1);
925 if (ret != 1)
926 goto err;
927
928 priv->i2c_gate_state = false;
929
930 return;
931 err:
932 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
933
934 return;
935 }
936
937 static int rtl2832_select(struct i2c_adapter *adap, void *mux_priv, u32 chan_id)
938 {
939 struct rtl2832_priv *priv = mux_priv;
940 int ret;
941 u8 buf[2], val;
942 struct i2c_msg msg[1] = {
943 {
944 .addr = priv->cfg.i2c_addr,
945 .flags = 0,
946 .len = sizeof(buf),
947 .buf = buf,
948 }
949 };
950 struct i2c_msg msg_rd[2] = {
951 {
952 .addr = priv->cfg.i2c_addr,
953 .flags = 0,
954 .len = 1,
955 .buf = "\x01",
956 }, {
957 .addr = priv->cfg.i2c_addr,
958 .flags = I2C_M_RD,
959 .len = 1,
960 .buf = &val,
961 }
962 };
963
964 /* terminate possible gate closing */
965 cancel_delayed_work_sync(&priv->i2c_gate_work);
966
967 if (priv->i2c_gate_state == chan_id)
968 return 0;
969
970 /* select reg bank 1 */
971 buf[0] = 0x00;
972 buf[1] = 0x01;
973 ret = __i2c_transfer(adap, msg, 1);
974 if (ret != 1)
975 goto err;
976
977 priv->page = 1;
978
979 /* we must read that register, otherwise there will be errors */
980 ret = __i2c_transfer(adap, msg_rd, 2);
981 if (ret != 2)
982 goto err;
983
984 /* open or close I2C repeater gate */
985 buf[0] = 0x01;
986 if (chan_id == 1)
987 buf[1] = 0x18; /* open */
988 else
989 buf[1] = 0x10; /* close */
990
991 ret = __i2c_transfer(adap, msg, 1);
992 if (ret != 1)
993 goto err;
994
995 priv->i2c_gate_state = chan_id;
996
997 return 0;
998 err:
999 dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
1000
1001 return -EREMOTEIO;
1002 }
1003
1004 static int rtl2832_deselect(struct i2c_adapter *adap, void *mux_priv,
1005 u32 chan_id)
1006 {
1007 struct rtl2832_priv *priv = mux_priv;
1008 schedule_delayed_work(&priv->i2c_gate_work, usecs_to_jiffies(100));
1009 return 0;
1010 }
1011
1012 static struct dvb_frontend_ops rtl2832_ops = {
1013 .delsys = { SYS_DVBT },
1014 .info = {
1015 .name = "Realtek RTL2832 (DVB-T)",
1016 .frequency_min = 174000000,
1017 .frequency_max = 862000000,
1018 .frequency_stepsize = 166667,
1019 .caps = FE_CAN_FEC_1_2 |
1020 FE_CAN_FEC_2_3 |
1021 FE_CAN_FEC_3_4 |
1022 FE_CAN_FEC_5_6 |
1023 FE_CAN_FEC_7_8 |
1024 FE_CAN_FEC_AUTO |
1025 FE_CAN_QPSK |
1026 FE_CAN_QAM_16 |
1027 FE_CAN_QAM_64 |
1028 FE_CAN_QAM_AUTO |
1029 FE_CAN_TRANSMISSION_MODE_AUTO |
1030 FE_CAN_GUARD_INTERVAL_AUTO |
1031 FE_CAN_HIERARCHY_AUTO |
1032 FE_CAN_RECOVER |
1033 FE_CAN_MUTE_TS
1034 },
1035
1036 .init = rtl2832_init,
1037 .sleep = rtl2832_sleep,
1038
1039 .get_tune_settings = rtl2832_get_tune_settings,
1040
1041 .set_frontend = rtl2832_set_frontend,
1042 .get_frontend = rtl2832_get_frontend,
1043
1044 .read_status = rtl2832_read_status,
1045 .read_snr = rtl2832_read_snr,
1046 .read_ber = rtl2832_read_ber,
1047
1048 .i2c_gate_ctrl = rtl2832_i2c_gate_ctrl,
1049 };
1050
1051 static struct dvb_frontend *rtl2832_get_dvb_frontend(struct i2c_client *client)
1052 {
1053 struct rtl2832_priv *dev = i2c_get_clientdata(client);
1054
1055 dev_dbg(&client->dev, "\n");
1056 return &dev->fe;
1057 }
1058
1059 static struct i2c_adapter *rtl2832_get_i2c_adapter_(struct i2c_client *client)
1060 {
1061 struct rtl2832_priv *dev = i2c_get_clientdata(client);
1062
1063 dev_dbg(&client->dev, "\n");
1064 return dev->i2c_adapter_tuner;
1065 }
1066
1067 static struct i2c_adapter *rtl2832_get_private_i2c_adapter_(struct i2c_client *client)
1068 {
1069 struct rtl2832_priv *dev = i2c_get_clientdata(client);
1070
1071 dev_dbg(&client->dev, "\n");
1072 return dev->i2c_adapter;
1073 }
1074
1075 static int rtl2832_enable_slave_ts(struct i2c_client *client)
1076 {
1077 struct rtl2832_priv *dev = i2c_get_clientdata(client);
1078 int ret;
1079
1080 dev_dbg(&client->dev, "setting PIP mode\n");
1081
1082 ret = rtl2832_wr_regs(dev, 0x0c, 1, "\x5f\xff", 2);
1083 if (ret)
1084 goto err;
1085
1086 ret = rtl2832_wr_demod_reg(dev, DVBT_PIP_ON, 0x1);
1087 if (ret)
1088 goto err;
1089
1090 ret = rtl2832_wr_reg(dev, 0xbc, 0, 0x18);
1091 if (ret)
1092 goto err;
1093
1094 ret = rtl2832_wr_reg(dev, 0x22, 0, 0x01);
1095 if (ret)
1096 goto err;
1097
1098 ret = rtl2832_wr_reg(dev, 0x26, 0, 0x1f);
1099 if (ret)
1100 goto err;
1101
1102 ret = rtl2832_wr_reg(dev, 0x27, 0, 0xff);
1103 if (ret)
1104 goto err;
1105
1106 ret = rtl2832_wr_regs(dev, 0x92, 1, "\x7f\xf7\xff", 3);
1107 if (ret)
1108 goto err;
1109
1110 /* soft reset */
1111 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
1112 if (ret)
1113 goto err;
1114
1115 ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0);
1116 if (ret)
1117 goto err;
1118
1119 return 0;
1120 err:
1121 dev_dbg(&client->dev, "failed=%d\n", ret);
1122 return ret;
1123 }
1124
1125 static int rtl2832_probe(struct i2c_client *client,
1126 const struct i2c_device_id *id)
1127 {
1128 struct rtl2832_platform_data *pdata = client->dev.platform_data;
1129 const struct rtl2832_config *config = pdata->config;
1130 struct i2c_adapter *i2c = client->adapter;
1131 struct rtl2832_priv *priv;
1132 int ret;
1133 u8 tmp;
1134
1135 dev_dbg(&client->dev, "\n");
1136
1137 /* allocate memory for the internal state */
1138 priv = kzalloc(sizeof(struct rtl2832_priv), GFP_KERNEL);
1139 if (priv == NULL) {
1140 ret = -ENOMEM;
1141 goto err;
1142 }
1143
1144 /* setup the priv */
1145 priv->client = client;
1146 priv->i2c = i2c;
1147 priv->tuner = config->tuner;
1148 priv->sleeping = true;
1149 memcpy(&priv->cfg, config, sizeof(struct rtl2832_config));
1150 INIT_DELAYED_WORK(&priv->i2c_gate_work, rtl2832_i2c_gate_work);
1151
1152 /* create muxed i2c adapter for demod itself */
1153 priv->i2c_adapter = i2c_add_mux_adapter(i2c, &i2c->dev, priv, 0, 0, 0,
1154 rtl2832_select, NULL);
1155 if (priv->i2c_adapter == NULL) {
1156 ret = -ENODEV;
1157 goto err_kfree;
1158 }
1159
1160 /* check if the demod is there */
1161 ret = rtl2832_rd_reg(priv, 0x00, 0x0, &tmp);
1162 if (ret)
1163 goto err_i2c_del_mux_adapter;
1164
1165 /* create muxed i2c adapter for demod tuner bus */
1166 priv->i2c_adapter_tuner = i2c_add_mux_adapter(i2c, &i2c->dev, priv,
1167 0, 1, 0, rtl2832_select, rtl2832_deselect);
1168 if (priv->i2c_adapter_tuner == NULL) {
1169 ret = -ENODEV;
1170 goto err_i2c_del_mux_adapter;
1171 }
1172
1173 /* create dvb_frontend */
1174 memcpy(&priv->fe.ops, &rtl2832_ops, sizeof(struct dvb_frontend_ops));
1175 priv->fe.demodulator_priv = priv;
1176 i2c_set_clientdata(client, priv);
1177
1178 /* setup callbacks */
1179 pdata->get_dvb_frontend = rtl2832_get_dvb_frontend;
1180 pdata->get_i2c_adapter = rtl2832_get_i2c_adapter_;
1181 pdata->get_private_i2c_adapter = rtl2832_get_private_i2c_adapter_;
1182 pdata->enable_slave_ts = rtl2832_enable_slave_ts;
1183
1184 dev_info(&client->dev, "Realtek RTL2832 successfully attached\n");
1185 return 0;
1186 err_i2c_del_mux_adapter:
1187 i2c_del_mux_adapter(priv->i2c_adapter);
1188 err_kfree:
1189 kfree(priv);
1190 err:
1191 dev_dbg(&client->dev, "failed=%d\n", ret);
1192 return ret;
1193 }
1194
1195 static int rtl2832_remove(struct i2c_client *client)
1196 {
1197 struct rtl2832_priv *priv = i2c_get_clientdata(client);
1198
1199 dev_dbg(&client->dev, "\n");
1200
1201 cancel_delayed_work_sync(&priv->i2c_gate_work);
1202
1203 i2c_del_mux_adapter(priv->i2c_adapter_tuner);
1204
1205 i2c_del_mux_adapter(priv->i2c_adapter);
1206
1207 kfree(priv);
1208
1209 return 0;
1210 }
1211
1212 static const struct i2c_device_id rtl2832_id_table[] = {
1213 {"rtl2832", 0},
1214 {}
1215 };
1216 MODULE_DEVICE_TABLE(i2c, rtl2832_id_table);
1217
1218 static struct i2c_driver rtl2832_driver = {
1219 .driver = {
1220 .owner = THIS_MODULE,
1221 .name = "rtl2832",
1222 },
1223 .probe = rtl2832_probe,
1224 .remove = rtl2832_remove,
1225 .id_table = rtl2832_id_table,
1226 };
1227
1228 module_i2c_driver(rtl2832_driver);
1229
1230 MODULE_AUTHOR("Thomas Mair <mair.thomas86@gmail.com>");
1231 MODULE_DESCRIPTION("Realtek RTL2832 DVB-T demodulator driver");
1232 MODULE_LICENSE("GPL");
1233 MODULE_VERSION("0.5");
This page took 0.189249 seconds and 5 git commands to generate.