xref: /linux/drivers/media/dvb-frontends/ds3000.c (revision 4949009eb8d40a441dcddcd96e101e77d31cf1b2)
1 /*
2     Montage Technology DS3000 - DVBS/S2 Demodulator driver
3     Copyright (C) 2009-2012 Konstantin Dimitrov <kosio.dimitrov@gmail.com>
4 
5     Copyright (C) 2009-2012 TurboSight.com
6 
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11 
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.
16 
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  */
21 
22 #include <linux/slab.h>
23 #include <linux/kernel.h>
24 #include <linux/module.h>
25 #include <linux/moduleparam.h>
26 #include <linux/init.h>
27 #include <linux/firmware.h>
28 
29 #include "dvb_frontend.h"
30 #include "ts2020.h"
31 #include "ds3000.h"
32 
33 static int debug;
34 
35 #define dprintk(args...) \
36 	do { \
37 		if (debug) \
38 			printk(args); \
39 	} while (0)
40 
41 /* as of March 2009 current DS3000 firmware version is 1.78 */
42 /* DS3000 FW v1.78 MD5: a32d17910c4f370073f9346e71d34b80 */
43 #define DS3000_DEFAULT_FIRMWARE "dvb-fe-ds3000.fw"
44 
45 #define DS3000_SAMPLE_RATE 96000 /* in kHz */
46 
47 /* Register values to initialise the demod in DVB-S mode */
48 static u8 ds3000_dvbs_init_tab[] = {
49 	0x23, 0x05,
50 	0x08, 0x03,
51 	0x0c, 0x00,
52 	0x21, 0x54,
53 	0x25, 0x82,
54 	0x27, 0x31,
55 	0x30, 0x08,
56 	0x31, 0x40,
57 	0x32, 0x32,
58 	0x33, 0x35,
59 	0x35, 0xff,
60 	0x3a, 0x00,
61 	0x37, 0x10,
62 	0x38, 0x10,
63 	0x39, 0x02,
64 	0x42, 0x60,
65 	0x4a, 0x40,
66 	0x4b, 0x04,
67 	0x4d, 0x91,
68 	0x5d, 0xc8,
69 	0x50, 0x77,
70 	0x51, 0x77,
71 	0x52, 0x36,
72 	0x53, 0x36,
73 	0x56, 0x01,
74 	0x63, 0x43,
75 	0x64, 0x30,
76 	0x65, 0x40,
77 	0x68, 0x26,
78 	0x69, 0x4c,
79 	0x70, 0x20,
80 	0x71, 0x70,
81 	0x72, 0x04,
82 	0x73, 0x00,
83 	0x70, 0x40,
84 	0x71, 0x70,
85 	0x72, 0x04,
86 	0x73, 0x00,
87 	0x70, 0x60,
88 	0x71, 0x70,
89 	0x72, 0x04,
90 	0x73, 0x00,
91 	0x70, 0x80,
92 	0x71, 0x70,
93 	0x72, 0x04,
94 	0x73, 0x00,
95 	0x70, 0xa0,
96 	0x71, 0x70,
97 	0x72, 0x04,
98 	0x73, 0x00,
99 	0x70, 0x1f,
100 	0x76, 0x00,
101 	0x77, 0xd1,
102 	0x78, 0x0c,
103 	0x79, 0x80,
104 	0x7f, 0x04,
105 	0x7c, 0x00,
106 	0x80, 0x86,
107 	0x81, 0xa6,
108 	0x85, 0x04,
109 	0xcd, 0xf4,
110 	0x90, 0x33,
111 	0xa0, 0x44,
112 	0xc0, 0x18,
113 	0xc3, 0x10,
114 	0xc4, 0x08,
115 	0xc5, 0x80,
116 	0xc6, 0x80,
117 	0xc7, 0x0a,
118 	0xc8, 0x1a,
119 	0xc9, 0x80,
120 	0xfe, 0x92,
121 	0xe0, 0xf8,
122 	0xe6, 0x8b,
123 	0xd0, 0x40,
124 	0xf8, 0x20,
125 	0xfa, 0x0f,
126 	0xfd, 0x20,
127 	0xad, 0x20,
128 	0xae, 0x07,
129 	0xb8, 0x00,
130 };
131 
132 /* Register values to initialise the demod in DVB-S2 mode */
133 static u8 ds3000_dvbs2_init_tab[] = {
134 	0x23, 0x0f,
135 	0x08, 0x07,
136 	0x0c, 0x00,
137 	0x21, 0x54,
138 	0x25, 0x82,
139 	0x27, 0x31,
140 	0x30, 0x08,
141 	0x31, 0x32,
142 	0x32, 0x32,
143 	0x33, 0x35,
144 	0x35, 0xff,
145 	0x3a, 0x00,
146 	0x37, 0x10,
147 	0x38, 0x10,
148 	0x39, 0x02,
149 	0x42, 0x60,
150 	0x4a, 0x80,
151 	0x4b, 0x04,
152 	0x4d, 0x81,
153 	0x5d, 0x88,
154 	0x50, 0x36,
155 	0x51, 0x36,
156 	0x52, 0x36,
157 	0x53, 0x36,
158 	0x63, 0x60,
159 	0x64, 0x10,
160 	0x65, 0x10,
161 	0x68, 0x04,
162 	0x69, 0x29,
163 	0x70, 0x20,
164 	0x71, 0x70,
165 	0x72, 0x04,
166 	0x73, 0x00,
167 	0x70, 0x40,
168 	0x71, 0x70,
169 	0x72, 0x04,
170 	0x73, 0x00,
171 	0x70, 0x60,
172 	0x71, 0x70,
173 	0x72, 0x04,
174 	0x73, 0x00,
175 	0x70, 0x80,
176 	0x71, 0x70,
177 	0x72, 0x04,
178 	0x73, 0x00,
179 	0x70, 0xa0,
180 	0x71, 0x70,
181 	0x72, 0x04,
182 	0x73, 0x00,
183 	0x70, 0x1f,
184 	0xa0, 0x44,
185 	0xc0, 0x08,
186 	0xc1, 0x10,
187 	0xc2, 0x08,
188 	0xc3, 0x10,
189 	0xc4, 0x08,
190 	0xc5, 0xf0,
191 	0xc6, 0xf0,
192 	0xc7, 0x0a,
193 	0xc8, 0x1a,
194 	0xc9, 0x80,
195 	0xca, 0x23,
196 	0xcb, 0x24,
197 	0xce, 0x74,
198 	0x90, 0x03,
199 	0x76, 0x80,
200 	0x77, 0x42,
201 	0x78, 0x0a,
202 	0x79, 0x80,
203 	0xad, 0x40,
204 	0xae, 0x07,
205 	0x7f, 0xd4,
206 	0x7c, 0x00,
207 	0x80, 0xa8,
208 	0x81, 0xda,
209 	0x7c, 0x01,
210 	0x80, 0xda,
211 	0x81, 0xec,
212 	0x7c, 0x02,
213 	0x80, 0xca,
214 	0x81, 0xeb,
215 	0x7c, 0x03,
216 	0x80, 0xba,
217 	0x81, 0xdb,
218 	0x85, 0x08,
219 	0x86, 0x00,
220 	0x87, 0x02,
221 	0x89, 0x80,
222 	0x8b, 0x44,
223 	0x8c, 0xaa,
224 	0x8a, 0x10,
225 	0xba, 0x00,
226 	0xf5, 0x04,
227 	0xfe, 0x44,
228 	0xd2, 0x32,
229 	0xb8, 0x00,
230 };
231 
232 struct ds3000_state {
233 	struct i2c_adapter *i2c;
234 	const struct ds3000_config *config;
235 	struct dvb_frontend frontend;
236 	/* previous uncorrected block counter for DVB-S2 */
237 	u16 prevUCBS2;
238 };
239 
240 static int ds3000_writereg(struct ds3000_state *state, int reg, int data)
241 {
242 	u8 buf[] = { reg, data };
243 	struct i2c_msg msg = { .addr = state->config->demod_address,
244 		.flags = 0, .buf = buf, .len = 2 };
245 	int err;
246 
247 	dprintk("%s: write reg 0x%02x, value 0x%02x\n", __func__, reg, data);
248 
249 	err = i2c_transfer(state->i2c, &msg, 1);
250 	if (err != 1) {
251 		printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x,"
252 			 " value == 0x%02x)\n", __func__, err, reg, data);
253 		return -EREMOTEIO;
254 	}
255 
256 	return 0;
257 }
258 
259 static int ds3000_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
260 {
261 	struct ds3000_state *state = fe->demodulator_priv;
262 
263 	if (enable)
264 		ds3000_writereg(state, 0x03, 0x12);
265 	else
266 		ds3000_writereg(state, 0x03, 0x02);
267 
268 	return 0;
269 }
270 
271 /* I2C write for 8k firmware load */
272 static int ds3000_writeFW(struct ds3000_state *state, int reg,
273 				const u8 *data, u16 len)
274 {
275 	int i, ret = 0;
276 	struct i2c_msg msg;
277 	u8 *buf;
278 
279 	buf = kmalloc(33, GFP_KERNEL);
280 	if (buf == NULL) {
281 		printk(KERN_ERR "Unable to kmalloc\n");
282 		return -ENOMEM;
283 	}
284 
285 	*(buf) = reg;
286 
287 	msg.addr = state->config->demod_address;
288 	msg.flags = 0;
289 	msg.buf = buf;
290 	msg.len = 33;
291 
292 	for (i = 0; i < len; i += 32) {
293 		memcpy(buf + 1, data + i, 32);
294 
295 		dprintk("%s: write reg 0x%02x, len = %d\n", __func__, reg, len);
296 
297 		ret = i2c_transfer(state->i2c, &msg, 1);
298 		if (ret != 1) {
299 			printk(KERN_ERR "%s: write error(err == %i, "
300 				"reg == 0x%02x\n", __func__, ret, reg);
301 			ret = -EREMOTEIO;
302 			goto error;
303 		}
304 	}
305 	ret = 0;
306 
307 error:
308 	kfree(buf);
309 
310 	return ret;
311 }
312 
313 static int ds3000_readreg(struct ds3000_state *state, u8 reg)
314 {
315 	int ret;
316 	u8 b0[] = { reg };
317 	u8 b1[] = { 0 };
318 	struct i2c_msg msg[] = {
319 		{
320 			.addr = state->config->demod_address,
321 			.flags = 0,
322 			.buf = b0,
323 			.len = 1
324 		}, {
325 			.addr = state->config->demod_address,
326 			.flags = I2C_M_RD,
327 			.buf = b1,
328 			.len = 1
329 		}
330 	};
331 
332 	ret = i2c_transfer(state->i2c, msg, 2);
333 
334 	if (ret != 2) {
335 		printk(KERN_ERR "%s: reg=0x%x(error=%d)\n", __func__, reg, ret);
336 		return ret;
337 	}
338 
339 	dprintk("%s: read reg 0x%02x, value 0x%02x\n", __func__, reg, b1[0]);
340 
341 	return b1[0];
342 }
343 
344 static int ds3000_load_firmware(struct dvb_frontend *fe,
345 					const struct firmware *fw);
346 
347 static int ds3000_firmware_ondemand(struct dvb_frontend *fe)
348 {
349 	struct ds3000_state *state = fe->demodulator_priv;
350 	const struct firmware *fw;
351 	int ret = 0;
352 
353 	dprintk("%s()\n", __func__);
354 
355 	ret = ds3000_readreg(state, 0xb2);
356 	if (ret < 0)
357 		return ret;
358 
359 	/* Load firmware */
360 	/* request the firmware, this will block until someone uploads it */
361 	printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
362 				DS3000_DEFAULT_FIRMWARE);
363 	ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE,
364 				state->i2c->dev.parent);
365 	printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
366 	if (ret) {
367 		printk(KERN_ERR "%s: No firmware uploaded (timeout or file not "
368 				"found?)\n", __func__);
369 		return ret;
370 	}
371 
372 	ret = ds3000_load_firmware(fe, fw);
373 	if (ret)
374 		printk("%s: Writing firmware to device failed\n", __func__);
375 
376 	release_firmware(fw);
377 
378 	dprintk("%s: Firmware upload %s\n", __func__,
379 			ret == 0 ? "complete" : "failed");
380 
381 	return ret;
382 }
383 
384 static int ds3000_load_firmware(struct dvb_frontend *fe,
385 					const struct firmware *fw)
386 {
387 	struct ds3000_state *state = fe->demodulator_priv;
388 	int ret = 0;
389 
390 	dprintk("%s\n", __func__);
391 	dprintk("Firmware is %zu bytes (%02x %02x .. %02x %02x)\n",
392 			fw->size,
393 			fw->data[0],
394 			fw->data[1],
395 			fw->data[fw->size - 2],
396 			fw->data[fw->size - 1]);
397 
398 	/* Begin the firmware load process */
399 	ds3000_writereg(state, 0xb2, 0x01);
400 	/* write the entire firmware */
401 	ret = ds3000_writeFW(state, 0xb0, fw->data, fw->size);
402 	ds3000_writereg(state, 0xb2, 0x00);
403 
404 	return ret;
405 }
406 
407 static int ds3000_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
408 {
409 	struct ds3000_state *state = fe->demodulator_priv;
410 	u8 data;
411 
412 	dprintk("%s(%d)\n", __func__, voltage);
413 
414 	data = ds3000_readreg(state, 0xa2);
415 	data |= 0x03; /* bit0 V/H, bit1 off/on */
416 
417 	switch (voltage) {
418 	case SEC_VOLTAGE_18:
419 		data &= ~0x03;
420 		break;
421 	case SEC_VOLTAGE_13:
422 		data &= ~0x03;
423 		data |= 0x01;
424 		break;
425 	case SEC_VOLTAGE_OFF:
426 		break;
427 	}
428 
429 	ds3000_writereg(state, 0xa2, data);
430 
431 	return 0;
432 }
433 
434 static int ds3000_read_status(struct dvb_frontend *fe, fe_status_t* status)
435 {
436 	struct ds3000_state *state = fe->demodulator_priv;
437 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
438 	int lock;
439 
440 	*status = 0;
441 
442 	switch (c->delivery_system) {
443 	case SYS_DVBS:
444 		lock = ds3000_readreg(state, 0xd1);
445 		if ((lock & 0x07) == 0x07)
446 			*status = FE_HAS_SIGNAL | FE_HAS_CARRIER |
447 				FE_HAS_VITERBI | FE_HAS_SYNC |
448 				FE_HAS_LOCK;
449 
450 		break;
451 	case SYS_DVBS2:
452 		lock = ds3000_readreg(state, 0x0d);
453 		if ((lock & 0x8f) == 0x8f)
454 			*status = FE_HAS_SIGNAL | FE_HAS_CARRIER |
455 				FE_HAS_VITERBI | FE_HAS_SYNC |
456 				FE_HAS_LOCK;
457 
458 		break;
459 	default:
460 		return 1;
461 	}
462 
463 	if (state->config->set_lock_led)
464 		state->config->set_lock_led(fe, *status == 0 ? 0 : 1);
465 
466 	dprintk("%s: status = 0x%02x\n", __func__, lock);
467 
468 	return 0;
469 }
470 
471 /* read DS3000 BER value */
472 static int ds3000_read_ber(struct dvb_frontend *fe, u32* ber)
473 {
474 	struct ds3000_state *state = fe->demodulator_priv;
475 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
476 	u8 data;
477 	u32 ber_reading, lpdc_frames;
478 
479 	dprintk("%s()\n", __func__);
480 
481 	switch (c->delivery_system) {
482 	case SYS_DVBS:
483 		/* set the number of bytes checked during
484 		BER estimation */
485 		ds3000_writereg(state, 0xf9, 0x04);
486 		/* read BER estimation status */
487 		data = ds3000_readreg(state, 0xf8);
488 		/* check if BER estimation is ready */
489 		if ((data & 0x10) == 0) {
490 			/* this is the number of error bits,
491 			to calculate the bit error rate
492 			divide to 8388608 */
493 			*ber = (ds3000_readreg(state, 0xf7) << 8) |
494 				ds3000_readreg(state, 0xf6);
495 			/* start counting error bits */
496 			/* need to be set twice
497 			otherwise it fails sometimes */
498 			data |= 0x10;
499 			ds3000_writereg(state, 0xf8, data);
500 			ds3000_writereg(state, 0xf8, data);
501 		} else
502 			/* used to indicate that BER estimation
503 			is not ready, i.e. BER is unknown */
504 			*ber = 0xffffffff;
505 		break;
506 	case SYS_DVBS2:
507 		/* read the number of LPDC decoded frames */
508 		lpdc_frames = (ds3000_readreg(state, 0xd7) << 16) |
509 				(ds3000_readreg(state, 0xd6) << 8) |
510 				ds3000_readreg(state, 0xd5);
511 		/* read the number of packets with bad CRC */
512 		ber_reading = (ds3000_readreg(state, 0xf8) << 8) |
513 				ds3000_readreg(state, 0xf7);
514 		if (lpdc_frames > 750) {
515 			/* clear LPDC frame counters */
516 			ds3000_writereg(state, 0xd1, 0x01);
517 			/* clear bad packets counter */
518 			ds3000_writereg(state, 0xf9, 0x01);
519 			/* enable bad packets counter */
520 			ds3000_writereg(state, 0xf9, 0x00);
521 			/* enable LPDC frame counters */
522 			ds3000_writereg(state, 0xd1, 0x00);
523 			*ber = ber_reading;
524 		} else
525 			/* used to indicate that BER estimation is not ready,
526 			i.e. BER is unknown */
527 			*ber = 0xffffffff;
528 		break;
529 	default:
530 		return 1;
531 	}
532 
533 	return 0;
534 }
535 
536 static int ds3000_read_signal_strength(struct dvb_frontend *fe,
537 						u16 *signal_strength)
538 {
539 	if (fe->ops.tuner_ops.get_rf_strength)
540 		fe->ops.tuner_ops.get_rf_strength(fe, signal_strength);
541 
542 	return 0;
543 }
544 
545 /* calculate DS3000 snr value in dB */
546 static int ds3000_read_snr(struct dvb_frontend *fe, u16 *snr)
547 {
548 	struct ds3000_state *state = fe->demodulator_priv;
549 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
550 	u8 snr_reading, snr_value;
551 	u32 dvbs2_signal_reading, dvbs2_noise_reading, tmp;
552 	static const u16 dvbs_snr_tab[] = { /* 20 x Table (rounded up) */
553 		0x0000, 0x1b13, 0x2aea, 0x3627, 0x3ede, 0x45fe, 0x4c03,
554 		0x513a, 0x55d4, 0x59f2, 0x5dab, 0x6111, 0x6431, 0x6717,
555 		0x69c9, 0x6c4e, 0x6eac, 0x70e8, 0x7304, 0x7505
556 	};
557 	static const u16 dvbs2_snr_tab[] = { /* 80 x Table (rounded up) */
558 		0x0000, 0x0bc2, 0x12a3, 0x1785, 0x1b4e, 0x1e65, 0x2103,
559 		0x2347, 0x2546, 0x2710, 0x28ae, 0x2a28, 0x2b83, 0x2cc5,
560 		0x2df1, 0x2f09, 0x3010, 0x3109, 0x31f4, 0x32d2, 0x33a6,
561 		0x3470, 0x3531, 0x35ea, 0x369b, 0x3746, 0x37ea, 0x3888,
562 		0x3920, 0x39b3, 0x3a42, 0x3acc, 0x3b51, 0x3bd3, 0x3c51,
563 		0x3ccb, 0x3d42, 0x3db6, 0x3e27, 0x3e95, 0x3f00, 0x3f68,
564 		0x3fcf, 0x4033, 0x4094, 0x40f4, 0x4151, 0x41ac, 0x4206,
565 		0x425e, 0x42b4, 0x4308, 0x435b, 0x43ac, 0x43fc, 0x444a,
566 		0x4497, 0x44e2, 0x452d, 0x4576, 0x45bd, 0x4604, 0x4649,
567 		0x468e, 0x46d1, 0x4713, 0x4755, 0x4795, 0x47d4, 0x4813,
568 		0x4851, 0x488d, 0x48c9, 0x4904, 0x493f, 0x4978, 0x49b1,
569 		0x49e9, 0x4a20, 0x4a57
570 	};
571 
572 	dprintk("%s()\n", __func__);
573 
574 	switch (c->delivery_system) {
575 	case SYS_DVBS:
576 		snr_reading = ds3000_readreg(state, 0xff);
577 		snr_reading /= 8;
578 		if (snr_reading == 0)
579 			*snr = 0x0000;
580 		else {
581 			if (snr_reading > 20)
582 				snr_reading = 20;
583 			snr_value = dvbs_snr_tab[snr_reading - 1] * 10 / 23026;
584 			/* cook the value to be suitable for szap-s2
585 			human readable output */
586 			*snr = snr_value * 8 * 655;
587 		}
588 		dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__,
589 				snr_reading, *snr);
590 		break;
591 	case SYS_DVBS2:
592 		dvbs2_noise_reading = (ds3000_readreg(state, 0x8c) & 0x3f) +
593 				(ds3000_readreg(state, 0x8d) << 4);
594 		dvbs2_signal_reading = ds3000_readreg(state, 0x8e);
595 		tmp = dvbs2_signal_reading * dvbs2_signal_reading >> 1;
596 		if (tmp == 0) {
597 			*snr = 0x0000;
598 			return 0;
599 		}
600 		if (dvbs2_noise_reading == 0) {
601 			snr_value = 0x0013;
602 			/* cook the value to be suitable for szap-s2
603 			human readable output */
604 			*snr = 0xffff;
605 			return 0;
606 		}
607 		if (tmp > dvbs2_noise_reading) {
608 			snr_reading = tmp / dvbs2_noise_reading;
609 			if (snr_reading > 80)
610 				snr_reading = 80;
611 			snr_value = dvbs2_snr_tab[snr_reading - 1] / 1000;
612 			/* cook the value to be suitable for szap-s2
613 			human readable output */
614 			*snr = snr_value * 5 * 655;
615 		} else {
616 			snr_reading = dvbs2_noise_reading / tmp;
617 			if (snr_reading > 80)
618 				snr_reading = 80;
619 			*snr = -(dvbs2_snr_tab[snr_reading - 1] / 1000);
620 		}
621 		dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__,
622 				snr_reading, *snr);
623 		break;
624 	default:
625 		return 1;
626 	}
627 
628 	return 0;
629 }
630 
631 /* read DS3000 uncorrected blocks */
632 static int ds3000_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
633 {
634 	struct ds3000_state *state = fe->demodulator_priv;
635 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
636 	u8 data;
637 	u16 _ucblocks;
638 
639 	dprintk("%s()\n", __func__);
640 
641 	switch (c->delivery_system) {
642 	case SYS_DVBS:
643 		*ucblocks = (ds3000_readreg(state, 0xf5) << 8) |
644 				ds3000_readreg(state, 0xf4);
645 		data = ds3000_readreg(state, 0xf8);
646 		/* clear packet counters */
647 		data &= ~0x20;
648 		ds3000_writereg(state, 0xf8, data);
649 		/* enable packet counters */
650 		data |= 0x20;
651 		ds3000_writereg(state, 0xf8, data);
652 		break;
653 	case SYS_DVBS2:
654 		_ucblocks = (ds3000_readreg(state, 0xe2) << 8) |
655 				ds3000_readreg(state, 0xe1);
656 		if (_ucblocks > state->prevUCBS2)
657 			*ucblocks = _ucblocks - state->prevUCBS2;
658 		else
659 			*ucblocks = state->prevUCBS2 - _ucblocks;
660 		state->prevUCBS2 = _ucblocks;
661 		break;
662 	default:
663 		return 1;
664 	}
665 
666 	return 0;
667 }
668 
669 static int ds3000_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
670 {
671 	struct ds3000_state *state = fe->demodulator_priv;
672 	u8 data;
673 
674 	dprintk("%s(%d)\n", __func__, tone);
675 	if ((tone != SEC_TONE_ON) && (tone != SEC_TONE_OFF)) {
676 		printk(KERN_ERR "%s: Invalid, tone=%d\n", __func__, tone);
677 		return -EINVAL;
678 	}
679 
680 	data = ds3000_readreg(state, 0xa2);
681 	data &= ~0xc0;
682 	ds3000_writereg(state, 0xa2, data);
683 
684 	switch (tone) {
685 	case SEC_TONE_ON:
686 		dprintk("%s: setting tone on\n", __func__);
687 		data = ds3000_readreg(state, 0xa1);
688 		data &= ~0x43;
689 		data |= 0x04;
690 		ds3000_writereg(state, 0xa1, data);
691 		break;
692 	case SEC_TONE_OFF:
693 		dprintk("%s: setting tone off\n", __func__);
694 		data = ds3000_readreg(state, 0xa2);
695 		data |= 0x80;
696 		ds3000_writereg(state, 0xa2, data);
697 		break;
698 	}
699 
700 	return 0;
701 }
702 
703 static int ds3000_send_diseqc_msg(struct dvb_frontend *fe,
704 				struct dvb_diseqc_master_cmd *d)
705 {
706 	struct ds3000_state *state = fe->demodulator_priv;
707 	int i;
708 	u8 data;
709 
710 	/* Dump DiSEqC message */
711 	dprintk("%s(", __func__);
712 	for (i = 0 ; i < d->msg_len;) {
713 		dprintk("0x%02x", d->msg[i]);
714 		if (++i < d->msg_len)
715 			dprintk(", ");
716 	}
717 
718 	/* enable DiSEqC message send pin */
719 	data = ds3000_readreg(state, 0xa2);
720 	data &= ~0xc0;
721 	ds3000_writereg(state, 0xa2, data);
722 
723 	/* DiSEqC message */
724 	for (i = 0; i < d->msg_len; i++)
725 		ds3000_writereg(state, 0xa3 + i, d->msg[i]);
726 
727 	data = ds3000_readreg(state, 0xa1);
728 	/* clear DiSEqC message length and status,
729 	enable DiSEqC message send */
730 	data &= ~0xf8;
731 	/* set DiSEqC mode, modulation active during 33 pulses,
732 	set DiSEqC message length */
733 	data |= ((d->msg_len - 1) << 3) | 0x07;
734 	ds3000_writereg(state, 0xa1, data);
735 
736 	/* wait up to 150ms for DiSEqC transmission to complete */
737 	for (i = 0; i < 15; i++) {
738 		data = ds3000_readreg(state, 0xa1);
739 		if ((data & 0x40) == 0)
740 			break;
741 		msleep(10);
742 	}
743 
744 	/* DiSEqC timeout after 150ms */
745 	if (i == 15) {
746 		data = ds3000_readreg(state, 0xa1);
747 		data &= ~0x80;
748 		data |= 0x40;
749 		ds3000_writereg(state, 0xa1, data);
750 
751 		data = ds3000_readreg(state, 0xa2);
752 		data &= ~0xc0;
753 		data |= 0x80;
754 		ds3000_writereg(state, 0xa2, data);
755 
756 		return 1;
757 	}
758 
759 	data = ds3000_readreg(state, 0xa2);
760 	data &= ~0xc0;
761 	data |= 0x80;
762 	ds3000_writereg(state, 0xa2, data);
763 
764 	return 0;
765 }
766 
767 /* Send DiSEqC burst */
768 static int ds3000_diseqc_send_burst(struct dvb_frontend *fe,
769 					fe_sec_mini_cmd_t burst)
770 {
771 	struct ds3000_state *state = fe->demodulator_priv;
772 	int i;
773 	u8 data;
774 
775 	dprintk("%s()\n", __func__);
776 
777 	data = ds3000_readreg(state, 0xa2);
778 	data &= ~0xc0;
779 	ds3000_writereg(state, 0xa2, data);
780 
781 	/* DiSEqC burst */
782 	if (burst == SEC_MINI_A)
783 		/* Unmodulated tone burst */
784 		ds3000_writereg(state, 0xa1, 0x02);
785 	else if (burst == SEC_MINI_B)
786 		/* Modulated tone burst */
787 		ds3000_writereg(state, 0xa1, 0x01);
788 	else
789 		return -EINVAL;
790 
791 	msleep(13);
792 	for (i = 0; i < 5; i++) {
793 		data = ds3000_readreg(state, 0xa1);
794 		if ((data & 0x40) == 0)
795 			break;
796 		msleep(1);
797 	}
798 
799 	if (i == 5) {
800 		data = ds3000_readreg(state, 0xa1);
801 		data &= ~0x80;
802 		data |= 0x40;
803 		ds3000_writereg(state, 0xa1, data);
804 
805 		data = ds3000_readreg(state, 0xa2);
806 		data &= ~0xc0;
807 		data |= 0x80;
808 		ds3000_writereg(state, 0xa2, data);
809 
810 		return 1;
811 	}
812 
813 	data = ds3000_readreg(state, 0xa2);
814 	data &= ~0xc0;
815 	data |= 0x80;
816 	ds3000_writereg(state, 0xa2, data);
817 
818 	return 0;
819 }
820 
821 static void ds3000_release(struct dvb_frontend *fe)
822 {
823 	struct ds3000_state *state = fe->demodulator_priv;
824 
825 	if (state->config->set_lock_led)
826 		state->config->set_lock_led(fe, 0);
827 
828 	dprintk("%s\n", __func__);
829 	kfree(state);
830 }
831 
832 static struct dvb_frontend_ops ds3000_ops;
833 
834 struct dvb_frontend *ds3000_attach(const struct ds3000_config *config,
835 				    struct i2c_adapter *i2c)
836 {
837 	struct ds3000_state *state = NULL;
838 	int ret;
839 
840 	dprintk("%s\n", __func__);
841 
842 	/* allocate memory for the internal state */
843 	state = kzalloc(sizeof(struct ds3000_state), GFP_KERNEL);
844 	if (state == NULL) {
845 		printk(KERN_ERR "Unable to kmalloc\n");
846 		goto error2;
847 	}
848 
849 	state->config = config;
850 	state->i2c = i2c;
851 	state->prevUCBS2 = 0;
852 
853 	/* check if the demod is present */
854 	ret = ds3000_readreg(state, 0x00) & 0xfe;
855 	if (ret != 0xe0) {
856 		printk(KERN_ERR "Invalid probe, probably not a DS3000\n");
857 		goto error3;
858 	}
859 
860 	printk(KERN_INFO "DS3000 chip version: %d.%d attached.\n",
861 			ds3000_readreg(state, 0x02),
862 			ds3000_readreg(state, 0x01));
863 
864 	memcpy(&state->frontend.ops, &ds3000_ops,
865 			sizeof(struct dvb_frontend_ops));
866 	state->frontend.demodulator_priv = state;
867 
868 	/*
869 	 * Some devices like T480 starts with voltage on. Be sure
870 	 * to turn voltage off during init, as this can otherwise
871 	 * interfere with Unicable SCR systems.
872 	 */
873 	ds3000_set_voltage(&state->frontend, SEC_VOLTAGE_OFF);
874 	return &state->frontend;
875 
876 error3:
877 	kfree(state);
878 error2:
879 	return NULL;
880 }
881 EXPORT_SYMBOL(ds3000_attach);
882 
883 static int ds3000_set_carrier_offset(struct dvb_frontend *fe,
884 					s32 carrier_offset_khz)
885 {
886 	struct ds3000_state *state = fe->demodulator_priv;
887 	s32 tmp;
888 
889 	tmp = carrier_offset_khz;
890 	tmp *= 65536;
891 	tmp = (2 * tmp + DS3000_SAMPLE_RATE) / (2 * DS3000_SAMPLE_RATE);
892 
893 	if (tmp < 0)
894 		tmp += 65536;
895 
896 	ds3000_writereg(state, 0x5f, tmp >> 8);
897 	ds3000_writereg(state, 0x5e, tmp & 0xff);
898 
899 	return 0;
900 }
901 
902 static int ds3000_set_frontend(struct dvb_frontend *fe)
903 {
904 	struct ds3000_state *state = fe->demodulator_priv;
905 	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
906 
907 	int i;
908 	fe_status_t status;
909 	s32 offset_khz;
910 	u32 frequency;
911 	u16 value;
912 
913 	dprintk("%s() ", __func__);
914 
915 	if (state->config->set_ts_params)
916 		state->config->set_ts_params(fe, 0);
917 	/* Tune */
918 	if (fe->ops.tuner_ops.set_params)
919 		fe->ops.tuner_ops.set_params(fe);
920 
921 	/* ds3000 global reset */
922 	ds3000_writereg(state, 0x07, 0x80);
923 	ds3000_writereg(state, 0x07, 0x00);
924 	/* ds3000 build-in uC reset */
925 	ds3000_writereg(state, 0xb2, 0x01);
926 	/* ds3000 software reset */
927 	ds3000_writereg(state, 0x00, 0x01);
928 
929 	switch (c->delivery_system) {
930 	case SYS_DVBS:
931 		/* initialise the demod in DVB-S mode */
932 		for (i = 0; i < sizeof(ds3000_dvbs_init_tab); i += 2)
933 			ds3000_writereg(state,
934 				ds3000_dvbs_init_tab[i],
935 				ds3000_dvbs_init_tab[i + 1]);
936 		value = ds3000_readreg(state, 0xfe);
937 		value &= 0xc0;
938 		value |= 0x1b;
939 		ds3000_writereg(state, 0xfe, value);
940 		break;
941 	case SYS_DVBS2:
942 		/* initialise the demod in DVB-S2 mode */
943 		for (i = 0; i < sizeof(ds3000_dvbs2_init_tab); i += 2)
944 			ds3000_writereg(state,
945 				ds3000_dvbs2_init_tab[i],
946 				ds3000_dvbs2_init_tab[i + 1]);
947 		if (c->symbol_rate >= 30000000)
948 			ds3000_writereg(state, 0xfe, 0x54);
949 		else
950 			ds3000_writereg(state, 0xfe, 0x98);
951 		break;
952 	default:
953 		return 1;
954 	}
955 
956 	/* enable 27MHz clock output */
957 	ds3000_writereg(state, 0x29, 0x80);
958 	/* enable ac coupling */
959 	ds3000_writereg(state, 0x25, 0x8a);
960 
961 	/* enhance symbol rate performance */
962 	if ((c->symbol_rate / 1000) <= 5000) {
963 		value = 29777 / (c->symbol_rate / 1000) + 1;
964 		if (value % 2 != 0)
965 			value++;
966 		ds3000_writereg(state, 0xc3, 0x0d);
967 		ds3000_writereg(state, 0xc8, value);
968 		ds3000_writereg(state, 0xc4, 0x10);
969 		ds3000_writereg(state, 0xc7, 0x0e);
970 	} else if ((c->symbol_rate / 1000) <= 10000) {
971 		value = 92166 / (c->symbol_rate / 1000) + 1;
972 		if (value % 2 != 0)
973 			value++;
974 		ds3000_writereg(state, 0xc3, 0x07);
975 		ds3000_writereg(state, 0xc8, value);
976 		ds3000_writereg(state, 0xc4, 0x09);
977 		ds3000_writereg(state, 0xc7, 0x12);
978 	} else if ((c->symbol_rate / 1000) <= 20000) {
979 		value = 64516 / (c->symbol_rate / 1000) + 1;
980 		ds3000_writereg(state, 0xc3, value);
981 		ds3000_writereg(state, 0xc8, 0x0e);
982 		ds3000_writereg(state, 0xc4, 0x07);
983 		ds3000_writereg(state, 0xc7, 0x18);
984 	} else {
985 		value = 129032 / (c->symbol_rate / 1000) + 1;
986 		ds3000_writereg(state, 0xc3, value);
987 		ds3000_writereg(state, 0xc8, 0x0a);
988 		ds3000_writereg(state, 0xc4, 0x05);
989 		ds3000_writereg(state, 0xc7, 0x24);
990 	}
991 
992 	/* normalized symbol rate rounded to the closest integer */
993 	value = (((c->symbol_rate / 1000) << 16) +
994 			(DS3000_SAMPLE_RATE / 2)) / DS3000_SAMPLE_RATE;
995 	ds3000_writereg(state, 0x61, value & 0x00ff);
996 	ds3000_writereg(state, 0x62, (value & 0xff00) >> 8);
997 
998 	/* co-channel interference cancellation disabled */
999 	ds3000_writereg(state, 0x56, 0x00);
1000 
1001 	/* equalizer disabled */
1002 	ds3000_writereg(state, 0x76, 0x00);
1003 
1004 	/*ds3000_writereg(state, 0x08, 0x03);
1005 	ds3000_writereg(state, 0xfd, 0x22);
1006 	ds3000_writereg(state, 0x08, 0x07);
1007 	ds3000_writereg(state, 0xfd, 0x42);
1008 	ds3000_writereg(state, 0x08, 0x07);*/
1009 
1010 	if (state->config->ci_mode) {
1011 		switch (c->delivery_system) {
1012 		case SYS_DVBS:
1013 		default:
1014 			ds3000_writereg(state, 0xfd, 0x80);
1015 		break;
1016 		case SYS_DVBS2:
1017 			ds3000_writereg(state, 0xfd, 0x01);
1018 			break;
1019 		}
1020 	}
1021 
1022 	/* ds3000 out of software reset */
1023 	ds3000_writereg(state, 0x00, 0x00);
1024 	/* start ds3000 build-in uC */
1025 	ds3000_writereg(state, 0xb2, 0x00);
1026 
1027 	if (fe->ops.tuner_ops.get_frequency) {
1028 		fe->ops.tuner_ops.get_frequency(fe, &frequency);
1029 		offset_khz = frequency - c->frequency;
1030 		ds3000_set_carrier_offset(fe, offset_khz);
1031 	}
1032 
1033 	for (i = 0; i < 30 ; i++) {
1034 		ds3000_read_status(fe, &status);
1035 		if (status & FE_HAS_LOCK)
1036 			break;
1037 
1038 		msleep(10);
1039 	}
1040 
1041 	return 0;
1042 }
1043 
1044 static int ds3000_tune(struct dvb_frontend *fe,
1045 			bool re_tune,
1046 			unsigned int mode_flags,
1047 			unsigned int *delay,
1048 			fe_status_t *status)
1049 {
1050 	if (re_tune) {
1051 		int ret = ds3000_set_frontend(fe);
1052 		if (ret)
1053 			return ret;
1054 	}
1055 
1056 	*delay = HZ / 5;
1057 
1058 	return ds3000_read_status(fe, status);
1059 }
1060 
1061 static enum dvbfe_algo ds3000_get_algo(struct dvb_frontend *fe)
1062 {
1063 	struct ds3000_state *state = fe->demodulator_priv;
1064 
1065 	if (state->config->set_lock_led)
1066 		state->config->set_lock_led(fe, 0);
1067 
1068 	dprintk("%s()\n", __func__);
1069 	return DVBFE_ALGO_HW;
1070 }
1071 
1072 /*
1073  * Initialise or wake up device
1074  *
1075  * Power config will reset and load initial firmware if required
1076  */
1077 static int ds3000_initfe(struct dvb_frontend *fe)
1078 {
1079 	struct ds3000_state *state = fe->demodulator_priv;
1080 	int ret;
1081 
1082 	dprintk("%s()\n", __func__);
1083 	/* hard reset */
1084 	ds3000_writereg(state, 0x08, 0x01 | ds3000_readreg(state, 0x08));
1085 	msleep(1);
1086 
1087 	/* Load the firmware if required */
1088 	ret = ds3000_firmware_ondemand(fe);
1089 	if (ret != 0) {
1090 		printk(KERN_ERR "%s: Unable initialize firmware\n", __func__);
1091 		return ret;
1092 	}
1093 
1094 	return 0;
1095 }
1096 
1097 static struct dvb_frontend_ops ds3000_ops = {
1098 	.delsys = { SYS_DVBS, SYS_DVBS2 },
1099 	.info = {
1100 		.name = "Montage Technology DS3000",
1101 		.frequency_min = 950000,
1102 		.frequency_max = 2150000,
1103 		.frequency_stepsize = 1011, /* kHz for QPSK frontends */
1104 		.frequency_tolerance = 5000,
1105 		.symbol_rate_min = 1000000,
1106 		.symbol_rate_max = 45000000,
1107 		.caps = FE_CAN_INVERSION_AUTO |
1108 			FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1109 			FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
1110 			FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1111 			FE_CAN_2G_MODULATION |
1112 			FE_CAN_QPSK | FE_CAN_RECOVER
1113 	},
1114 
1115 	.release = ds3000_release,
1116 
1117 	.init = ds3000_initfe,
1118 	.i2c_gate_ctrl = ds3000_i2c_gate_ctrl,
1119 	.read_status = ds3000_read_status,
1120 	.read_ber = ds3000_read_ber,
1121 	.read_signal_strength = ds3000_read_signal_strength,
1122 	.read_snr = ds3000_read_snr,
1123 	.read_ucblocks = ds3000_read_ucblocks,
1124 	.set_voltage = ds3000_set_voltage,
1125 	.set_tone = ds3000_set_tone,
1126 	.diseqc_send_master_cmd = ds3000_send_diseqc_msg,
1127 	.diseqc_send_burst = ds3000_diseqc_send_burst,
1128 	.get_frontend_algo = ds3000_get_algo,
1129 
1130 	.set_frontend = ds3000_set_frontend,
1131 	.tune = ds3000_tune,
1132 };
1133 
1134 module_param(debug, int, 0644);
1135 MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");
1136 
1137 MODULE_DESCRIPTION("DVB Frontend module for Montage Technology "
1138 			"DS3000 hardware");
1139 MODULE_AUTHOR("Konstantin Dimitrov <kosio.dimitrov@gmail.com>");
1140 MODULE_LICENSE("GPL");
1141 MODULE_FIRMWARE(DS3000_DEFAULT_FIRMWARE);
1142