2 Montage Technology DS3000/TS2020 - DVBS/S2 Demodulator/Tuner driver
3 Copyright (C) 2009 Konstantin Dimitrov <kosio.dimitrov@gmail.com>
5 Copyright (C) 2009 TurboSight.com
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.
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.
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.
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>
29 #include "dvb_frontend.h"
34 #define dprintk(args...) \
42 #define DS3000_SAMPLE_RATE 96000 /* in kHz */
43 #define DS3000_XTAL_FREQ 27000 /* in kHz */
45 /* Register values to initialise the demod in DVB-S mode */
46 static u8 ds3000_dvbs_init_tab[] = {
130 /* Register values to initialise the demod in DVB-S2 mode */
131 static u8 ds3000_dvbs2_init_tab[] = {
230 struct ds3000_state {
231 struct i2c_adapter *i2c;
232 const struct ds3000_config *config;
233 struct dvb_frontend frontend;
235 /* previous uncorrected block counter for DVB-S2 */
239 static int ds3000_writereg(struct ds3000_state *state, int reg, int data)
241 u8 buf[] = { reg, data };
242 struct i2c_msg msg = { .addr = state->config->demod_address,
243 .flags = 0, .buf = buf, .len = 2 };
246 dprintk("%s: write reg 0x%02x, value 0x%02x\n", __func__, reg, data);
248 err = i2c_transfer(state->i2c, &msg, 1);
250 printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x,"
251 " value == 0x%02x)\n", __func__, err, reg, data);
258 static int ds3000_tuner_writereg(struct ds3000_state *state, int reg, int data)
260 u8 buf[] = { reg, data };
261 struct i2c_msg msg = { .addr = 0x60,
262 .flags = 0, .buf = buf, .len = 2 };
265 dprintk("%s: write reg 0x%02x, value 0x%02x\n", __func__, reg, data);
267 ds3000_writereg(state, 0x03, 0x11);
268 err = i2c_transfer(state->i2c, &msg, 1);
270 printk("%s: writereg error(err == %i, reg == 0x%02x,"
271 " value == 0x%02x)\n", __func__, err, reg, data);
278 /* I2C write for 8k firmware load */
279 static int ds3000_writeFW(struct ds3000_state *state, int reg,
280 const u8 *data, u16 len)
282 int i, ret = -EREMOTEIO;
286 buf = kmalloc(33, GFP_KERNEL);
288 printk(KERN_ERR "Unable to kmalloc\n");
295 msg.addr = state->config->demod_address;
300 for (i = 0; i < len; i += 32) {
301 memcpy(buf + 1, data + i, 32);
303 dprintk("%s: write reg 0x%02x, len = %d\n", __func__, reg, len);
305 ret = i2c_transfer(state->i2c, &msg, 1);
307 printk(KERN_ERR "%s: write error(err == %i, "
308 "reg == 0x%02x\n", __func__, ret, reg);
319 static int ds3000_readreg(struct ds3000_state *state, u8 reg)
324 struct i2c_msg msg[] = {
326 .addr = state->config->demod_address,
331 .addr = state->config->demod_address,
338 ret = i2c_transfer(state->i2c, msg, 2);
341 printk(KERN_ERR "%s: reg=0x%x(error=%d)\n", __func__, reg, ret);
345 dprintk("%s: read reg 0x%02x, value 0x%02x\n", __func__, reg, b1[0]);
350 static int ds3000_tuner_readreg(struct ds3000_state *state, u8 reg)
355 struct i2c_msg msg[] = {
369 ds3000_writereg(state, 0x03, 0x12);
370 ret = i2c_transfer(state->i2c, msg, 2);
373 printk(KERN_ERR "%s: reg=0x%x(error=%d)\n", __func__, reg, ret);
377 dprintk("%s: read reg 0x%02x, value 0x%02x\n", __func__, reg, b1[0]);
382 static int ds3000_load_firmware(struct dvb_frontend *fe,
383 const struct firmware *fw);
385 static int ds3000_firmware_ondemand(struct dvb_frontend *fe)
387 struct ds3000_state *state = fe->demodulator_priv;
388 const struct firmware *fw;
391 dprintk("%s()\n", __func__);
393 if (ds3000_readreg(state, 0xb2) <= 0)
396 if (state->skip_fw_load)
399 /* request the firmware, this will block until someone uploads it */
400 printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
402 ret = reject_firmware(&fw, "/*(DEBLOBBED)*/",
403 state->i2c->dev.parent);
404 printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
406 printk(KERN_ERR "%s: No firmware uploaded (timeout or file not "
407 "found?)\n", __func__);
411 /* Make sure we don't recurse back through here during loading */
412 state->skip_fw_load = 1;
414 ret = ds3000_load_firmware(fe, fw);
416 printk("%s: Writing firmware to device failed\n", __func__);
418 release_firmware(fw);
420 dprintk("%s: Firmware upload %s\n", __func__,
421 ret == 0 ? "complete" : "failed");
423 /* Ensure firmware is always loaded if required */
424 state->skip_fw_load = 0;
429 static int ds3000_load_firmware(struct dvb_frontend *fe,
430 const struct firmware *fw)
432 struct ds3000_state *state = fe->demodulator_priv;
434 dprintk("%s\n", __func__);
435 dprintk("Firmware is %zu bytes (%02x %02x .. %02x %02x)\n",
439 fw->data[fw->size - 2],
440 fw->data[fw->size - 1]);
442 /* Begin the firmware load process */
443 ds3000_writereg(state, 0xb2, 0x01);
444 /* write the entire firmware */
445 ds3000_writeFW(state, 0xb0, fw->data, fw->size);
446 ds3000_writereg(state, 0xb2, 0x00);
451 static int ds3000_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
453 struct ds3000_state *state = fe->demodulator_priv;
456 dprintk("%s(%d)\n", __func__, voltage);
458 data = ds3000_readreg(state, 0xa2);
459 data |= 0x03; /* bit0 V/H, bit1 off/on */
469 case SEC_VOLTAGE_OFF:
473 ds3000_writereg(state, 0xa2, data);
478 static int ds3000_read_status(struct dvb_frontend *fe, fe_status_t* status)
480 struct ds3000_state *state = fe->demodulator_priv;
481 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
486 switch (c->delivery_system) {
488 lock = ds3000_readreg(state, 0xd1);
489 if ((lock & 0x07) == 0x07)
490 *status = FE_HAS_SIGNAL | FE_HAS_CARRIER |
491 FE_HAS_VITERBI | FE_HAS_SYNC |
496 lock = ds3000_readreg(state, 0x0d);
497 if ((lock & 0x8f) == 0x8f)
498 *status = FE_HAS_SIGNAL | FE_HAS_CARRIER |
499 FE_HAS_VITERBI | FE_HAS_SYNC |
507 dprintk("%s: status = 0x%02x\n", __func__, lock);
512 /* read DS3000 BER value */
513 static int ds3000_read_ber(struct dvb_frontend *fe, u32* ber)
515 struct ds3000_state *state = fe->demodulator_priv;
516 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
518 u32 ber_reading, lpdc_frames;
520 dprintk("%s()\n", __func__);
522 switch (c->delivery_system) {
524 /* set the number of bytes checked during
526 ds3000_writereg(state, 0xf9, 0x04);
527 /* read BER estimation status */
528 data = ds3000_readreg(state, 0xf8);
529 /* check if BER estimation is ready */
530 if ((data & 0x10) == 0) {
531 /* this is the number of error bits,
532 to calculate the bit error rate
534 *ber = (ds3000_readreg(state, 0xf7) << 8) |
535 ds3000_readreg(state, 0xf6);
536 /* start counting error bits */
537 /* need to be set twice
538 otherwise it fails sometimes */
540 ds3000_writereg(state, 0xf8, data);
541 ds3000_writereg(state, 0xf8, data);
543 /* used to indicate that BER estimation
544 is not ready, i.e. BER is unknown */
548 /* read the number of LPDC decoded frames */
549 lpdc_frames = (ds3000_readreg(state, 0xd7) << 16) |
550 (ds3000_readreg(state, 0xd6) << 8) |
551 ds3000_readreg(state, 0xd5);
552 /* read the number of packets with bad CRC */
553 ber_reading = (ds3000_readreg(state, 0xf8) << 8) |
554 ds3000_readreg(state, 0xf7);
555 if (lpdc_frames > 750) {
556 /* clear LPDC frame counters */
557 ds3000_writereg(state, 0xd1, 0x01);
558 /* clear bad packets counter */
559 ds3000_writereg(state, 0xf9, 0x01);
560 /* enable bad packets counter */
561 ds3000_writereg(state, 0xf9, 0x00);
562 /* enable LPDC frame counters */
563 ds3000_writereg(state, 0xd1, 0x00);
566 /* used to indicate that BER estimation is not ready,
567 i.e. BER is unknown */
577 /* read TS2020 signal strength */
578 static int ds3000_read_signal_strength(struct dvb_frontend *fe,
579 u16 *signal_strength)
581 struct ds3000_state *state = fe->demodulator_priv;
582 u16 sig_reading, sig_strength;
585 dprintk("%s()\n", __func__);
587 rfgain = ds3000_tuner_readreg(state, 0x3d) & 0x1f;
588 bbgain = ds3000_tuner_readreg(state, 0x21) & 0x1f;
595 sig_reading = rfgain * 2 + bbgain * 3;
597 sig_strength = 40 + (64 - sig_reading) * 50 / 64 ;
599 /* cook the value to be suitable for szap-s2 human readable output */
600 *signal_strength = sig_strength * 1000;
602 dprintk("%s: raw / cooked = 0x%04x / 0x%04x\n", __func__,
603 sig_reading, *signal_strength);
608 /* calculate DS3000 snr value in dB */
609 static int ds3000_read_snr(struct dvb_frontend *fe, u16 *snr)
611 struct ds3000_state *state = fe->demodulator_priv;
612 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
613 u8 snr_reading, snr_value;
614 u32 dvbs2_signal_reading, dvbs2_noise_reading, tmp;
615 static const u16 dvbs_snr_tab[] = { /* 20 x Table (rounded up) */
616 0x0000, 0x1b13, 0x2aea, 0x3627, 0x3ede, 0x45fe, 0x4c03,
617 0x513a, 0x55d4, 0x59f2, 0x5dab, 0x6111, 0x6431, 0x6717,
618 0x69c9, 0x6c4e, 0x6eac, 0x70e8, 0x7304, 0x7505
620 static const u16 dvbs2_snr_tab[] = { /* 80 x Table (rounded up) */
621 0x0000, 0x0bc2, 0x12a3, 0x1785, 0x1b4e, 0x1e65, 0x2103,
622 0x2347, 0x2546, 0x2710, 0x28ae, 0x2a28, 0x2b83, 0x2cc5,
623 0x2df1, 0x2f09, 0x3010, 0x3109, 0x31f4, 0x32d2, 0x33a6,
624 0x3470, 0x3531, 0x35ea, 0x369b, 0x3746, 0x37ea, 0x3888,
625 0x3920, 0x39b3, 0x3a42, 0x3acc, 0x3b51, 0x3bd3, 0x3c51,
626 0x3ccb, 0x3d42, 0x3db6, 0x3e27, 0x3e95, 0x3f00, 0x3f68,
627 0x3fcf, 0x4033, 0x4094, 0x40f4, 0x4151, 0x41ac, 0x4206,
628 0x425e, 0x42b4, 0x4308, 0x435b, 0x43ac, 0x43fc, 0x444a,
629 0x4497, 0x44e2, 0x452d, 0x4576, 0x45bd, 0x4604, 0x4649,
630 0x468e, 0x46d1, 0x4713, 0x4755, 0x4795, 0x47d4, 0x4813,
631 0x4851, 0x488d, 0x48c9, 0x4904, 0x493f, 0x4978, 0x49b1,
632 0x49e9, 0x4a20, 0x4a57
635 dprintk("%s()\n", __func__);
637 switch (c->delivery_system) {
639 snr_reading = ds3000_readreg(state, 0xff);
641 if (snr_reading == 0)
644 if (snr_reading > 20)
646 snr_value = dvbs_snr_tab[snr_reading - 1] * 10 / 23026;
647 /* cook the value to be suitable for szap-s2
648 human readable output */
649 *snr = snr_value * 8 * 655;
651 dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__,
655 dvbs2_noise_reading = (ds3000_readreg(state, 0x8c) & 0x3f) +
656 (ds3000_readreg(state, 0x8d) << 4);
657 dvbs2_signal_reading = ds3000_readreg(state, 0x8e);
658 tmp = dvbs2_signal_reading * dvbs2_signal_reading >> 1;
663 if (dvbs2_noise_reading == 0) {
665 /* cook the value to be suitable for szap-s2
666 human readable output */
670 if (tmp > dvbs2_noise_reading) {
671 snr_reading = tmp / dvbs2_noise_reading;
672 if (snr_reading > 80)
674 snr_value = dvbs2_snr_tab[snr_reading - 1] / 1000;
675 /* cook the value to be suitable for szap-s2
676 human readable output */
677 *snr = snr_value * 5 * 655;
679 snr_reading = dvbs2_noise_reading / tmp;
680 if (snr_reading > 80)
682 *snr = -(dvbs2_snr_tab[snr_reading] / 1000);
684 dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__,
694 /* read DS3000 uncorrected blocks */
695 static int ds3000_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
697 struct ds3000_state *state = fe->demodulator_priv;
698 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
702 dprintk("%s()\n", __func__);
704 switch (c->delivery_system) {
706 *ucblocks = (ds3000_readreg(state, 0xf5) << 8) |
707 ds3000_readreg(state, 0xf4);
708 data = ds3000_readreg(state, 0xf8);
709 /* clear packet counters */
711 ds3000_writereg(state, 0xf8, data);
712 /* enable packet counters */
714 ds3000_writereg(state, 0xf8, data);
717 _ucblocks = (ds3000_readreg(state, 0xe2) << 8) |
718 ds3000_readreg(state, 0xe1);
719 if (_ucblocks > state->prevUCBS2)
720 *ucblocks = _ucblocks - state->prevUCBS2;
722 *ucblocks = state->prevUCBS2 - _ucblocks;
723 state->prevUCBS2 = _ucblocks;
732 static int ds3000_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
734 struct ds3000_state *state = fe->demodulator_priv;
737 dprintk("%s(%d)\n", __func__, tone);
738 if ((tone != SEC_TONE_ON) && (tone != SEC_TONE_OFF)) {
739 printk(KERN_ERR "%s: Invalid, tone=%d\n", __func__, tone);
743 data = ds3000_readreg(state, 0xa2);
745 ds3000_writereg(state, 0xa2, data);
749 dprintk("%s: setting tone on\n", __func__);
750 data = ds3000_readreg(state, 0xa1);
753 ds3000_writereg(state, 0xa1, data);
756 dprintk("%s: setting tone off\n", __func__);
757 data = ds3000_readreg(state, 0xa2);
759 ds3000_writereg(state, 0xa2, data);
766 static int ds3000_send_diseqc_msg(struct dvb_frontend *fe,
767 struct dvb_diseqc_master_cmd *d)
769 struct ds3000_state *state = fe->demodulator_priv;
773 /* Dump DiSEqC message */
774 dprintk("%s(", __func__);
775 for (i = 0 ; i < d->msg_len;) {
776 dprintk("0x%02x", d->msg[i]);
777 if (++i < d->msg_len)
781 /* enable DiSEqC message send pin */
782 data = ds3000_readreg(state, 0xa2);
784 ds3000_writereg(state, 0xa2, data);
787 for (i = 0; i < d->msg_len; i++)
788 ds3000_writereg(state, 0xa3 + i, d->msg[i]);
790 data = ds3000_readreg(state, 0xa1);
791 /* clear DiSEqC message length and status,
792 enable DiSEqC message send */
794 /* set DiSEqC mode, modulation active during 33 pulses,
795 set DiSEqC message length */
796 data |= ((d->msg_len - 1) << 3) | 0x07;
797 ds3000_writereg(state, 0xa1, data);
799 /* wait up to 150ms for DiSEqC transmission to complete */
800 for (i = 0; i < 15; i++) {
801 data = ds3000_readreg(state, 0xa1);
802 if ((data & 0x40) == 0)
807 /* DiSEqC timeout after 150ms */
809 data = ds3000_readreg(state, 0xa1);
812 ds3000_writereg(state, 0xa1, data);
814 data = ds3000_readreg(state, 0xa2);
817 ds3000_writereg(state, 0xa2, data);
822 data = ds3000_readreg(state, 0xa2);
825 ds3000_writereg(state, 0xa2, data);
830 /* Send DiSEqC burst */
831 static int ds3000_diseqc_send_burst(struct dvb_frontend *fe,
832 fe_sec_mini_cmd_t burst)
834 struct ds3000_state *state = fe->demodulator_priv;
838 dprintk("%s()\n", __func__);
840 data = ds3000_readreg(state, 0xa2);
842 ds3000_writereg(state, 0xa2, data);
845 if (burst == SEC_MINI_A)
846 /* Unmodulated tone burst */
847 ds3000_writereg(state, 0xa1, 0x02);
848 else if (burst == SEC_MINI_B)
849 /* Modulated tone burst */
850 ds3000_writereg(state, 0xa1, 0x01);
855 for (i = 0; i < 5; i++) {
856 data = ds3000_readreg(state, 0xa1);
857 if ((data & 0x40) == 0)
863 data = ds3000_readreg(state, 0xa1);
866 ds3000_writereg(state, 0xa1, data);
868 data = ds3000_readreg(state, 0xa2);
871 ds3000_writereg(state, 0xa2, data);
876 data = ds3000_readreg(state, 0xa2);
879 ds3000_writereg(state, 0xa2, data);
884 static void ds3000_release(struct dvb_frontend *fe)
886 struct ds3000_state *state = fe->demodulator_priv;
887 dprintk("%s\n", __func__);
891 static struct dvb_frontend_ops ds3000_ops;
893 struct dvb_frontend *ds3000_attach(const struct ds3000_config *config,
894 struct i2c_adapter *i2c)
896 struct ds3000_state *state = NULL;
899 dprintk("%s\n", __func__);
901 /* allocate memory for the internal state */
902 state = kzalloc(sizeof(struct ds3000_state), GFP_KERNEL);
904 printk(KERN_ERR "Unable to kmalloc\n");
908 state->config = config;
910 state->prevUCBS2 = 0;
912 /* check if the demod is present */
913 ret = ds3000_readreg(state, 0x00) & 0xfe;
915 printk(KERN_ERR "Invalid probe, probably not a DS3000\n");
919 printk(KERN_INFO "DS3000 chip version: %d.%d attached.\n",
920 ds3000_readreg(state, 0x02),
921 ds3000_readreg(state, 0x01));
923 memcpy(&state->frontend.ops, &ds3000_ops,
924 sizeof(struct dvb_frontend_ops));
925 state->frontend.demodulator_priv = state;
928 * Some devices like T480 starts with voltage on. Be sure
929 * to turn voltage off during init, as this can otherwise
930 * interfere with Unicable SCR systems.
932 ds3000_set_voltage(&state->frontend, SEC_VOLTAGE_OFF);
933 return &state->frontend;
940 EXPORT_SYMBOL(ds3000_attach);
942 static int ds3000_set_property(struct dvb_frontend *fe,
943 struct dtv_property *tvp)
945 dprintk("%s(..)\n", __func__);
949 static int ds3000_get_property(struct dvb_frontend *fe,
950 struct dtv_property *tvp)
952 dprintk("%s(..)\n", __func__);
956 static int ds3000_set_carrier_offset(struct dvb_frontend *fe,
957 s32 carrier_offset_khz)
959 struct ds3000_state *state = fe->demodulator_priv;
962 tmp = carrier_offset_khz;
964 tmp = (2 * tmp + DS3000_SAMPLE_RATE) / (2 * DS3000_SAMPLE_RATE);
969 ds3000_writereg(state, 0x5f, tmp >> 8);
970 ds3000_writereg(state, 0x5e, tmp & 0xff);
975 static int ds3000_set_frontend(struct dvb_frontend *fe,
976 struct dvb_frontend_parameters *p)
978 struct ds3000_state *state = fe->demodulator_priv;
979 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
983 u8 mlpf, mlpf_new, mlpf_max, mlpf_min, nlpf, div4;
988 dprintk("%s() ", __func__);
990 if (state->config->set_ts_params)
991 state->config->set_ts_params(fe, 0);
994 ds3000_tuner_writereg(state, 0x07, 0x02);
995 ds3000_tuner_writereg(state, 0x10, 0x00);
996 ds3000_tuner_writereg(state, 0x60, 0x79);
997 ds3000_tuner_writereg(state, 0x08, 0x01);
998 ds3000_tuner_writereg(state, 0x00, 0x01);
1001 /* calculate and set freq divider */
1002 if (p->frequency < 1146000) {
1003 ds3000_tuner_writereg(state, 0x10, 0x11);
1005 ndiv = ((p->frequency * (6 + 8) * 4) +
1006 (DS3000_XTAL_FREQ / 2)) /
1007 DS3000_XTAL_FREQ - 1024;
1009 ds3000_tuner_writereg(state, 0x10, 0x01);
1010 ndiv = ((p->frequency * (6 + 8) * 2) +
1011 (DS3000_XTAL_FREQ / 2)) /
1012 DS3000_XTAL_FREQ - 1024;
1015 ds3000_tuner_writereg(state, 0x01, (ndiv & 0x0f00) >> 8);
1016 ds3000_tuner_writereg(state, 0x02, ndiv & 0x00ff);
1019 ds3000_tuner_writereg(state, 0x03, 0x06);
1020 ds3000_tuner_writereg(state, 0x51, 0x0f);
1021 ds3000_tuner_writereg(state, 0x51, 0x1f);
1022 ds3000_tuner_writereg(state, 0x50, 0x10);
1023 ds3000_tuner_writereg(state, 0x50, 0x00);
1027 ds3000_tuner_writereg(state, 0x51, 0x17);
1028 ds3000_tuner_writereg(state, 0x51, 0x1f);
1029 ds3000_tuner_writereg(state, 0x50, 0x08);
1030 ds3000_tuner_writereg(state, 0x50, 0x00);
1033 value = ds3000_tuner_readreg(state, 0x3d);
1035 if ((value > 4) && (value < 15)) {
1039 value = ((value << 3) | 0x01) & 0x79;
1042 ds3000_tuner_writereg(state, 0x60, value);
1043 ds3000_tuner_writereg(state, 0x51, 0x17);
1044 ds3000_tuner_writereg(state, 0x51, 0x1f);
1045 ds3000_tuner_writereg(state, 0x50, 0x08);
1046 ds3000_tuner_writereg(state, 0x50, 0x00);
1048 /* set low-pass filter period */
1049 ds3000_tuner_writereg(state, 0x04, 0x2e);
1050 ds3000_tuner_writereg(state, 0x51, 0x1b);
1051 ds3000_tuner_writereg(state, 0x51, 0x1f);
1052 ds3000_tuner_writereg(state, 0x50, 0x04);
1053 ds3000_tuner_writereg(state, 0x50, 0x00);
1056 f3db = ((c->symbol_rate / 1000) << 2) / 5 + 2000;
1057 if ((c->symbol_rate / 1000) < 5000)
1064 /* set low-pass filter baseband */
1065 value = ds3000_tuner_readreg(state, 0x26);
1066 mlpf = 0x2e * 207 / ((value << 1) + 151);
1067 mlpf_max = mlpf * 135 / 100;
1068 mlpf_min = mlpf * 78 / 100;
1072 /* rounded to the closest integer */
1073 nlpf = ((mlpf * f3db * 1000) + (2766 * DS3000_XTAL_FREQ / 2))
1074 / (2766 * DS3000_XTAL_FREQ);
1080 /* rounded to the closest integer */
1081 mlpf_new = ((DS3000_XTAL_FREQ * nlpf * 2766) +
1082 (1000 * f3db / 2)) / (1000 * f3db);
1084 if (mlpf_new < mlpf_min) {
1086 mlpf_new = ((DS3000_XTAL_FREQ * nlpf * 2766) +
1087 (1000 * f3db / 2)) / (1000 * f3db);
1090 if (mlpf_new > mlpf_max)
1091 mlpf_new = mlpf_max;
1093 ds3000_tuner_writereg(state, 0x04, mlpf_new);
1094 ds3000_tuner_writereg(state, 0x06, nlpf);
1095 ds3000_tuner_writereg(state, 0x51, 0x1b);
1096 ds3000_tuner_writereg(state, 0x51, 0x1f);
1097 ds3000_tuner_writereg(state, 0x50, 0x04);
1098 ds3000_tuner_writereg(state, 0x50, 0x00);
1102 ds3000_tuner_writereg(state, 0x51, 0x1e);
1103 ds3000_tuner_writereg(state, 0x51, 0x1f);
1104 ds3000_tuner_writereg(state, 0x50, 0x01);
1105 ds3000_tuner_writereg(state, 0x50, 0x00);
1108 offset_khz = (ndiv - ndiv % 2 + 1024) * DS3000_XTAL_FREQ
1109 / (6 + 8) / (div4 + 1) / 2 - p->frequency;
1111 /* ds3000 global reset */
1112 ds3000_writereg(state, 0x07, 0x80);
1113 ds3000_writereg(state, 0x07, 0x00);
1114 /* ds3000 build-in uC reset */
1115 ds3000_writereg(state, 0xb2, 0x01);
1116 /* ds3000 software reset */
1117 ds3000_writereg(state, 0x00, 0x01);
1119 switch (c->delivery_system) {
1121 /* initialise the demod in DVB-S mode */
1122 for (i = 0; i < sizeof(ds3000_dvbs_init_tab); i += 2)
1123 ds3000_writereg(state,
1124 ds3000_dvbs_init_tab[i],
1125 ds3000_dvbs_init_tab[i + 1]);
1126 value = ds3000_readreg(state, 0xfe);
1129 ds3000_writereg(state, 0xfe, value);
1132 /* initialise the demod in DVB-S2 mode */
1133 for (i = 0; i < sizeof(ds3000_dvbs2_init_tab); i += 2)
1134 ds3000_writereg(state,
1135 ds3000_dvbs2_init_tab[i],
1136 ds3000_dvbs2_init_tab[i + 1]);
1137 ds3000_writereg(state, 0xfe, 0x98);
1143 /* enable 27MHz clock output */
1144 ds3000_writereg(state, 0x29, 0x80);
1145 /* enable ac coupling */
1146 ds3000_writereg(state, 0x25, 0x8a);
1148 /* enhance symbol rate performance */
1149 if ((c->symbol_rate / 1000) <= 5000) {
1150 value = 29777 / (c->symbol_rate / 1000) + 1;
1153 ds3000_writereg(state, 0xc3, 0x0d);
1154 ds3000_writereg(state, 0xc8, value);
1155 ds3000_writereg(state, 0xc4, 0x10);
1156 ds3000_writereg(state, 0xc7, 0x0e);
1157 } else if ((c->symbol_rate / 1000) <= 10000) {
1158 value = 92166 / (c->symbol_rate / 1000) + 1;
1161 ds3000_writereg(state, 0xc3, 0x07);
1162 ds3000_writereg(state, 0xc8, value);
1163 ds3000_writereg(state, 0xc4, 0x09);
1164 ds3000_writereg(state, 0xc7, 0x12);
1165 } else if ((c->symbol_rate / 1000) <= 20000) {
1166 value = 64516 / (c->symbol_rate / 1000) + 1;
1167 ds3000_writereg(state, 0xc3, value);
1168 ds3000_writereg(state, 0xc8, 0x0e);
1169 ds3000_writereg(state, 0xc4, 0x07);
1170 ds3000_writereg(state, 0xc7, 0x18);
1172 value = 129032 / (c->symbol_rate / 1000) + 1;
1173 ds3000_writereg(state, 0xc3, value);
1174 ds3000_writereg(state, 0xc8, 0x0a);
1175 ds3000_writereg(state, 0xc4, 0x05);
1176 ds3000_writereg(state, 0xc7, 0x24);
1179 /* normalized symbol rate rounded to the closest integer */
1180 value = (((c->symbol_rate / 1000) << 16) +
1181 (DS3000_SAMPLE_RATE / 2)) / DS3000_SAMPLE_RATE;
1182 ds3000_writereg(state, 0x61, value & 0x00ff);
1183 ds3000_writereg(state, 0x62, (value & 0xff00) >> 8);
1185 /* co-channel interference cancellation disabled */
1186 ds3000_writereg(state, 0x56, 0x00);
1188 /* equalizer disabled */
1189 ds3000_writereg(state, 0x76, 0x00);
1191 /*ds3000_writereg(state, 0x08, 0x03);
1192 ds3000_writereg(state, 0xfd, 0x22);
1193 ds3000_writereg(state, 0x08, 0x07);
1194 ds3000_writereg(state, 0xfd, 0x42);
1195 ds3000_writereg(state, 0x08, 0x07);*/
1197 if (state->config->ci_mode) {
1198 switch (c->delivery_system) {
1201 ds3000_writereg(state, 0xfd, 0x80);
1204 ds3000_writereg(state, 0xfd, 0x01);
1209 /* ds3000 out of software reset */
1210 ds3000_writereg(state, 0x00, 0x00);
1211 /* start ds3000 build-in uC */
1212 ds3000_writereg(state, 0xb2, 0x00);
1214 ds3000_set_carrier_offset(fe, offset_khz);
1216 for (i = 0; i < 30 ; i++) {
1217 ds3000_read_status(fe, &status);
1218 if (status && FE_HAS_LOCK)
1227 static int ds3000_tune(struct dvb_frontend *fe,
1228 struct dvb_frontend_parameters *p,
1229 unsigned int mode_flags,
1230 unsigned int *delay,
1231 fe_status_t *status)
1234 int ret = ds3000_set_frontend(fe, p);
1241 return ds3000_read_status(fe, status);
1244 static enum dvbfe_algo ds3000_get_algo(struct dvb_frontend *fe)
1246 dprintk("%s()\n", __func__);
1247 return DVBFE_ALGO_HW;
1251 * Initialise or wake up device
1253 * Power config will reset and load initial firmware if required
1255 static int ds3000_initfe(struct dvb_frontend *fe)
1257 struct ds3000_state *state = fe->demodulator_priv;
1260 dprintk("%s()\n", __func__);
1262 ds3000_writereg(state, 0x08, 0x01 | ds3000_readreg(state, 0x08));
1266 ds3000_tuner_writereg(state, 0x42, 0x73);
1267 ds3000_tuner_writereg(state, 0x05, 0x01);
1268 ds3000_tuner_writereg(state, 0x62, 0xf5);
1269 /* Load the firmware if required */
1270 ret = ds3000_firmware_ondemand(fe);
1272 printk(KERN_ERR "%s: Unable initialize firmware\n", __func__);
1279 /* Put device to sleep */
1280 static int ds3000_sleep(struct dvb_frontend *fe)
1282 dprintk("%s()\n", __func__);
1286 static struct dvb_frontend_ops ds3000_ops = {
1289 .name = "Montage Technology DS3000/TS2020",
1291 .frequency_min = 950000,
1292 .frequency_max = 2150000,
1293 .frequency_stepsize = 1011, /* kHz for QPSK frontends */
1294 .frequency_tolerance = 5000,
1295 .symbol_rate_min = 1000000,
1296 .symbol_rate_max = 45000000,
1297 .caps = FE_CAN_INVERSION_AUTO |
1298 FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1299 FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
1300 FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1301 FE_CAN_2G_MODULATION |
1302 FE_CAN_QPSK | FE_CAN_RECOVER
1305 .release = ds3000_release,
1307 .init = ds3000_initfe,
1308 .sleep = ds3000_sleep,
1309 .read_status = ds3000_read_status,
1310 .read_ber = ds3000_read_ber,
1311 .read_signal_strength = ds3000_read_signal_strength,
1312 .read_snr = ds3000_read_snr,
1313 .read_ucblocks = ds3000_read_ucblocks,
1314 .set_voltage = ds3000_set_voltage,
1315 .set_tone = ds3000_set_tone,
1316 .diseqc_send_master_cmd = ds3000_send_diseqc_msg,
1317 .diseqc_send_burst = ds3000_diseqc_send_burst,
1318 .get_frontend_algo = ds3000_get_algo,
1320 .set_property = ds3000_set_property,
1321 .get_property = ds3000_get_property,
1322 .set_frontend = ds3000_set_frontend,
1323 .tune = ds3000_tune,
1326 module_param(debug, int, 0644);
1327 MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");
1329 MODULE_DESCRIPTION("DVB Frontend module for Montage Technology "
1330 "DS3000/TS2020 hardware");
1331 MODULE_AUTHOR("Konstantin Dimitrov");
1332 MODULE_LICENSE("GPL");