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