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