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