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