1 /*
2  *   Fujitu mb86a20s ISDB-T/ISDB-Tsb Module driver
3  *
4  *   Copyright (C) 2010-2013 Mauro Carvalho Chehab <mchehab@redhat.com>
5  *   Copyright (C) 2009-2010 Douglas Landgraf <dougsland@redhat.com>
6  *
7  *   This program is free software; you can redistribute it and/or
8  *   modify it under the terms of the GNU General Public License as
9  *   published by the Free Software Foundation version 2.
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 GNU
14  *   General Public License for more details.
15  */
16 
17 #include <linux/kernel.h>
18 #include <asm/div64.h>
19 
20 #include "dvb_frontend.h"
21 #include "mb86a20s.h"
22 
23 #define NUM_LAYERS 3
24 
25 static int debug = 1;
26 module_param(debug, int, 0644);
27 MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");
28 
29 enum mb86a20s_bandwidth {
30 	MB86A20S_13SEG = 0,
31 	MB86A20S_13SEG_PARTIAL = 1,
32 	MB86A20S_1SEG = 2,
33 	MB86A20S_3SEG = 3,
34 };
35 
36 u8 mb86a20s_subchannel[] = {
37 	0xb0, 0xc0, 0xd0, 0xe0,
38 	0xf0, 0x00, 0x10, 0x20,
39 };
40 
41 struct mb86a20s_state {
42 	struct i2c_adapter *i2c;
43 	const struct mb86a20s_config *config;
44 	u32 last_frequency;
45 
46 	struct dvb_frontend frontend;
47 
48 	u32 if_freq;
49 	enum mb86a20s_bandwidth bw;
50 	bool inversion;
51 	u32 subchannel;
52 
53 	u32 estimated_rate[NUM_LAYERS];
54 	unsigned long get_strength_time;
55 
56 	bool need_init;
57 };
58 
59 struct regdata {
60 	u8 reg;
61 	u8 data;
62 };
63 
64 #define BER_SAMPLING_RATE	1	/* Seconds */
65 
66 /*
67  * Initialization sequence: Use whatevere default values that PV SBTVD
68  * does on its initialisation, obtained via USB snoop
69  */
70 static struct regdata mb86a20s_init1[] = {
71 	{ 0x70, 0x0f },
72 	{ 0x70, 0xff },
73 	{ 0x08, 0x01 },
74 	{ 0x50, 0xd1 }, { 0x51, 0x20 },
75 };
76 
77 static struct regdata mb86a20s_init2[] = {
78 	{ 0x28, 0x22 }, { 0x29, 0x00 }, { 0x2a, 0x1f }, { 0x2b, 0xf0 },
79 	{ 0x3b, 0x21 },
80 	{ 0x3c, 0x38 },
81 	{ 0x01, 0x0d },
82 	{ 0x04, 0x08 }, { 0x05, 0x03 },
83 	{ 0x04, 0x0e }, { 0x05, 0x00 },
84 	{ 0x04, 0x0f }, { 0x05, 0x37 },
85 	{ 0x04, 0x0b }, { 0x05, 0x78 },
86 	{ 0x04, 0x00 }, { 0x05, 0x00 },
87 	{ 0x04, 0x01 }, { 0x05, 0x1e },
88 	{ 0x04, 0x02 }, { 0x05, 0x07 },
89 	{ 0x04, 0x03 }, { 0x05, 0xd0 },
90 	{ 0x04, 0x09 }, { 0x05, 0x00 },
91 	{ 0x04, 0x0a }, { 0x05, 0xff },
92 	{ 0x04, 0x27 }, { 0x05, 0x00 },
93 	{ 0x04, 0x28 }, { 0x05, 0x00 },
94 	{ 0x04, 0x1e }, { 0x05, 0x00 },
95 	{ 0x04, 0x29 }, { 0x05, 0x64 },
96 	{ 0x04, 0x32 }, { 0x05, 0x02 },
97 	{ 0x04, 0x14 }, { 0x05, 0x02 },
98 	{ 0x04, 0x04 }, { 0x05, 0x00 },
99 	{ 0x04, 0x05 }, { 0x05, 0x22 },
100 	{ 0x04, 0x06 }, { 0x05, 0x0e },
101 	{ 0x04, 0x07 }, { 0x05, 0xd8 },
102 	{ 0x04, 0x12 }, { 0x05, 0x00 },
103 	{ 0x04, 0x13 }, { 0x05, 0xff },
104 	{ 0x04, 0x15 }, { 0x05, 0x4e },
105 	{ 0x04, 0x16 }, { 0x05, 0x20 },
106 
107 	/*
108 	 * On this demod, when the bit count reaches the count below,
109 	 * it collects the bit error count. The bit counters are initialized
110 	 * to 65535 here. This warrants that all of them will be quickly
111 	 * calculated when device gets locked. As TMCC is parsed, the values
112 	 * will be adjusted later in the driver's code.
113 	 */
114 	{ 0x52, 0x01 },				/* Turn on BER before Viterbi */
115 	{ 0x50, 0xa7 }, { 0x51, 0x00 },
116 	{ 0x50, 0xa8 }, { 0x51, 0xff },
117 	{ 0x50, 0xa9 }, { 0x51, 0xff },
118 	{ 0x50, 0xaa }, { 0x51, 0x00 },
119 	{ 0x50, 0xab }, { 0x51, 0xff },
120 	{ 0x50, 0xac }, { 0x51, 0xff },
121 	{ 0x50, 0xad }, { 0x51, 0x00 },
122 	{ 0x50, 0xae }, { 0x51, 0xff },
123 	{ 0x50, 0xaf }, { 0x51, 0xff },
124 
125 	/*
126 	 * On this demod, post BER counts blocks. When the count reaches the
127 	 * value below, it collects the block error count. The block counters
128 	 * are initialized to 127 here. This warrants that all of them will be
129 	 * quickly calculated when device gets locked. As TMCC is parsed, the
130 	 * values will be adjusted later in the driver's code.
131 	 */
132 	{ 0x5e, 0x07 },				/* Turn on BER after Viterbi */
133 	{ 0x50, 0xdc }, { 0x51, 0x00 },
134 	{ 0x50, 0xdd }, { 0x51, 0x7f },
135 	{ 0x50, 0xde }, { 0x51, 0x00 },
136 	{ 0x50, 0xdf }, { 0x51, 0x7f },
137 	{ 0x50, 0xe0 }, { 0x51, 0x00 },
138 	{ 0x50, 0xe1 }, { 0x51, 0x7f },
139 
140 	/*
141 	 * On this demod, when the block count reaches the count below,
142 	 * it collects the block error count. The block counters are initialized
143 	 * to 127 here. This warrants that all of them will be quickly
144 	 * calculated when device gets locked. As TMCC is parsed, the values
145 	 * will be adjusted later in the driver's code.
146 	 */
147 	{ 0x50, 0xb0 }, { 0x51, 0x07 },		/* Enable PER */
148 	{ 0x50, 0xb2 }, { 0x51, 0x00 },
149 	{ 0x50, 0xb3 }, { 0x51, 0x7f },
150 	{ 0x50, 0xb4 }, { 0x51, 0x00 },
151 	{ 0x50, 0xb5 }, { 0x51, 0x7f },
152 	{ 0x50, 0xb6 }, { 0x51, 0x00 },
153 	{ 0x50, 0xb7 }, { 0x51, 0x7f },
154 
155 	{ 0x50, 0x50 }, { 0x51, 0x02 },		/* MER manual mode */
156 	{ 0x50, 0x51 }, { 0x51, 0x04 },		/* MER symbol 4 */
157 	{ 0x45, 0x04 },				/* CN symbol 4 */
158 	{ 0x48, 0x04 },				/* CN manual mode */
159 
160 	{ 0x50, 0xd5 }, { 0x51, 0x01 },		/* Serial */
161 	{ 0x50, 0xd6 }, { 0x51, 0x1f },
162 	{ 0x50, 0xd2 }, { 0x51, 0x03 },
163 	{ 0x50, 0xd7 }, { 0x51, 0xbf },
164 	{ 0x28, 0x74 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0xff },
165 	{ 0x28, 0x46 }, { 0x29, 0x00 }, { 0x2a, 0x1a }, { 0x2b, 0x0c },
166 
167 	{ 0x04, 0x40 }, { 0x05, 0x00 },
168 	{ 0x28, 0x00 }, { 0x2b, 0x08 },
169 	{ 0x28, 0x05 }, { 0x2b, 0x00 },
170 	{ 0x1c, 0x01 },
171 	{ 0x28, 0x06 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x1f },
172 	{ 0x28, 0x07 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x18 },
173 	{ 0x28, 0x08 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x12 },
174 	{ 0x28, 0x09 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x30 },
175 	{ 0x28, 0x0a }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x37 },
176 	{ 0x28, 0x0b }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x02 },
177 	{ 0x28, 0x0c }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x09 },
178 	{ 0x28, 0x0d }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x06 },
179 	{ 0x28, 0x0e }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x7b },
180 	{ 0x28, 0x0f }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x76 },
181 	{ 0x28, 0x10 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x7d },
182 	{ 0x28, 0x11 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x08 },
183 	{ 0x28, 0x12 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x0b },
184 	{ 0x28, 0x13 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x00 },
185 	{ 0x28, 0x14 }, { 0x29, 0x00 }, { 0x2a, 0x01 }, { 0x2b, 0xf2 },
186 	{ 0x28, 0x15 }, { 0x29, 0x00 }, { 0x2a, 0x01 }, { 0x2b, 0xf3 },
187 	{ 0x28, 0x16 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x05 },
188 	{ 0x28, 0x17 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x16 },
189 	{ 0x28, 0x18 }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x0f },
190 	{ 0x28, 0x19 }, { 0x29, 0x00 }, { 0x2a, 0x07 }, { 0x2b, 0xef },
191 	{ 0x28, 0x1a }, { 0x29, 0x00 }, { 0x2a, 0x07 }, { 0x2b, 0xd8 },
192 	{ 0x28, 0x1b }, { 0x29, 0x00 }, { 0x2a, 0x07 }, { 0x2b, 0xf1 },
193 	{ 0x28, 0x1c }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x3d },
194 	{ 0x28, 0x1d }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x94 },
195 	{ 0x28, 0x1e }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0xba },
196 	{ 0x50, 0x1e }, { 0x51, 0x5d },
197 	{ 0x50, 0x22 }, { 0x51, 0x00 },
198 	{ 0x50, 0x23 }, { 0x51, 0xc8 },
199 	{ 0x50, 0x24 }, { 0x51, 0x00 },
200 	{ 0x50, 0x25 }, { 0x51, 0xf0 },
201 	{ 0x50, 0x26 }, { 0x51, 0x00 },
202 	{ 0x50, 0x27 }, { 0x51, 0xc3 },
203 	{ 0x50, 0x39 }, { 0x51, 0x02 },
204 	{ 0xec, 0x0f },
205 	{ 0xeb, 0x1f },
206 	{ 0x28, 0x6a }, { 0x29, 0x00 }, { 0x2a, 0x00 }, { 0x2b, 0x00 },
207 	{ 0xd0, 0x00 },
208 };
209 
210 static struct regdata mb86a20s_reset_reception[] = {
211 	{ 0x70, 0xf0 },
212 	{ 0x70, 0xff },
213 	{ 0x08, 0x01 },
214 	{ 0x08, 0x00 },
215 };
216 
217 static struct regdata mb86a20s_per_ber_reset[] = {
218 	{ 0x53, 0x00 },	/* pre BER Counter reset */
219 	{ 0x53, 0x07 },
220 
221 	{ 0x5f, 0x00 },	/* post BER Counter reset */
222 	{ 0x5f, 0x07 },
223 
224 	{ 0x50, 0xb1 },	/* PER Counter reset */
225 	{ 0x51, 0x07 },
226 	{ 0x51, 0x00 },
227 };
228 
229 /*
230  * I2C read/write functions and macros
231  */
232 
233 static int mb86a20s_i2c_writereg(struct mb86a20s_state *state,
234 			     u8 i2c_addr, u8 reg, u8 data)
235 {
236 	u8 buf[] = { reg, data };
237 	struct i2c_msg msg = {
238 		.addr = i2c_addr, .flags = 0, .buf = buf, .len = 2
239 	};
240 	int rc;
241 
242 	rc = i2c_transfer(state->i2c, &msg, 1);
243 	if (rc != 1) {
244 		dev_err(&state->i2c->dev,
245 			"%s: writereg error (rc == %i, reg == 0x%02x, data == 0x%02x)\n",
246 			__func__, rc, reg, data);
247 		return rc;
248 	}
249 
250 	return 0;
251 }
252 
253 static int mb86a20s_i2c_writeregdata(struct mb86a20s_state *state,
254 				     u8 i2c_addr, struct regdata *rd, int size)
255 {
256 	int i, rc;
257 
258 	for (i = 0; i < size; i++) {
259 		rc = mb86a20s_i2c_writereg(state, i2c_addr, rd[i].reg,
260 					   rd[i].data);
261 		if (rc < 0)
262 			return rc;
263 	}
264 	return 0;
265 }
266 
267 static int mb86a20s_i2c_readreg(struct mb86a20s_state *state,
268 				u8 i2c_addr, u8 reg)
269 {
270 	u8 val;
271 	int rc;
272 	struct i2c_msg msg[] = {
273 		{ .addr = i2c_addr, .flags = 0, .buf = &reg, .len = 1 },
274 		{ .addr = i2c_addr, .flags = I2C_M_RD, .buf = &val, .len = 1 }
275 	};
276 
277 	rc = i2c_transfer(state->i2c, msg, 2);
278 
279 	if (rc != 2) {
280 		dev_err(&state->i2c->dev, "%s: reg=0x%x (error=%d)\n",
281 			__func__, reg, rc);
282 		return (rc < 0) ? rc : -EIO;
283 	}
284 
285 	return val;
286 }
287 
288 #define mb86a20s_readreg(state, reg) \
289 	mb86a20s_i2c_readreg(state, state->config->demod_address, reg)
290 #define mb86a20s_writereg(state, reg, val) \
291 	mb86a20s_i2c_writereg(state, state->config->demod_address, reg, val)
292 #define mb86a20s_writeregdata(state, regdata) \
293 	mb86a20s_i2c_writeregdata(state, state->config->demod_address, \
294 	regdata, ARRAY_SIZE(regdata))
295 
296 /*
297  * Ancillary internal routines (likely compiled inlined)
298  *
299  * The functions below assume that gateway lock has already obtained
300  */
301 
302 static int mb86a20s_read_status(struct dvb_frontend *fe, fe_status_t *status)
303 {
304 	struct mb86a20s_state *state = fe->demodulator_priv;
305 	int val;
306 
307 	*status = 0;
308 
309 	val = mb86a20s_readreg(state, 0x0a) & 0xf;
310 	if (val < 0)
311 		return val;
312 
313 	if (val >= 2)
314 		*status |= FE_HAS_SIGNAL;
315 
316 	if (val >= 4)
317 		*status |= FE_HAS_CARRIER;
318 
319 	if (val >= 5)
320 		*status |= FE_HAS_VITERBI;
321 
322 	if (val >= 7)
323 		*status |= FE_HAS_SYNC;
324 
325 	if (val >= 8)				/* Maybe 9? */
326 		*status |= FE_HAS_LOCK;
327 
328 	dev_dbg(&state->i2c->dev, "%s: Status = 0x%02x (state = %d)\n",
329 		 __func__, *status, val);
330 
331 	return val;
332 }
333 
334 static int mb86a20s_read_signal_strength(struct dvb_frontend *fe)
335 {
336 	struct mb86a20s_state *state = fe->demodulator_priv;
337 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
338 	int rc;
339 	unsigned rf_max, rf_min, rf;
340 
341 	if (state->get_strength_time &&
342 	   (!time_after(jiffies, state->get_strength_time)))
343 		return c->strength.stat[0].uvalue;
344 
345 	/* Reset its value if an error happen */
346 	c->strength.stat[0].uvalue = 0;
347 
348 	/* Does a binary search to get RF strength */
349 	rf_max = 0xfff;
350 	rf_min = 0;
351 	do {
352 		rf = (rf_max + rf_min) / 2;
353 		rc = mb86a20s_writereg(state, 0x04, 0x1f);
354 		if (rc < 0)
355 			return rc;
356 		rc = mb86a20s_writereg(state, 0x05, rf >> 8);
357 		if (rc < 0)
358 			return rc;
359 		rc = mb86a20s_writereg(state, 0x04, 0x20);
360 		if (rc < 0)
361 			return rc;
362 		rc = mb86a20s_writereg(state, 0x05, rf);
363 		if (rc < 0)
364 			return rc;
365 
366 		rc = mb86a20s_readreg(state, 0x02);
367 		if (rc < 0)
368 			return rc;
369 		if (rc & 0x08)
370 			rf_min = (rf_max + rf_min) / 2;
371 		else
372 			rf_max = (rf_max + rf_min) / 2;
373 		if (rf_max - rf_min < 4) {
374 			rf = (rf_max + rf_min) / 2;
375 
376 			/* Rescale it from 2^12 (4096) to 2^16 */
377 			rf = rf << (16 - 12);
378 			if (rf)
379 				rf |= (1 << 12) - 1;
380 
381 			dev_dbg(&state->i2c->dev,
382 				"%s: signal strength = %d (%d < RF=%d < %d)\n",
383 				__func__, rf, rf_min, rf >> 4, rf_max);
384 			c->strength.stat[0].uvalue = rf;
385 			state->get_strength_time = jiffies +
386 						   msecs_to_jiffies(1000);
387 			return 0;
388 		}
389 	} while (1);
390 }
391 
392 static int mb86a20s_get_modulation(struct mb86a20s_state *state,
393 				   unsigned layer)
394 {
395 	int rc;
396 	static unsigned char reg[] = {
397 		[0] = 0x86,	/* Layer A */
398 		[1] = 0x8a,	/* Layer B */
399 		[2] = 0x8e,	/* Layer C */
400 	};
401 
402 	if (layer >= ARRAY_SIZE(reg))
403 		return -EINVAL;
404 	rc = mb86a20s_writereg(state, 0x6d, reg[layer]);
405 	if (rc < 0)
406 		return rc;
407 	rc = mb86a20s_readreg(state, 0x6e);
408 	if (rc < 0)
409 		return rc;
410 	switch ((rc >> 4) & 0x07) {
411 	case 0:
412 		return DQPSK;
413 	case 1:
414 		return QPSK;
415 	case 2:
416 		return QAM_16;
417 	case 3:
418 		return QAM_64;
419 	default:
420 		return QAM_AUTO;
421 	}
422 }
423 
424 static int mb86a20s_get_fec(struct mb86a20s_state *state,
425 			    unsigned layer)
426 {
427 	int rc;
428 
429 	static unsigned char reg[] = {
430 		[0] = 0x87,	/* Layer A */
431 		[1] = 0x8b,	/* Layer B */
432 		[2] = 0x8f,	/* Layer C */
433 	};
434 
435 	if (layer >= ARRAY_SIZE(reg))
436 		return -EINVAL;
437 	rc = mb86a20s_writereg(state, 0x6d, reg[layer]);
438 	if (rc < 0)
439 		return rc;
440 	rc = mb86a20s_readreg(state, 0x6e);
441 	if (rc < 0)
442 		return rc;
443 	switch ((rc >> 4) & 0x07) {
444 	case 0:
445 		return FEC_1_2;
446 	case 1:
447 		return FEC_2_3;
448 	case 2:
449 		return FEC_3_4;
450 	case 3:
451 		return FEC_5_6;
452 	case 4:
453 		return FEC_7_8;
454 	default:
455 		return FEC_AUTO;
456 	}
457 }
458 
459 static int mb86a20s_get_interleaving(struct mb86a20s_state *state,
460 				     unsigned layer)
461 {
462 	int rc;
463 
464 	static unsigned char reg[] = {
465 		[0] = 0x88,	/* Layer A */
466 		[1] = 0x8c,	/* Layer B */
467 		[2] = 0x90,	/* Layer C */
468 	};
469 
470 	if (layer >= ARRAY_SIZE(reg))
471 		return -EINVAL;
472 	rc = mb86a20s_writereg(state, 0x6d, reg[layer]);
473 	if (rc < 0)
474 		return rc;
475 	rc = mb86a20s_readreg(state, 0x6e);
476 	if (rc < 0)
477 		return rc;
478 
479 	switch ((rc >> 4) & 0x07) {
480 	case 1:
481 		return GUARD_INTERVAL_1_4;
482 	case 2:
483 		return GUARD_INTERVAL_1_8;
484 	case 3:
485 		return GUARD_INTERVAL_1_16;
486 	case 4:
487 		return GUARD_INTERVAL_1_32;
488 
489 	default:
490 	case 0:
491 		return GUARD_INTERVAL_AUTO;
492 	}
493 }
494 
495 static int mb86a20s_get_segment_count(struct mb86a20s_state *state,
496 				      unsigned layer)
497 {
498 	int rc, count;
499 	static unsigned char reg[] = {
500 		[0] = 0x89,	/* Layer A */
501 		[1] = 0x8d,	/* Layer B */
502 		[2] = 0x91,	/* Layer C */
503 	};
504 
505 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
506 
507 	if (layer >= ARRAY_SIZE(reg))
508 		return -EINVAL;
509 
510 	rc = mb86a20s_writereg(state, 0x6d, reg[layer]);
511 	if (rc < 0)
512 		return rc;
513 	rc = mb86a20s_readreg(state, 0x6e);
514 	if (rc < 0)
515 		return rc;
516 	count = (rc >> 4) & 0x0f;
517 
518 	dev_dbg(&state->i2c->dev, "%s: segments: %d.\n", __func__, count);
519 
520 	return count;
521 }
522 
523 static void mb86a20s_reset_frontend_cache(struct dvb_frontend *fe)
524 {
525 	struct mb86a20s_state *state = fe->demodulator_priv;
526 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
527 
528 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
529 
530 	/* Fixed parameters */
531 	c->delivery_system = SYS_ISDBT;
532 	c->bandwidth_hz = 6000000;
533 
534 	/* Initialize values that will be later autodetected */
535 	c->isdbt_layer_enabled = 0;
536 	c->transmission_mode = TRANSMISSION_MODE_AUTO;
537 	c->guard_interval = GUARD_INTERVAL_AUTO;
538 	c->isdbt_sb_mode = 0;
539 	c->isdbt_sb_segment_count = 0;
540 }
541 
542 /*
543  * Estimates the bit rate using the per-segment bit rate given by
544  * ABNT/NBR 15601 spec (table 4).
545  */
546 static u32 isdbt_rate[3][5][4] = {
547 	{	/* DQPSK/QPSK */
548 		{  280850,  312060,  330420,  340430 },	/* 1/2 */
549 		{  374470,  416080,  440560,  453910 },	/* 2/3 */
550 		{  421280,  468090,  495630,  510650 },	/* 3/4 */
551 		{  468090,  520100,  550700,  567390 },	/* 5/6 */
552 		{  491500,  546110,  578230,  595760 },	/* 7/8 */
553 	}, {	/* QAM16 */
554 		{  561710,  624130,  660840,  680870 },	/* 1/2 */
555 		{  748950,  832170,  881120,  907820 },	/* 2/3 */
556 		{  842570,  936190,  991260, 1021300 },	/* 3/4 */
557 		{  936190, 1040210, 1101400, 1134780 },	/* 5/6 */
558 		{  983000, 1092220, 1156470, 1191520 },	/* 7/8 */
559 	}, {	/* QAM64 */
560 		{  842570,  936190,  991260, 1021300 },	/* 1/2 */
561 		{ 1123430, 1248260, 1321680, 1361740 },	/* 2/3 */
562 		{ 1263860, 1404290, 1486900, 1531950 },	/* 3/4 */
563 		{ 1404290, 1560320, 1652110, 1702170 },	/* 5/6 */
564 		{ 1474500, 1638340, 1734710, 1787280 },	/* 7/8 */
565 	}
566 };
567 
568 static void mb86a20s_layer_bitrate(struct dvb_frontend *fe, u32 layer,
569 				   u32 modulation, u32 forward_error_correction,
570 				   u32 interleaving,
571 				   u32 segment)
572 {
573 	struct mb86a20s_state *state = fe->demodulator_priv;
574 	u32 rate;
575 	int mod, fec, guard;
576 
577 	/*
578 	 * If modulation/fec/interleaving is not detected, the default is
579 	 * to consider the lowest bit rate, to avoid taking too long time
580 	 * to get BER.
581 	 */
582 	switch (modulation) {
583 	case DQPSK:
584 	case QPSK:
585 	default:
586 		mod = 0;
587 		break;
588 	case QAM_16:
589 		mod = 1;
590 		break;
591 	case QAM_64:
592 		mod = 2;
593 		break;
594 	}
595 
596 	switch (forward_error_correction) {
597 	default:
598 	case FEC_1_2:
599 	case FEC_AUTO:
600 		fec = 0;
601 		break;
602 	case FEC_2_3:
603 		fec = 1;
604 		break;
605 	case FEC_3_4:
606 		fec = 2;
607 		break;
608 	case FEC_5_6:
609 		fec = 3;
610 		break;
611 	case FEC_7_8:
612 		fec = 4;
613 		break;
614 	}
615 
616 	switch (interleaving) {
617 	default:
618 	case GUARD_INTERVAL_1_4:
619 		guard = 0;
620 		break;
621 	case GUARD_INTERVAL_1_8:
622 		guard = 1;
623 		break;
624 	case GUARD_INTERVAL_1_16:
625 		guard = 2;
626 		break;
627 	case GUARD_INTERVAL_1_32:
628 		guard = 3;
629 		break;
630 	}
631 
632 	/* Samples BER at BER_SAMPLING_RATE seconds */
633 	rate = isdbt_rate[mod][fec][guard] * segment * BER_SAMPLING_RATE;
634 
635 	/* Avoids sampling too quickly or to overflow the register */
636 	if (rate < 256)
637 		rate = 256;
638 	else if (rate > (1 << 24) - 1)
639 		rate = (1 << 24) - 1;
640 
641 	dev_dbg(&state->i2c->dev,
642 		"%s: layer %c bitrate: %d kbps; counter = %d (0x%06x)\n",
643 		__func__, 'A' + layer,
644 		segment * isdbt_rate[mod][fec][guard]/1000,
645 		rate, rate);
646 
647 	state->estimated_rate[layer] = rate;
648 }
649 
650 static int mb86a20s_get_frontend(struct dvb_frontend *fe)
651 {
652 	struct mb86a20s_state *state = fe->demodulator_priv;
653 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
654 	int layer, rc;
655 
656 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
657 
658 	/* Reset frontend cache to default values */
659 	mb86a20s_reset_frontend_cache(fe);
660 
661 	/* Check for partial reception */
662 	rc = mb86a20s_writereg(state, 0x6d, 0x85);
663 	if (rc < 0)
664 		return rc;
665 	rc = mb86a20s_readreg(state, 0x6e);
666 	if (rc < 0)
667 		return rc;
668 	c->isdbt_partial_reception = (rc & 0x10) ? 1 : 0;
669 
670 	/* Get per-layer data */
671 
672 	for (layer = 0; layer < NUM_LAYERS; layer++) {
673 		dev_dbg(&state->i2c->dev, "%s: getting data for layer %c.\n",
674 			__func__, 'A' + layer);
675 
676 		rc = mb86a20s_get_segment_count(state, layer);
677 		if (rc < 0)
678 			goto noperlayer_error;
679 		if (rc >= 0 && rc < 14) {
680 			c->layer[layer].segment_count = rc;
681 		} else {
682 			c->layer[layer].segment_count = 0;
683 			state->estimated_rate[layer] = 0;
684 			continue;
685 		}
686 		c->isdbt_layer_enabled |= 1 << layer;
687 		rc = mb86a20s_get_modulation(state, layer);
688 		if (rc < 0)
689 			goto noperlayer_error;
690 		dev_dbg(&state->i2c->dev, "%s: modulation %d.\n",
691 			__func__, rc);
692 		c->layer[layer].modulation = rc;
693 		rc = mb86a20s_get_fec(state, layer);
694 		if (rc < 0)
695 			goto noperlayer_error;
696 		dev_dbg(&state->i2c->dev, "%s: FEC %d.\n",
697 			__func__, rc);
698 		c->layer[layer].fec = rc;
699 		rc = mb86a20s_get_interleaving(state, layer);
700 		if (rc < 0)
701 			goto noperlayer_error;
702 		dev_dbg(&state->i2c->dev, "%s: interleaving %d.\n",
703 			__func__, rc);
704 		c->layer[layer].interleaving = rc;
705 		mb86a20s_layer_bitrate(fe, layer, c->layer[layer].modulation,
706 				       c->layer[layer].fec,
707 				       c->layer[layer].interleaving,
708 				       c->layer[layer].segment_count);
709 	}
710 
711 	rc = mb86a20s_writereg(state, 0x6d, 0x84);
712 	if (rc < 0)
713 		return rc;
714 	if ((rc & 0x60) == 0x20) {
715 		c->isdbt_sb_mode = 1;
716 		/* At least, one segment should exist */
717 		if (!c->isdbt_sb_segment_count)
718 			c->isdbt_sb_segment_count = 1;
719 	}
720 
721 	/* Get transmission mode and guard interval */
722 	rc = mb86a20s_readreg(state, 0x07);
723 	if (rc < 0)
724 		return rc;
725 	if ((rc & 0x60) == 0x20) {
726 		switch (rc & 0x0c >> 2) {
727 		case 0:
728 			c->transmission_mode = TRANSMISSION_MODE_2K;
729 			break;
730 		case 1:
731 			c->transmission_mode = TRANSMISSION_MODE_4K;
732 			break;
733 		case 2:
734 			c->transmission_mode = TRANSMISSION_MODE_8K;
735 			break;
736 		}
737 	}
738 	if (!(rc & 0x10)) {
739 		switch (rc & 0x3) {
740 		case 0:
741 			c->guard_interval = GUARD_INTERVAL_1_4;
742 			break;
743 		case 1:
744 			c->guard_interval = GUARD_INTERVAL_1_8;
745 			break;
746 		case 2:
747 			c->guard_interval = GUARD_INTERVAL_1_16;
748 			break;
749 		}
750 	}
751 	return 0;
752 
753 noperlayer_error:
754 
755 	/* per-layer info is incomplete; discard all per-layer */
756 	c->isdbt_layer_enabled = 0;
757 
758 	return rc;
759 }
760 
761 static int mb86a20s_reset_counters(struct dvb_frontend *fe)
762 {
763 	struct mb86a20s_state *state = fe->demodulator_priv;
764 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
765 	int rc, val;
766 
767 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
768 
769 	/* Reset the counters, if the channel changed */
770 	if (state->last_frequency != c->frequency) {
771 		memset(&c->cnr, 0, sizeof(c->cnr));
772 		memset(&c->pre_bit_error, 0, sizeof(c->pre_bit_error));
773 		memset(&c->pre_bit_count, 0, sizeof(c->pre_bit_count));
774 		memset(&c->post_bit_error, 0, sizeof(c->post_bit_error));
775 		memset(&c->post_bit_count, 0, sizeof(c->post_bit_count));
776 		memset(&c->block_error, 0, sizeof(c->block_error));
777 		memset(&c->block_count, 0, sizeof(c->block_count));
778 
779 		state->last_frequency = c->frequency;
780 	}
781 
782 	/* Clear status for most stats */
783 
784 	/* BER/PER counter reset */
785 	rc = mb86a20s_writeregdata(state, mb86a20s_per_ber_reset);
786 	if (rc < 0)
787 		goto err;
788 
789 	/* CNR counter reset */
790 	rc = mb86a20s_readreg(state, 0x45);
791 	if (rc < 0)
792 		goto err;
793 	val = rc;
794 	rc = mb86a20s_writereg(state, 0x45, val | 0x10);
795 	if (rc < 0)
796 		goto err;
797 	rc = mb86a20s_writereg(state, 0x45, val & 0x6f);
798 	if (rc < 0)
799 		goto err;
800 
801 	/* MER counter reset */
802 	rc = mb86a20s_writereg(state, 0x50, 0x50);
803 	if (rc < 0)
804 		goto err;
805 	rc = mb86a20s_readreg(state, 0x51);
806 	if (rc < 0)
807 		goto err;
808 	val = rc;
809 	rc = mb86a20s_writereg(state, 0x51, val | 0x01);
810 	if (rc < 0)
811 		goto err;
812 	rc = mb86a20s_writereg(state, 0x51, val & 0x06);
813 	if (rc < 0)
814 		goto err;
815 
816 	goto ok;
817 err:
818 	dev_err(&state->i2c->dev,
819 		"%s: Can't reset FE statistics (error %d).\n",
820 		__func__, rc);
821 ok:
822 	return rc;
823 }
824 
825 static int mb86a20s_get_pre_ber(struct dvb_frontend *fe,
826 				unsigned layer,
827 				u32 *error, u32 *count)
828 {
829 	struct mb86a20s_state *state = fe->demodulator_priv;
830 	int rc, val;
831 
832 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
833 
834 	if (layer >= NUM_LAYERS)
835 		return -EINVAL;
836 
837 	/* Check if the BER measures are already available */
838 	rc = mb86a20s_readreg(state, 0x54);
839 	if (rc < 0)
840 		return rc;
841 
842 	/* Check if data is available for that layer */
843 	if (!(rc & (1 << layer))) {
844 		dev_dbg(&state->i2c->dev,
845 			"%s: preBER for layer %c is not available yet.\n",
846 			__func__, 'A' + layer);
847 		return -EBUSY;
848 	}
849 
850 	/* Read Bit Error Count */
851 	rc = mb86a20s_readreg(state, 0x55 + layer * 3);
852 	if (rc < 0)
853 		return rc;
854 	*error = rc << 16;
855 	rc = mb86a20s_readreg(state, 0x56 + layer * 3);
856 	if (rc < 0)
857 		return rc;
858 	*error |= rc << 8;
859 	rc = mb86a20s_readreg(state, 0x57 + layer * 3);
860 	if (rc < 0)
861 		return rc;
862 	*error |= rc;
863 
864 	dev_dbg(&state->i2c->dev,
865 		"%s: bit error before Viterbi for layer %c: %d.\n",
866 		__func__, 'A' + layer, *error);
867 
868 	/* Read Bit Count */
869 	rc = mb86a20s_writereg(state, 0x50, 0xa7 + layer * 3);
870 	if (rc < 0)
871 		return rc;
872 	rc = mb86a20s_readreg(state, 0x51);
873 	if (rc < 0)
874 		return rc;
875 	*count = rc << 16;
876 	rc = mb86a20s_writereg(state, 0x50, 0xa8 + layer * 3);
877 	if (rc < 0)
878 		return rc;
879 	rc = mb86a20s_readreg(state, 0x51);
880 	if (rc < 0)
881 		return rc;
882 	*count |= rc << 8;
883 	rc = mb86a20s_writereg(state, 0x50, 0xa9 + layer * 3);
884 	if (rc < 0)
885 		return rc;
886 	rc = mb86a20s_readreg(state, 0x51);
887 	if (rc < 0)
888 		return rc;
889 	*count |= rc;
890 
891 	dev_dbg(&state->i2c->dev,
892 		"%s: bit count before Viterbi for layer %c: %d.\n",
893 		__func__, 'A' + layer, *count);
894 
895 
896 	/*
897 	 * As we get TMCC data from the frontend, we can better estimate the
898 	 * BER bit counters, in order to do the BER measure during a longer
899 	 * time. Use those data, if available, to update the bit count
900 	 * measure.
901 	 */
902 
903 	if (state->estimated_rate[layer]
904 	    && state->estimated_rate[layer] != *count) {
905 		dev_dbg(&state->i2c->dev,
906 			"%s: updating layer %c preBER counter to %d.\n",
907 			__func__, 'A' + layer, state->estimated_rate[layer]);
908 
909 		/* Turn off BER before Viterbi */
910 		rc = mb86a20s_writereg(state, 0x52, 0x00);
911 
912 		/* Update counter for this layer */
913 		rc = mb86a20s_writereg(state, 0x50, 0xa7 + layer * 3);
914 		if (rc < 0)
915 			return rc;
916 		rc = mb86a20s_writereg(state, 0x51,
917 				       state->estimated_rate[layer] >> 16);
918 		if (rc < 0)
919 			return rc;
920 		rc = mb86a20s_writereg(state, 0x50, 0xa8 + layer * 3);
921 		if (rc < 0)
922 			return rc;
923 		rc = mb86a20s_writereg(state, 0x51,
924 				       state->estimated_rate[layer] >> 8);
925 		if (rc < 0)
926 			return rc;
927 		rc = mb86a20s_writereg(state, 0x50, 0xa9 + layer * 3);
928 		if (rc < 0)
929 			return rc;
930 		rc = mb86a20s_writereg(state, 0x51,
931 				       state->estimated_rate[layer]);
932 		if (rc < 0)
933 			return rc;
934 
935 		/* Turn on BER before Viterbi */
936 		rc = mb86a20s_writereg(state, 0x52, 0x01);
937 
938 		/* Reset all preBER counters */
939 		rc = mb86a20s_writereg(state, 0x53, 0x00);
940 		if (rc < 0)
941 			return rc;
942 		rc = mb86a20s_writereg(state, 0x53, 0x07);
943 	} else {
944 		/* Reset counter to collect new data */
945 		rc = mb86a20s_readreg(state, 0x53);
946 		if (rc < 0)
947 			return rc;
948 		val = rc;
949 		rc = mb86a20s_writereg(state, 0x53, val & ~(1 << layer));
950 		if (rc < 0)
951 			return rc;
952 		rc = mb86a20s_writereg(state, 0x53, val | (1 << layer));
953 	}
954 
955 	return rc;
956 }
957 
958 static int mb86a20s_get_post_ber(struct dvb_frontend *fe,
959 				 unsigned layer,
960 				  u32 *error, u32 *count)
961 {
962 	struct mb86a20s_state *state = fe->demodulator_priv;
963 	u32 counter, collect_rate;
964 	int rc, val;
965 
966 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
967 
968 	if (layer >= NUM_LAYERS)
969 		return -EINVAL;
970 
971 	/* Check if the BER measures are already available */
972 	rc = mb86a20s_readreg(state, 0x60);
973 	if (rc < 0)
974 		return rc;
975 
976 	/* Check if data is available for that layer */
977 	if (!(rc & (1 << layer))) {
978 		dev_dbg(&state->i2c->dev,
979 			"%s: post BER for layer %c is not available yet.\n",
980 			__func__, 'A' + layer);
981 		return -EBUSY;
982 	}
983 
984 	/* Read Bit Error Count */
985 	rc = mb86a20s_readreg(state, 0x64 + layer * 3);
986 	if (rc < 0)
987 		return rc;
988 	*error = rc << 16;
989 	rc = mb86a20s_readreg(state, 0x65 + layer * 3);
990 	if (rc < 0)
991 		return rc;
992 	*error |= rc << 8;
993 	rc = mb86a20s_readreg(state, 0x66 + layer * 3);
994 	if (rc < 0)
995 		return rc;
996 	*error |= rc;
997 
998 	dev_dbg(&state->i2c->dev,
999 		"%s: post bit error for layer %c: %d.\n",
1000 		__func__, 'A' + layer, *error);
1001 
1002 	/* Read Bit Count */
1003 	rc = mb86a20s_writereg(state, 0x50, 0xdc + layer * 2);
1004 	if (rc < 0)
1005 		return rc;
1006 	rc = mb86a20s_readreg(state, 0x51);
1007 	if (rc < 0)
1008 		return rc;
1009 	counter = rc << 8;
1010 	rc = mb86a20s_writereg(state, 0x50, 0xdd + layer * 2);
1011 	if (rc < 0)
1012 		return rc;
1013 	rc = mb86a20s_readreg(state, 0x51);
1014 	if (rc < 0)
1015 		return rc;
1016 	counter |= rc;
1017 	*count = counter * 204 * 8;
1018 
1019 	dev_dbg(&state->i2c->dev,
1020 		"%s: post bit count for layer %c: %d.\n",
1021 		__func__, 'A' + layer, *count);
1022 
1023 	/*
1024 	 * As we get TMCC data from the frontend, we can better estimate the
1025 	 * BER bit counters, in order to do the BER measure during a longer
1026 	 * time. Use those data, if available, to update the bit count
1027 	 * measure.
1028 	 */
1029 
1030 	if (!state->estimated_rate[layer])
1031 		goto reset_measurement;
1032 
1033 	collect_rate = state->estimated_rate[layer] / 204 / 8;
1034 	if (collect_rate < 32)
1035 		collect_rate = 32;
1036 	if (collect_rate > 65535)
1037 		collect_rate = 65535;
1038 	if (collect_rate != counter) {
1039 		dev_dbg(&state->i2c->dev,
1040 			"%s: updating postBER counter on layer %c to %d.\n",
1041 			__func__, 'A' + layer, collect_rate);
1042 
1043 		/* Turn off BER after Viterbi */
1044 		rc = mb86a20s_writereg(state, 0x5e, 0x00);
1045 
1046 		/* Update counter for this layer */
1047 		rc = mb86a20s_writereg(state, 0x50, 0xdc + layer * 2);
1048 		if (rc < 0)
1049 			return rc;
1050 		rc = mb86a20s_writereg(state, 0x51, collect_rate >> 8);
1051 		if (rc < 0)
1052 			return rc;
1053 		rc = mb86a20s_writereg(state, 0x50, 0xdd + layer * 2);
1054 		if (rc < 0)
1055 			return rc;
1056 		rc = mb86a20s_writereg(state, 0x51, collect_rate & 0xff);
1057 		if (rc < 0)
1058 			return rc;
1059 
1060 		/* Turn on BER after Viterbi */
1061 		rc = mb86a20s_writereg(state, 0x5e, 0x07);
1062 
1063 		/* Reset all preBER counters */
1064 		rc = mb86a20s_writereg(state, 0x5f, 0x00);
1065 		if (rc < 0)
1066 			return rc;
1067 		rc = mb86a20s_writereg(state, 0x5f, 0x07);
1068 
1069 		return rc;
1070 	}
1071 
1072 reset_measurement:
1073 	/* Reset counter to collect new data */
1074 	rc = mb86a20s_readreg(state, 0x5f);
1075 	if (rc < 0)
1076 		return rc;
1077 	val = rc;
1078 	rc = mb86a20s_writereg(state, 0x5f, val & ~(1 << layer));
1079 	if (rc < 0)
1080 		return rc;
1081 	rc = mb86a20s_writereg(state, 0x5f, val | (1 << layer));
1082 
1083 	return rc;
1084 }
1085 
1086 static int mb86a20s_get_blk_error(struct dvb_frontend *fe,
1087 			    unsigned layer,
1088 			    u32 *error, u32 *count)
1089 {
1090 	struct mb86a20s_state *state = fe->demodulator_priv;
1091 	int rc, val;
1092 	u32 collect_rate;
1093 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
1094 
1095 	if (layer >= NUM_LAYERS)
1096 		return -EINVAL;
1097 
1098 	/* Check if the PER measures are already available */
1099 	rc = mb86a20s_writereg(state, 0x50, 0xb8);
1100 	if (rc < 0)
1101 		return rc;
1102 	rc = mb86a20s_readreg(state, 0x51);
1103 	if (rc < 0)
1104 		return rc;
1105 
1106 	/* Check if data is available for that layer */
1107 
1108 	if (!(rc & (1 << layer))) {
1109 		dev_dbg(&state->i2c->dev,
1110 			"%s: block counts for layer %c aren't available yet.\n",
1111 			__func__, 'A' + layer);
1112 		return -EBUSY;
1113 	}
1114 
1115 	/* Read Packet error Count */
1116 	rc = mb86a20s_writereg(state, 0x50, 0xb9 + layer * 2);
1117 	if (rc < 0)
1118 		return rc;
1119 	rc = mb86a20s_readreg(state, 0x51);
1120 	if (rc < 0)
1121 		return rc;
1122 	*error = rc << 8;
1123 	rc = mb86a20s_writereg(state, 0x50, 0xba + layer * 2);
1124 	if (rc < 0)
1125 		return rc;
1126 	rc = mb86a20s_readreg(state, 0x51);
1127 	if (rc < 0)
1128 		return rc;
1129 	*error |= rc;
1130 	dev_dbg(&state->i2c->dev, "%s: block error for layer %c: %d.\n",
1131 		__func__, 'A' + layer, *error);
1132 
1133 	/* Read Bit Count */
1134 	rc = mb86a20s_writereg(state, 0x50, 0xb2 + layer * 2);
1135 	if (rc < 0)
1136 		return rc;
1137 	rc = mb86a20s_readreg(state, 0x51);
1138 	if (rc < 0)
1139 		return rc;
1140 	*count = rc << 8;
1141 	rc = mb86a20s_writereg(state, 0x50, 0xb3 + layer * 2);
1142 	if (rc < 0)
1143 		return rc;
1144 	rc = mb86a20s_readreg(state, 0x51);
1145 	if (rc < 0)
1146 		return rc;
1147 	*count |= rc;
1148 
1149 	dev_dbg(&state->i2c->dev,
1150 		"%s: block count for layer %c: %d.\n",
1151 		__func__, 'A' + layer, *count);
1152 
1153 	/*
1154 	 * As we get TMCC data from the frontend, we can better estimate the
1155 	 * BER bit counters, in order to do the BER measure during a longer
1156 	 * time. Use those data, if available, to update the bit count
1157 	 * measure.
1158 	 */
1159 
1160 	if (!state->estimated_rate[layer])
1161 		goto reset_measurement;
1162 
1163 	collect_rate = state->estimated_rate[layer] / 204 / 8;
1164 	if (collect_rate < 32)
1165 		collect_rate = 32;
1166 	if (collect_rate > 65535)
1167 		collect_rate = 65535;
1168 
1169 	if (collect_rate != *count) {
1170 		dev_dbg(&state->i2c->dev,
1171 			"%s: updating PER counter on layer %c to %d.\n",
1172 			__func__, 'A' + layer, collect_rate);
1173 
1174 		/* Stop PER measurement */
1175 		rc = mb86a20s_writereg(state, 0x50, 0xb0);
1176 		if (rc < 0)
1177 			return rc;
1178 		rc = mb86a20s_writereg(state, 0x51, 0x00);
1179 		if (rc < 0)
1180 			return rc;
1181 
1182 		/* Update this layer's counter */
1183 		rc = mb86a20s_writereg(state, 0x50, 0xb2 + layer * 2);
1184 		if (rc < 0)
1185 			return rc;
1186 		rc = mb86a20s_writereg(state, 0x51, collect_rate >> 8);
1187 		if (rc < 0)
1188 			return rc;
1189 		rc = mb86a20s_writereg(state, 0x50, 0xb3 + layer * 2);
1190 		if (rc < 0)
1191 			return rc;
1192 		rc = mb86a20s_writereg(state, 0x51, collect_rate & 0xff);
1193 		if (rc < 0)
1194 			return rc;
1195 
1196 		/* start PER measurement */
1197 		rc = mb86a20s_writereg(state, 0x50, 0xb0);
1198 		if (rc < 0)
1199 			return rc;
1200 		rc = mb86a20s_writereg(state, 0x51, 0x07);
1201 		if (rc < 0)
1202 			return rc;
1203 
1204 		/* Reset all counters to collect new data */
1205 		rc = mb86a20s_writereg(state, 0x50, 0xb1);
1206 		if (rc < 0)
1207 			return rc;
1208 		rc = mb86a20s_writereg(state, 0x51, 0x07);
1209 		if (rc < 0)
1210 			return rc;
1211 		rc = mb86a20s_writereg(state, 0x51, 0x00);
1212 
1213 		return rc;
1214 	}
1215 
1216 reset_measurement:
1217 	/* Reset counter to collect new data */
1218 	rc = mb86a20s_writereg(state, 0x50, 0xb1);
1219 	if (rc < 0)
1220 		return rc;
1221 	rc = mb86a20s_readreg(state, 0x51);
1222 	if (rc < 0)
1223 		return rc;
1224 	val = rc;
1225 	rc = mb86a20s_writereg(state, 0x51, val | (1 << layer));
1226 	if (rc < 0)
1227 		return rc;
1228 	rc = mb86a20s_writereg(state, 0x51, val & ~(1 << layer));
1229 
1230 	return rc;
1231 }
1232 
1233 struct linear_segments {
1234 	unsigned x, y;
1235 };
1236 
1237 /*
1238  * All tables below return a dB/1000 measurement
1239  */
1240 
1241 static struct linear_segments cnr_to_db_table[] = {
1242 	{ 19648,     0},
1243 	{ 18187,  1000},
1244 	{ 16534,  2000},
1245 	{ 14823,  3000},
1246 	{ 13161,  4000},
1247 	{ 11622,  5000},
1248 	{ 10279,  6000},
1249 	{  9089,  7000},
1250 	{  8042,  8000},
1251 	{  7137,  9000},
1252 	{  6342, 10000},
1253 	{  5641, 11000},
1254 	{  5030, 12000},
1255 	{  4474, 13000},
1256 	{  3988, 14000},
1257 	{  3556, 15000},
1258 	{  3180, 16000},
1259 	{  2841, 17000},
1260 	{  2541, 18000},
1261 	{  2276, 19000},
1262 	{  2038, 20000},
1263 	{  1800, 21000},
1264 	{  1625, 22000},
1265 	{  1462, 23000},
1266 	{  1324, 24000},
1267 	{  1175, 25000},
1268 	{  1063, 26000},
1269 	{   980, 27000},
1270 	{   907, 28000},
1271 	{   840, 29000},
1272 	{   788, 30000},
1273 };
1274 
1275 static struct linear_segments cnr_64qam_table[] = {
1276 	{ 3922688,     0},
1277 	{ 3920384,  1000},
1278 	{ 3902720,  2000},
1279 	{ 3894784,  3000},
1280 	{ 3882496,  4000},
1281 	{ 3872768,  5000},
1282 	{ 3858944,  6000},
1283 	{ 3851520,  7000},
1284 	{ 3838976,  8000},
1285 	{ 3829248,  9000},
1286 	{ 3818240, 10000},
1287 	{ 3806976, 11000},
1288 	{ 3791872, 12000},
1289 	{ 3767040, 13000},
1290 	{ 3720960, 14000},
1291 	{ 3637504, 15000},
1292 	{ 3498496, 16000},
1293 	{ 3296000, 17000},
1294 	{ 3031040, 18000},
1295 	{ 2715392, 19000},
1296 	{ 2362624, 20000},
1297 	{ 1963264, 21000},
1298 	{ 1649664, 22000},
1299 	{ 1366784, 23000},
1300 	{ 1120768, 24000},
1301 	{  890880, 25000},
1302 	{  723456, 26000},
1303 	{  612096, 27000},
1304 	{  518912, 28000},
1305 	{  448256, 29000},
1306 	{  388864, 30000},
1307 };
1308 
1309 static struct linear_segments cnr_16qam_table[] = {
1310 	{ 5314816,     0},
1311 	{ 5219072,  1000},
1312 	{ 5118720,  2000},
1313 	{ 4998912,  3000},
1314 	{ 4875520,  4000},
1315 	{ 4736000,  5000},
1316 	{ 4604160,  6000},
1317 	{ 4458752,  7000},
1318 	{ 4300288,  8000},
1319 	{ 4092928,  9000},
1320 	{ 3836160, 10000},
1321 	{ 3521024, 11000},
1322 	{ 3155968, 12000},
1323 	{ 2756864, 13000},
1324 	{ 2347008, 14000},
1325 	{ 1955072, 15000},
1326 	{ 1593600, 16000},
1327 	{ 1297920, 17000},
1328 	{ 1043968, 18000},
1329 	{  839680, 19000},
1330 	{  672256, 20000},
1331 	{  523008, 21000},
1332 	{  424704, 22000},
1333 	{  345088, 23000},
1334 	{  280064, 24000},
1335 	{  221440, 25000},
1336 	{  179712, 26000},
1337 	{  151040, 27000},
1338 	{  128512, 28000},
1339 	{  110080, 29000},
1340 	{   95744, 30000},
1341 };
1342 
1343 struct linear_segments cnr_qpsk_table[] = {
1344 	{ 2834176,     0},
1345 	{ 2683648,  1000},
1346 	{ 2536960,  2000},
1347 	{ 2391808,  3000},
1348 	{ 2133248,  4000},
1349 	{ 1906176,  5000},
1350 	{ 1666560,  6000},
1351 	{ 1422080,  7000},
1352 	{ 1189632,  8000},
1353 	{  976384,  9000},
1354 	{  790272, 10000},
1355 	{  633344, 11000},
1356 	{  505600, 12000},
1357 	{  402944, 13000},
1358 	{  320768, 14000},
1359 	{  255488, 15000},
1360 	{  204032, 16000},
1361 	{  163072, 17000},
1362 	{  130304, 18000},
1363 	{  105216, 19000},
1364 	{   83456, 20000},
1365 	{   65024, 21000},
1366 	{   52480, 22000},
1367 	{   42752, 23000},
1368 	{   34560, 24000},
1369 	{   27136, 25000},
1370 	{   22016, 26000},
1371 	{   18432, 27000},
1372 	{   15616, 28000},
1373 	{   13312, 29000},
1374 	{   11520, 30000},
1375 };
1376 
1377 static u32 interpolate_value(u32 value, struct linear_segments *segments,
1378 			     unsigned len)
1379 {
1380 	u64 tmp64;
1381 	u32 dx, dy;
1382 	int i, ret;
1383 
1384 	if (value >= segments[0].x)
1385 		return segments[0].y;
1386 	if (value < segments[len-1].x)
1387 		return segments[len-1].y;
1388 
1389 	for (i = 1; i < len - 1; i++) {
1390 		/* If value is identical, no need to interpolate */
1391 		if (value == segments[i].x)
1392 			return segments[i].y;
1393 		if (value > segments[i].x)
1394 			break;
1395 	}
1396 
1397 	/* Linear interpolation between the two (x,y) points */
1398 	dy = segments[i].y - segments[i - 1].y;
1399 	dx = segments[i - 1].x - segments[i].x;
1400 	tmp64 = value - segments[i].x;
1401 	tmp64 *= dy;
1402 	do_div(tmp64, dx);
1403 	ret = segments[i].y - tmp64;
1404 
1405 	return ret;
1406 }
1407 
1408 static int mb86a20s_get_main_CNR(struct dvb_frontend *fe)
1409 {
1410 	struct mb86a20s_state *state = fe->demodulator_priv;
1411 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
1412 	u32 cnr_linear, cnr;
1413 	int rc, val;
1414 
1415 	/* Check if CNR is available */
1416 	rc = mb86a20s_readreg(state, 0x45);
1417 	if (rc < 0)
1418 		return rc;
1419 
1420 	if (!(rc & 0x40)) {
1421 		dev_dbg(&state->i2c->dev, "%s: CNR is not available yet.\n",
1422 			 __func__);
1423 		return -EBUSY;
1424 	}
1425 	val = rc;
1426 
1427 	rc = mb86a20s_readreg(state, 0x46);
1428 	if (rc < 0)
1429 		return rc;
1430 	cnr_linear = rc << 8;
1431 
1432 	rc = mb86a20s_readreg(state, 0x46);
1433 	if (rc < 0)
1434 		return rc;
1435 	cnr_linear |= rc;
1436 
1437 	cnr = interpolate_value(cnr_linear,
1438 				cnr_to_db_table, ARRAY_SIZE(cnr_to_db_table));
1439 
1440 	c->cnr.stat[0].scale = FE_SCALE_DECIBEL;
1441 	c->cnr.stat[0].svalue = cnr;
1442 
1443 	dev_dbg(&state->i2c->dev, "%s: CNR is %d.%03d dB (%d)\n",
1444 		__func__, cnr / 1000, cnr % 1000, cnr_linear);
1445 
1446 	/* CNR counter reset */
1447 	rc = mb86a20s_writereg(state, 0x45, val | 0x10);
1448 	if (rc < 0)
1449 		return rc;
1450 	rc = mb86a20s_writereg(state, 0x45, val & 0x6f);
1451 
1452 	return rc;
1453 }
1454 
1455 static int mb86a20s_get_blk_error_layer_CNR(struct dvb_frontend *fe)
1456 {
1457 	struct mb86a20s_state *state = fe->demodulator_priv;
1458 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
1459 	u32 mer, cnr;
1460 	int rc, val, layer;
1461 	struct linear_segments *segs;
1462 	unsigned segs_len;
1463 
1464 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
1465 
1466 	/* Check if the measures are already available */
1467 	rc = mb86a20s_writereg(state, 0x50, 0x5b);
1468 	if (rc < 0)
1469 		return rc;
1470 	rc = mb86a20s_readreg(state, 0x51);
1471 	if (rc < 0)
1472 		return rc;
1473 
1474 	/* Check if data is available */
1475 	if (!(rc & 0x01)) {
1476 		dev_dbg(&state->i2c->dev,
1477 			"%s: MER measures aren't available yet.\n", __func__);
1478 		return -EBUSY;
1479 	}
1480 
1481 	/* Read all layers */
1482 	for (layer = 0; layer < NUM_LAYERS; layer++) {
1483 		if (!(c->isdbt_layer_enabled & (1 << layer))) {
1484 			c->cnr.stat[1 + layer].scale = FE_SCALE_NOT_AVAILABLE;
1485 			continue;
1486 		}
1487 
1488 		rc = mb86a20s_writereg(state, 0x50, 0x52 + layer * 3);
1489 		if (rc < 0)
1490 			return rc;
1491 		rc = mb86a20s_readreg(state, 0x51);
1492 		if (rc < 0)
1493 			return rc;
1494 		mer = rc << 16;
1495 		rc = mb86a20s_writereg(state, 0x50, 0x53 + layer * 3);
1496 		if (rc < 0)
1497 			return rc;
1498 		rc = mb86a20s_readreg(state, 0x51);
1499 		if (rc < 0)
1500 			return rc;
1501 		mer |= rc << 8;
1502 		rc = mb86a20s_writereg(state, 0x50, 0x54 + layer * 3);
1503 		if (rc < 0)
1504 			return rc;
1505 		rc = mb86a20s_readreg(state, 0x51);
1506 		if (rc < 0)
1507 			return rc;
1508 		mer |= rc;
1509 
1510 		switch (c->layer[layer].modulation) {
1511 		case DQPSK:
1512 		case QPSK:
1513 			segs = cnr_qpsk_table;
1514 			segs_len = ARRAY_SIZE(cnr_qpsk_table);
1515 			break;
1516 		case QAM_16:
1517 			segs = cnr_16qam_table;
1518 			segs_len = ARRAY_SIZE(cnr_16qam_table);
1519 			break;
1520 		default:
1521 		case QAM_64:
1522 			segs = cnr_64qam_table;
1523 			segs_len = ARRAY_SIZE(cnr_64qam_table);
1524 			break;
1525 		}
1526 		cnr = interpolate_value(mer, segs, segs_len);
1527 
1528 		c->cnr.stat[1 + layer].scale = FE_SCALE_DECIBEL;
1529 		c->cnr.stat[1 + layer].svalue = cnr;
1530 
1531 		dev_dbg(&state->i2c->dev,
1532 			"%s: CNR for layer %c is %d.%03d dB (MER = %d).\n",
1533 			__func__, 'A' + layer, cnr / 1000, cnr % 1000, mer);
1534 
1535 	}
1536 
1537 	/* Start a new MER measurement */
1538 	/* MER counter reset */
1539 	rc = mb86a20s_writereg(state, 0x50, 0x50);
1540 	if (rc < 0)
1541 		return rc;
1542 	rc = mb86a20s_readreg(state, 0x51);
1543 	if (rc < 0)
1544 		return rc;
1545 	val = rc;
1546 
1547 	rc = mb86a20s_writereg(state, 0x51, val | 0x01);
1548 	if (rc < 0)
1549 		return rc;
1550 	rc = mb86a20s_writereg(state, 0x51, val & 0x06);
1551 	if (rc < 0)
1552 		return rc;
1553 
1554 	return 0;
1555 }
1556 
1557 static void mb86a20s_stats_not_ready(struct dvb_frontend *fe)
1558 {
1559 	struct mb86a20s_state *state = fe->demodulator_priv;
1560 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
1561 	int layer;
1562 
1563 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
1564 
1565 	/* Fill the length of each status counter */
1566 
1567 	/* Only global stats */
1568 	c->strength.len = 1;
1569 
1570 	/* Per-layer stats - 3 layers + global */
1571 	c->cnr.len = NUM_LAYERS + 1;
1572 	c->pre_bit_error.len = NUM_LAYERS + 1;
1573 	c->pre_bit_count.len = NUM_LAYERS + 1;
1574 	c->post_bit_error.len = NUM_LAYERS + 1;
1575 	c->post_bit_count.len = NUM_LAYERS + 1;
1576 	c->block_error.len = NUM_LAYERS + 1;
1577 	c->block_count.len = NUM_LAYERS + 1;
1578 
1579 	/* Signal is always available */
1580 	c->strength.stat[0].scale = FE_SCALE_RELATIVE;
1581 	c->strength.stat[0].uvalue = 0;
1582 
1583 	/* Put all of them at FE_SCALE_NOT_AVAILABLE */
1584 	for (layer = 0; layer < NUM_LAYERS + 1; layer++) {
1585 		c->cnr.stat[layer].scale = FE_SCALE_NOT_AVAILABLE;
1586 		c->pre_bit_error.stat[layer].scale = FE_SCALE_NOT_AVAILABLE;
1587 		c->pre_bit_count.stat[layer].scale = FE_SCALE_NOT_AVAILABLE;
1588 		c->post_bit_error.stat[layer].scale = FE_SCALE_NOT_AVAILABLE;
1589 		c->post_bit_count.stat[layer].scale = FE_SCALE_NOT_AVAILABLE;
1590 		c->block_error.stat[layer].scale = FE_SCALE_NOT_AVAILABLE;
1591 		c->block_count.stat[layer].scale = FE_SCALE_NOT_AVAILABLE;
1592 	}
1593 }
1594 
1595 static int mb86a20s_get_stats(struct dvb_frontend *fe, int status_nr)
1596 {
1597 	struct mb86a20s_state *state = fe->demodulator_priv;
1598 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
1599 	int rc = 0, layer;
1600 	u32 bit_error = 0, bit_count = 0;
1601 	u32 t_pre_bit_error = 0, t_pre_bit_count = 0;
1602 	u32 t_post_bit_error = 0, t_post_bit_count = 0;
1603 	u32 block_error = 0, block_count = 0;
1604 	u32 t_block_error = 0, t_block_count = 0;
1605 	int active_layers = 0, pre_ber_layers = 0, post_ber_layers = 0;
1606 	int per_layers = 0;
1607 
1608 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
1609 
1610 	mb86a20s_get_main_CNR(fe);
1611 
1612 	/* Get per-layer stats */
1613 	mb86a20s_get_blk_error_layer_CNR(fe);
1614 
1615 	/*
1616 	 * At state 7, only CNR is available
1617 	 * For BER measures, state=9 is required
1618 	 * FIXME: we may get MER measures with state=8
1619 	 */
1620 	if (status_nr < 9)
1621 		return 0;
1622 
1623 	for (layer = 0; layer < NUM_LAYERS; layer++) {
1624 		if (c->isdbt_layer_enabled & (1 << layer)) {
1625 			/* Layer is active and has rc segments */
1626 			active_layers++;
1627 
1628 			/* Handle BER before vterbi */
1629 			rc = mb86a20s_get_pre_ber(fe, layer,
1630 						  &bit_error, &bit_count);
1631 			if (rc >= 0) {
1632 				c->pre_bit_error.stat[1 + layer].scale = FE_SCALE_COUNTER;
1633 				c->pre_bit_error.stat[1 + layer].uvalue += bit_error;
1634 				c->pre_bit_count.stat[1 + layer].scale = FE_SCALE_COUNTER;
1635 				c->pre_bit_count.stat[1 + layer].uvalue += bit_count;
1636 			} else if (rc != -EBUSY) {
1637 				/*
1638 					* If an I/O error happened,
1639 					* measures are now unavailable
1640 					*/
1641 				c->pre_bit_error.stat[1 + layer].scale = FE_SCALE_NOT_AVAILABLE;
1642 				c->pre_bit_count.stat[1 + layer].scale = FE_SCALE_NOT_AVAILABLE;
1643 				dev_err(&state->i2c->dev,
1644 					"%s: Can't get BER for layer %c (error %d).\n",
1645 					__func__, 'A' + layer, rc);
1646 			}
1647 			if (c->block_error.stat[1 + layer].scale != FE_SCALE_NOT_AVAILABLE)
1648 				pre_ber_layers++;
1649 
1650 			/* Handle BER post vterbi */
1651 			rc = mb86a20s_get_post_ber(fe, layer,
1652 						   &bit_error, &bit_count);
1653 			if (rc >= 0) {
1654 				c->post_bit_error.stat[1 + layer].scale = FE_SCALE_COUNTER;
1655 				c->post_bit_error.stat[1 + layer].uvalue += bit_error;
1656 				c->post_bit_count.stat[1 + layer].scale = FE_SCALE_COUNTER;
1657 				c->post_bit_count.stat[1 + layer].uvalue += bit_count;
1658 			} else if (rc != -EBUSY) {
1659 				/*
1660 					* If an I/O error happened,
1661 					* measures are now unavailable
1662 					*/
1663 				c->post_bit_error.stat[1 + layer].scale = FE_SCALE_NOT_AVAILABLE;
1664 				c->post_bit_count.stat[1 + layer].scale = FE_SCALE_NOT_AVAILABLE;
1665 				dev_err(&state->i2c->dev,
1666 					"%s: Can't get BER for layer %c (error %d).\n",
1667 					__func__, 'A' + layer, rc);
1668 			}
1669 			if (c->block_error.stat[1 + layer].scale != FE_SCALE_NOT_AVAILABLE)
1670 				post_ber_layers++;
1671 
1672 			/* Handle Block errors for PER/UCB reports */
1673 			rc = mb86a20s_get_blk_error(fe, layer,
1674 						&block_error,
1675 						&block_count);
1676 			if (rc >= 0) {
1677 				c->block_error.stat[1 + layer].scale = FE_SCALE_COUNTER;
1678 				c->block_error.stat[1 + layer].uvalue += block_error;
1679 				c->block_count.stat[1 + layer].scale = FE_SCALE_COUNTER;
1680 				c->block_count.stat[1 + layer].uvalue += block_count;
1681 			} else if (rc != -EBUSY) {
1682 				/*
1683 					* If an I/O error happened,
1684 					* measures are now unavailable
1685 					*/
1686 				c->block_error.stat[1 + layer].scale = FE_SCALE_NOT_AVAILABLE;
1687 				c->block_count.stat[1 + layer].scale = FE_SCALE_NOT_AVAILABLE;
1688 				dev_err(&state->i2c->dev,
1689 					"%s: Can't get PER for layer %c (error %d).\n",
1690 					__func__, 'A' + layer, rc);
1691 
1692 			}
1693 			if (c->block_error.stat[1 + layer].scale != FE_SCALE_NOT_AVAILABLE)
1694 				per_layers++;
1695 
1696 			/* Update total preBER */
1697 			t_pre_bit_error += c->pre_bit_error.stat[1 + layer].uvalue;
1698 			t_pre_bit_count += c->pre_bit_count.stat[1 + layer].uvalue;
1699 
1700 			/* Update total postBER */
1701 			t_post_bit_error += c->post_bit_error.stat[1 + layer].uvalue;
1702 			t_post_bit_count += c->post_bit_count.stat[1 + layer].uvalue;
1703 
1704 			/* Update total PER */
1705 			t_block_error += c->block_error.stat[1 + layer].uvalue;
1706 			t_block_count += c->block_count.stat[1 + layer].uvalue;
1707 		}
1708 	}
1709 
1710 	/*
1711 	 * Start showing global count if at least one error count is
1712 	 * available.
1713 	 */
1714 	if (pre_ber_layers) {
1715 		/*
1716 		 * At least one per-layer BER measure was read. We can now
1717 		 * calculate the total BER
1718 		 *
1719 		 * Total Bit Error/Count is calculated as the sum of the
1720 		 * bit errors on all active layers.
1721 		 */
1722 		c->pre_bit_error.stat[0].scale = FE_SCALE_COUNTER;
1723 		c->pre_bit_error.stat[0].uvalue = t_pre_bit_error;
1724 		c->pre_bit_count.stat[0].scale = FE_SCALE_COUNTER;
1725 		c->pre_bit_count.stat[0].uvalue = t_pre_bit_count;
1726 	} else {
1727 		c->pre_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
1728 		c->pre_bit_count.stat[0].scale = FE_SCALE_COUNTER;
1729 	}
1730 
1731 	/*
1732 	 * Start showing global count if at least one error count is
1733 	 * available.
1734 	 */
1735 	if (post_ber_layers) {
1736 		/*
1737 		 * At least one per-layer BER measure was read. We can now
1738 		 * calculate the total BER
1739 		 *
1740 		 * Total Bit Error/Count is calculated as the sum of the
1741 		 * bit errors on all active layers.
1742 		 */
1743 		c->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
1744 		c->post_bit_error.stat[0].uvalue = t_post_bit_error;
1745 		c->post_bit_count.stat[0].scale = FE_SCALE_COUNTER;
1746 		c->post_bit_count.stat[0].uvalue = t_post_bit_count;
1747 	} else {
1748 		c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
1749 		c->post_bit_count.stat[0].scale = FE_SCALE_COUNTER;
1750 	}
1751 
1752 	if (per_layers) {
1753 		/*
1754 		 * At least one per-layer UCB measure was read. We can now
1755 		 * calculate the total UCB
1756 		 *
1757 		 * Total block Error/Count is calculated as the sum of the
1758 		 * block errors on all active layers.
1759 		 */
1760 		c->block_error.stat[0].scale = FE_SCALE_COUNTER;
1761 		c->block_error.stat[0].uvalue = t_block_error;
1762 		c->block_count.stat[0].scale = FE_SCALE_COUNTER;
1763 		c->block_count.stat[0].uvalue = t_block_count;
1764 	} else {
1765 		c->block_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
1766 		c->block_count.stat[0].scale = FE_SCALE_COUNTER;
1767 	}
1768 
1769 	return rc;
1770 }
1771 
1772 /*
1773  * The functions below are called via DVB callbacks, so they need to
1774  * properly use the I2C gate control
1775  */
1776 
1777 static int mb86a20s_initfe(struct dvb_frontend *fe)
1778 {
1779 	struct mb86a20s_state *state = fe->demodulator_priv;
1780 	u64 pll;
1781 	u32 fclk;
1782 	int rc;
1783 	u8  regD5 = 1, reg71, reg09 = 0x3a;
1784 
1785 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
1786 
1787 	if (fe->ops.i2c_gate_ctrl)
1788 		fe->ops.i2c_gate_ctrl(fe, 0);
1789 
1790 	/* Initialize the frontend */
1791 	rc = mb86a20s_writeregdata(state, mb86a20s_init1);
1792 	if (rc < 0)
1793 		goto err;
1794 
1795 	if (!state->inversion)
1796 		reg09 |= 0x04;
1797 	rc = mb86a20s_writereg(state, 0x09, reg09);
1798 	if (rc < 0)
1799 		goto err;
1800 	if (!state->bw)
1801 		reg71 = 1;
1802 	else
1803 		reg71 = 0;
1804 	rc = mb86a20s_writereg(state, 0x39, reg71);
1805 	if (rc < 0)
1806 		goto err;
1807 	rc = mb86a20s_writereg(state, 0x71, state->bw);
1808 	if (rc < 0)
1809 		goto err;
1810 	if (state->subchannel) {
1811 		rc = mb86a20s_writereg(state, 0x44, state->subchannel);
1812 		if (rc < 0)
1813 			goto err;
1814 	}
1815 
1816 	fclk = state->config->fclk;
1817 	if (!fclk)
1818 		fclk = 32571428;
1819 
1820 	/* Adjust IF frequency to match tuner */
1821 	if (fe->ops.tuner_ops.get_if_frequency)
1822 		fe->ops.tuner_ops.get_if_frequency(fe, &state->if_freq);
1823 
1824 	if (!state->if_freq)
1825 		state->if_freq = 3300000;
1826 
1827 	pll = (((u64)1) << 34) * state->if_freq;
1828 	do_div(pll, 63 * fclk);
1829 	pll = (1 << 25) - pll;
1830 	rc = mb86a20s_writereg(state, 0x28, 0x2a);
1831 	if (rc < 0)
1832 		goto err;
1833 	rc = mb86a20s_writereg(state, 0x29, (pll >> 16) & 0xff);
1834 	if (rc < 0)
1835 		goto err;
1836 	rc = mb86a20s_writereg(state, 0x2a, (pll >> 8) & 0xff);
1837 	if (rc < 0)
1838 		goto err;
1839 	rc = mb86a20s_writereg(state, 0x2b, pll & 0xff);
1840 	if (rc < 0)
1841 		goto err;
1842 	dev_dbg(&state->i2c->dev, "%s: fclk=%d, IF=%d, clock reg=0x%06llx\n",
1843 		__func__, fclk, state->if_freq, (long long)pll);
1844 
1845 	/* pll = freq[Hz] * 2^24/10^6 / 16.285714286 */
1846 	pll = state->if_freq * 1677721600L;
1847 	do_div(pll, 1628571429L);
1848 	rc = mb86a20s_writereg(state, 0x28, 0x20);
1849 	if (rc < 0)
1850 		goto err;
1851 	rc = mb86a20s_writereg(state, 0x29, (pll >> 16) & 0xff);
1852 	if (rc < 0)
1853 		goto err;
1854 	rc = mb86a20s_writereg(state, 0x2a, (pll >> 8) & 0xff);
1855 	if (rc < 0)
1856 		goto err;
1857 	rc = mb86a20s_writereg(state, 0x2b, pll & 0xff);
1858 	if (rc < 0)
1859 		goto err;
1860 	dev_dbg(&state->i2c->dev, "%s: IF=%d, IF reg=0x%06llx\n",
1861 		__func__, state->if_freq, (long long)pll);
1862 
1863 	if (!state->config->is_serial) {
1864 		regD5 &= ~1;
1865 
1866 		rc = mb86a20s_writereg(state, 0x50, 0xd5);
1867 		if (rc < 0)
1868 			goto err;
1869 		rc = mb86a20s_writereg(state, 0x51, regD5);
1870 		if (rc < 0)
1871 			goto err;
1872 	}
1873 
1874 	rc = mb86a20s_writeregdata(state, mb86a20s_init2);
1875 	if (rc < 0)
1876 		goto err;
1877 
1878 
1879 err:
1880 	if (fe->ops.i2c_gate_ctrl)
1881 		fe->ops.i2c_gate_ctrl(fe, 1);
1882 
1883 	if (rc < 0) {
1884 		state->need_init = true;
1885 		dev_info(&state->i2c->dev,
1886 			 "mb86a20s: Init failed. Will try again later\n");
1887 	} else {
1888 		state->need_init = false;
1889 		dev_dbg(&state->i2c->dev, "Initialization succeeded.\n");
1890 	}
1891 	return rc;
1892 }
1893 
1894 static int mb86a20s_set_frontend(struct dvb_frontend *fe)
1895 {
1896 	struct mb86a20s_state *state = fe->demodulator_priv;
1897 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
1898 	int rc, if_freq;
1899 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
1900 
1901 	if (!c->isdbt_layer_enabled)
1902 		c->isdbt_layer_enabled = 7;
1903 
1904 	if (c->isdbt_layer_enabled == 1)
1905 		state->bw = MB86A20S_1SEG;
1906 	else if (c->isdbt_partial_reception)
1907 		state->bw = MB86A20S_13SEG_PARTIAL;
1908 	else
1909 		state->bw = MB86A20S_13SEG;
1910 
1911 	if (c->inversion == INVERSION_ON)
1912 		state->inversion = true;
1913 	else
1914 		state->inversion = false;
1915 
1916 	if (!c->isdbt_sb_mode) {
1917 		state->subchannel = 0;
1918 	} else {
1919 		if (c->isdbt_sb_subchannel >= ARRAY_SIZE(mb86a20s_subchannel))
1920 			c->isdbt_sb_subchannel = 0;
1921 
1922 		state->subchannel = mb86a20s_subchannel[c->isdbt_sb_subchannel];
1923 	}
1924 
1925 	/*
1926 	 * Gate should already be opened, but it doesn't hurt to
1927 	 * double-check
1928 	 */
1929 	if (fe->ops.i2c_gate_ctrl)
1930 		fe->ops.i2c_gate_ctrl(fe, 1);
1931 	fe->ops.tuner_ops.set_params(fe);
1932 
1933 	if (fe->ops.tuner_ops.get_if_frequency)
1934 		fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
1935 
1936 	/*
1937 	 * Make it more reliable: if, for some reason, the initial
1938 	 * device initialization doesn't happen, initialize it when
1939 	 * a SBTVD parameters are adjusted.
1940 	 *
1941 	 * Unfortunately, due to a hard to track bug at tda829x/tda18271,
1942 	 * the agc callback logic is not called during DVB attach time,
1943 	 * causing mb86a20s to not be initialized with Kworld SBTVD.
1944 	 * So, this hack is needed, in order to make Kworld SBTVD to work.
1945 	 *
1946 	 * It is also needed to change the IF after the initial init.
1947 	 *
1948 	 * HACK: Always init the frontend when set_frontend is called:
1949 	 * it was noticed that, on some devices, it fails to lock on a
1950 	 * different channel. So, it is better to reset everything, even
1951 	 * wasting some time, than to loose channel lock.
1952 	 */
1953 	mb86a20s_initfe(fe);
1954 
1955 	if (fe->ops.i2c_gate_ctrl)
1956 		fe->ops.i2c_gate_ctrl(fe, 0);
1957 
1958 	rc = mb86a20s_writeregdata(state, mb86a20s_reset_reception);
1959 	mb86a20s_reset_counters(fe);
1960 	mb86a20s_stats_not_ready(fe);
1961 
1962 	if (fe->ops.i2c_gate_ctrl)
1963 		fe->ops.i2c_gate_ctrl(fe, 1);
1964 
1965 	return rc;
1966 }
1967 
1968 static int mb86a20s_read_status_and_stats(struct dvb_frontend *fe,
1969 					  fe_status_t *status)
1970 {
1971 	struct mb86a20s_state *state = fe->demodulator_priv;
1972 	int rc, status_nr;
1973 
1974 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
1975 
1976 	if (fe->ops.i2c_gate_ctrl)
1977 		fe->ops.i2c_gate_ctrl(fe, 0);
1978 
1979 	/* Get lock */
1980 	status_nr = mb86a20s_read_status(fe, status);
1981 	if (status_nr < 7) {
1982 		mb86a20s_stats_not_ready(fe);
1983 		mb86a20s_reset_frontend_cache(fe);
1984 	}
1985 	if (status_nr < 0) {
1986 		dev_err(&state->i2c->dev,
1987 			"%s: Can't read frontend lock status\n", __func__);
1988 		goto error;
1989 	}
1990 
1991 	/* Get signal strength */
1992 	rc = mb86a20s_read_signal_strength(fe);
1993 	if (rc < 0) {
1994 		dev_err(&state->i2c->dev,
1995 			"%s: Can't reset VBER registers.\n", __func__);
1996 		mb86a20s_stats_not_ready(fe);
1997 		mb86a20s_reset_frontend_cache(fe);
1998 
1999 		rc = 0;		/* Status is OK */
2000 		goto error;
2001 	}
2002 
2003 	if (status_nr >= 7) {
2004 		/* Get TMCC info*/
2005 		rc = mb86a20s_get_frontend(fe);
2006 		if (rc < 0) {
2007 			dev_err(&state->i2c->dev,
2008 				"%s: Can't get FE TMCC data.\n", __func__);
2009 			rc = 0;		/* Status is OK */
2010 			goto error;
2011 		}
2012 
2013 		/* Get statistics */
2014 		rc = mb86a20s_get_stats(fe, status_nr);
2015 		if (rc < 0 && rc != -EBUSY) {
2016 			dev_err(&state->i2c->dev,
2017 				"%s: Can't get FE statistics.\n", __func__);
2018 			rc = 0;
2019 			goto error;
2020 		}
2021 		rc = 0;	/* Don't return EBUSY to userspace */
2022 	}
2023 	goto ok;
2024 
2025 error:
2026 	mb86a20s_stats_not_ready(fe);
2027 
2028 ok:
2029 	if (fe->ops.i2c_gate_ctrl)
2030 		fe->ops.i2c_gate_ctrl(fe, 1);
2031 
2032 	return rc;
2033 }
2034 
2035 static int mb86a20s_read_signal_strength_from_cache(struct dvb_frontend *fe,
2036 						    u16 *strength)
2037 {
2038 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
2039 
2040 
2041 	*strength = c->strength.stat[0].uvalue;
2042 
2043 	return 0;
2044 }
2045 
2046 static int mb86a20s_get_frontend_dummy(struct dvb_frontend *fe)
2047 {
2048 	/*
2049 	 * get_frontend is now handled together with other stats
2050 	 * retrival, when read_status() is called, as some statistics
2051 	 * will depend on the layers detection.
2052 	 */
2053 	return 0;
2054 };
2055 
2056 static int mb86a20s_tune(struct dvb_frontend *fe,
2057 			bool re_tune,
2058 			unsigned int mode_flags,
2059 			unsigned int *delay,
2060 			fe_status_t *status)
2061 {
2062 	struct mb86a20s_state *state = fe->demodulator_priv;
2063 	int rc = 0;
2064 
2065 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
2066 
2067 	if (re_tune)
2068 		rc = mb86a20s_set_frontend(fe);
2069 
2070 	if (!(mode_flags & FE_TUNE_MODE_ONESHOT))
2071 		mb86a20s_read_status_and_stats(fe, status);
2072 
2073 	return rc;
2074 }
2075 
2076 static void mb86a20s_release(struct dvb_frontend *fe)
2077 {
2078 	struct mb86a20s_state *state = fe->demodulator_priv;
2079 
2080 	dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
2081 
2082 	kfree(state);
2083 }
2084 
2085 static struct dvb_frontend_ops mb86a20s_ops;
2086 
2087 struct dvb_frontend *mb86a20s_attach(const struct mb86a20s_config *config,
2088 				    struct i2c_adapter *i2c)
2089 {
2090 	struct mb86a20s_state *state;
2091 	u8	rev;
2092 
2093 	dev_dbg(&i2c->dev, "%s called.\n", __func__);
2094 
2095 	/* allocate memory for the internal state */
2096 	state = kzalloc(sizeof(struct mb86a20s_state), GFP_KERNEL);
2097 	if (state == NULL) {
2098 		dev_err(&i2c->dev,
2099 			"%s: unable to allocate memory for state\n", __func__);
2100 		goto error;
2101 	}
2102 
2103 	/* setup the state */
2104 	state->config = config;
2105 	state->i2c = i2c;
2106 
2107 	/* create dvb_frontend */
2108 	memcpy(&state->frontend.ops, &mb86a20s_ops,
2109 		sizeof(struct dvb_frontend_ops));
2110 	state->frontend.demodulator_priv = state;
2111 
2112 	/* Check if it is a mb86a20s frontend */
2113 	rev = mb86a20s_readreg(state, 0);
2114 
2115 	if (rev == 0x13) {
2116 		dev_info(&i2c->dev,
2117 			 "Detected a Fujitsu mb86a20s frontend\n");
2118 	} else {
2119 		dev_dbg(&i2c->dev,
2120 			"Frontend revision %d is unknown - aborting.\n",
2121 		       rev);
2122 		goto error;
2123 	}
2124 
2125 	return &state->frontend;
2126 
2127 error:
2128 	kfree(state);
2129 	return NULL;
2130 }
2131 EXPORT_SYMBOL(mb86a20s_attach);
2132 
2133 static struct dvb_frontend_ops mb86a20s_ops = {
2134 	.delsys = { SYS_ISDBT },
2135 	/* Use dib8000 values per default */
2136 	.info = {
2137 		.name = "Fujitsu mb86A20s",
2138 		.caps = FE_CAN_RECOVER  |
2139 			FE_CAN_FEC_1_2  | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
2140 			FE_CAN_FEC_5_6  | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
2141 			FE_CAN_QPSK     | FE_CAN_QAM_16  | FE_CAN_QAM_64 |
2142 			FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_QAM_AUTO |
2143 			FE_CAN_GUARD_INTERVAL_AUTO    | FE_CAN_HIERARCHY_AUTO,
2144 		/* Actually, those values depend on the used tuner */
2145 		.frequency_min = 45000000,
2146 		.frequency_max = 864000000,
2147 		.frequency_stepsize = 62500,
2148 	},
2149 
2150 	.release = mb86a20s_release,
2151 
2152 	.init = mb86a20s_initfe,
2153 	.set_frontend = mb86a20s_set_frontend,
2154 	.get_frontend = mb86a20s_get_frontend_dummy,
2155 	.read_status = mb86a20s_read_status_and_stats,
2156 	.read_signal_strength = mb86a20s_read_signal_strength_from_cache,
2157 	.tune = mb86a20s_tune,
2158 };
2159 
2160 MODULE_DESCRIPTION("DVB Frontend module for Fujitsu mb86A20s hardware");
2161 MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@redhat.com>");
2162 MODULE_LICENSE("GPL");
2163