2 Montage Technology DS3000 - DVBS/S2 Demodulator driver
3 Copyright (C) 2009-2012 Konstantin Dimitrov <kosio.dimitrov@gmail.com>
5 Copyright (C) 2009-2012 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"
35 #define dprintk(args...) \
43 #define DS3000_SAMPLE_RATE 96000 /* 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;
234 /* previous uncorrected block counter for DVB-S2 */
238 static int ds3000_writereg(struct ds3000_state *state, int reg, int data)
240 u8 buf[] = { reg, data };
241 struct i2c_msg msg = { .addr = state->config->demod_address,
242 .flags = 0, .buf = buf, .len = 2 };
245 dprintk("%s: write reg 0x%02x, value 0x%02x\n", __func__, reg, data);
247 err = i2c_transfer(state->i2c, &msg, 1);
249 printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x,"
250 " value == 0x%02x)\n", __func__, err, reg, data);
257 static int ds3000_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
259 struct ds3000_state *state = fe->demodulator_priv;
262 ds3000_writereg(state, 0x03, 0x12);
264 ds3000_writereg(state, 0x03, 0x02);
269 /* I2C write for 8k firmware load */
270 static int ds3000_writeFW(struct ds3000_state *state, int reg,
271 const u8 *data, u16 len)
277 buf = kmalloc(33, GFP_KERNEL);
279 printk(KERN_ERR "Unable to kmalloc\n");
285 msg.addr = state->config->demod_address;
290 for (i = 0; i < len; i += 32) {
291 memcpy(buf + 1, data + i, 32);
293 dprintk("%s: write reg 0x%02x, len = %d\n", __func__, reg, len);
295 ret = i2c_transfer(state->i2c, &msg, 1);
297 printk(KERN_ERR "%s: write error(err == %i, "
298 "reg == 0x%02x\n", __func__, ret, reg);
311 static int ds3000_readreg(struct ds3000_state *state, u8 reg)
316 struct i2c_msg msg[] = {
318 .addr = state->config->demod_address,
323 .addr = state->config->demod_address,
330 ret = i2c_transfer(state->i2c, msg, 2);
333 printk(KERN_ERR "%s: reg=0x%x(error=%d)\n", __func__, reg, ret);
337 dprintk("%s: read reg 0x%02x, value 0x%02x\n", __func__, reg, b1[0]);
342 static int ds3000_load_firmware(struct dvb_frontend *fe,
343 const struct firmware *fw);
345 static int ds3000_firmware_ondemand(struct dvb_frontend *fe)
347 struct ds3000_state *state = fe->demodulator_priv;
348 const struct firmware *fw;
351 dprintk("%s()\n", __func__);
353 ret = ds3000_readreg(state, 0xb2);
358 /* request the firmware, this will block until someone uploads it */
359 printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
361 ret = reject_firmware(&fw, "/*(DEBLOBBED)*/",
362 state->i2c->dev.parent);
363 printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
365 printk(KERN_ERR "%s: No firmware uploaded (timeout or file not "
366 "found?)\n", __func__);
370 ret = ds3000_load_firmware(fe, fw);
372 printk("%s: Writing firmware to device failed\n", __func__);
374 release_firmware(fw);
376 dprintk("%s: Firmware upload %s\n", __func__,
377 ret == 0 ? "complete" : "failed");
382 static int ds3000_load_firmware(struct dvb_frontend *fe,
383 const struct firmware *fw)
385 struct ds3000_state *state = fe->demodulator_priv;
388 dprintk("%s\n", __func__);
389 dprintk("Firmware is %zu bytes (%02x %02x .. %02x %02x)\n",
393 fw->data[fw->size - 2],
394 fw->data[fw->size - 1]);
396 /* Begin the firmware load process */
397 ds3000_writereg(state, 0xb2, 0x01);
398 /* write the entire firmware */
399 ret = ds3000_writeFW(state, 0xb0, fw->data, fw->size);
400 ds3000_writereg(state, 0xb2, 0x00);
405 static int ds3000_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
407 struct ds3000_state *state = fe->demodulator_priv;
410 dprintk("%s(%d)\n", __func__, voltage);
412 data = ds3000_readreg(state, 0xa2);
413 data |= 0x03; /* bit0 V/H, bit1 off/on */
423 case SEC_VOLTAGE_OFF:
427 ds3000_writereg(state, 0xa2, data);
432 static int ds3000_read_status(struct dvb_frontend *fe, fe_status_t* status)
434 struct ds3000_state *state = fe->demodulator_priv;
435 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
440 switch (c->delivery_system) {
442 lock = ds3000_readreg(state, 0xd1);
443 if ((lock & 0x07) == 0x07)
444 *status = FE_HAS_SIGNAL | FE_HAS_CARRIER |
445 FE_HAS_VITERBI | FE_HAS_SYNC |
450 lock = ds3000_readreg(state, 0x0d);
451 if ((lock & 0x8f) == 0x8f)
452 *status = FE_HAS_SIGNAL | FE_HAS_CARRIER |
453 FE_HAS_VITERBI | FE_HAS_SYNC |
461 if (state->config->set_lock_led)
462 state->config->set_lock_led(fe, *status == 0 ? 0 : 1);
464 dprintk("%s: status = 0x%02x\n", __func__, lock);
469 /* read DS3000 BER value */
470 static int ds3000_read_ber(struct dvb_frontend *fe, u32* ber)
472 struct ds3000_state *state = fe->demodulator_priv;
473 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
475 u32 ber_reading, lpdc_frames;
477 dprintk("%s()\n", __func__);
479 switch (c->delivery_system) {
481 /* set the number of bytes checked during
483 ds3000_writereg(state, 0xf9, 0x04);
484 /* read BER estimation status */
485 data = ds3000_readreg(state, 0xf8);
486 /* check if BER estimation is ready */
487 if ((data & 0x10) == 0) {
488 /* this is the number of error bits,
489 to calculate the bit error rate
491 *ber = (ds3000_readreg(state, 0xf7) << 8) |
492 ds3000_readreg(state, 0xf6);
493 /* start counting error bits */
494 /* need to be set twice
495 otherwise it fails sometimes */
497 ds3000_writereg(state, 0xf8, data);
498 ds3000_writereg(state, 0xf8, data);
500 /* used to indicate that BER estimation
501 is not ready, i.e. BER is unknown */
505 /* read the number of LPDC decoded frames */
506 lpdc_frames = (ds3000_readreg(state, 0xd7) << 16) |
507 (ds3000_readreg(state, 0xd6) << 8) |
508 ds3000_readreg(state, 0xd5);
509 /* read the number of packets with bad CRC */
510 ber_reading = (ds3000_readreg(state, 0xf8) << 8) |
511 ds3000_readreg(state, 0xf7);
512 if (lpdc_frames > 750) {
513 /* clear LPDC frame counters */
514 ds3000_writereg(state, 0xd1, 0x01);
515 /* clear bad packets counter */
516 ds3000_writereg(state, 0xf9, 0x01);
517 /* enable bad packets counter */
518 ds3000_writereg(state, 0xf9, 0x00);
519 /* enable LPDC frame counters */
520 ds3000_writereg(state, 0xd1, 0x00);
523 /* used to indicate that BER estimation is not ready,
524 i.e. BER is unknown */
534 static int ds3000_read_signal_strength(struct dvb_frontend *fe,
535 u16 *signal_strength)
537 if (fe->ops.tuner_ops.get_rf_strength)
538 fe->ops.tuner_ops.get_rf_strength(fe, signal_strength);
543 /* calculate DS3000 snr value in dB */
544 static int ds3000_read_snr(struct dvb_frontend *fe, u16 *snr)
546 struct ds3000_state *state = fe->demodulator_priv;
547 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
548 u8 snr_reading, snr_value;
549 u32 dvbs2_signal_reading, dvbs2_noise_reading, tmp;
550 static const u16 dvbs_snr_tab[] = { /* 20 x Table (rounded up) */
551 0x0000, 0x1b13, 0x2aea, 0x3627, 0x3ede, 0x45fe, 0x4c03,
552 0x513a, 0x55d4, 0x59f2, 0x5dab, 0x6111, 0x6431, 0x6717,
553 0x69c9, 0x6c4e, 0x6eac, 0x70e8, 0x7304, 0x7505
555 static const u16 dvbs2_snr_tab[] = { /* 80 x Table (rounded up) */
556 0x0000, 0x0bc2, 0x12a3, 0x1785, 0x1b4e, 0x1e65, 0x2103,
557 0x2347, 0x2546, 0x2710, 0x28ae, 0x2a28, 0x2b83, 0x2cc5,
558 0x2df1, 0x2f09, 0x3010, 0x3109, 0x31f4, 0x32d2, 0x33a6,
559 0x3470, 0x3531, 0x35ea, 0x369b, 0x3746, 0x37ea, 0x3888,
560 0x3920, 0x39b3, 0x3a42, 0x3acc, 0x3b51, 0x3bd3, 0x3c51,
561 0x3ccb, 0x3d42, 0x3db6, 0x3e27, 0x3e95, 0x3f00, 0x3f68,
562 0x3fcf, 0x4033, 0x4094, 0x40f4, 0x4151, 0x41ac, 0x4206,
563 0x425e, 0x42b4, 0x4308, 0x435b, 0x43ac, 0x43fc, 0x444a,
564 0x4497, 0x44e2, 0x452d, 0x4576, 0x45bd, 0x4604, 0x4649,
565 0x468e, 0x46d1, 0x4713, 0x4755, 0x4795, 0x47d4, 0x4813,
566 0x4851, 0x488d, 0x48c9, 0x4904, 0x493f, 0x4978, 0x49b1,
567 0x49e9, 0x4a20, 0x4a57
570 dprintk("%s()\n", __func__);
572 switch (c->delivery_system) {
574 snr_reading = ds3000_readreg(state, 0xff);
576 if (snr_reading == 0)
579 if (snr_reading > 20)
581 snr_value = dvbs_snr_tab[snr_reading - 1] * 10 / 23026;
582 /* cook the value to be suitable for szap-s2
583 human readable output */
584 *snr = snr_value * 8 * 655;
586 dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__,
590 dvbs2_noise_reading = (ds3000_readreg(state, 0x8c) & 0x3f) +
591 (ds3000_readreg(state, 0x8d) << 4);
592 dvbs2_signal_reading = ds3000_readreg(state, 0x8e);
593 tmp = dvbs2_signal_reading * dvbs2_signal_reading >> 1;
598 if (dvbs2_noise_reading == 0) {
600 /* cook the value to be suitable for szap-s2
601 human readable output */
605 if (tmp > dvbs2_noise_reading) {
606 snr_reading = tmp / dvbs2_noise_reading;
607 if (snr_reading > 80)
609 snr_value = dvbs2_snr_tab[snr_reading - 1] / 1000;
610 /* cook the value to be suitable for szap-s2
611 human readable output */
612 *snr = snr_value * 5 * 655;
614 snr_reading = dvbs2_noise_reading / tmp;
615 if (snr_reading > 80)
617 *snr = -(dvbs2_snr_tab[snr_reading - 1] / 1000);
619 dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__,
629 /* read DS3000 uncorrected blocks */
630 static int ds3000_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
632 struct ds3000_state *state = fe->demodulator_priv;
633 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
637 dprintk("%s()\n", __func__);
639 switch (c->delivery_system) {
641 *ucblocks = (ds3000_readreg(state, 0xf5) << 8) |
642 ds3000_readreg(state, 0xf4);
643 data = ds3000_readreg(state, 0xf8);
644 /* clear packet counters */
646 ds3000_writereg(state, 0xf8, data);
647 /* enable packet counters */
649 ds3000_writereg(state, 0xf8, data);
652 _ucblocks = (ds3000_readreg(state, 0xe2) << 8) |
653 ds3000_readreg(state, 0xe1);
654 if (_ucblocks > state->prevUCBS2)
655 *ucblocks = _ucblocks - state->prevUCBS2;
657 *ucblocks = state->prevUCBS2 - _ucblocks;
658 state->prevUCBS2 = _ucblocks;
667 static int ds3000_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
669 struct ds3000_state *state = fe->demodulator_priv;
672 dprintk("%s(%d)\n", __func__, tone);
673 if ((tone != SEC_TONE_ON) && (tone != SEC_TONE_OFF)) {
674 printk(KERN_ERR "%s: Invalid, tone=%d\n", __func__, tone);
678 data = ds3000_readreg(state, 0xa2);
680 ds3000_writereg(state, 0xa2, data);
684 dprintk("%s: setting tone on\n", __func__);
685 data = ds3000_readreg(state, 0xa1);
688 ds3000_writereg(state, 0xa1, data);
691 dprintk("%s: setting tone off\n", __func__);
692 data = ds3000_readreg(state, 0xa2);
694 ds3000_writereg(state, 0xa2, data);
701 static int ds3000_send_diseqc_msg(struct dvb_frontend *fe,
702 struct dvb_diseqc_master_cmd *d)
704 struct ds3000_state *state = fe->demodulator_priv;
708 /* Dump DiSEqC message */
709 dprintk("%s(", __func__);
710 for (i = 0 ; i < d->msg_len;) {
711 dprintk("0x%02x", d->msg[i]);
712 if (++i < d->msg_len)
716 /* enable DiSEqC message send pin */
717 data = ds3000_readreg(state, 0xa2);
719 ds3000_writereg(state, 0xa2, data);
722 for (i = 0; i < d->msg_len; i++)
723 ds3000_writereg(state, 0xa3 + i, d->msg[i]);
725 data = ds3000_readreg(state, 0xa1);
726 /* clear DiSEqC message length and status,
727 enable DiSEqC message send */
729 /* set DiSEqC mode, modulation active during 33 pulses,
730 set DiSEqC message length */
731 data |= ((d->msg_len - 1) << 3) | 0x07;
732 ds3000_writereg(state, 0xa1, data);
734 /* wait up to 150ms for DiSEqC transmission to complete */
735 for (i = 0; i < 15; i++) {
736 data = ds3000_readreg(state, 0xa1);
737 if ((data & 0x40) == 0)
742 /* DiSEqC timeout after 150ms */
744 data = ds3000_readreg(state, 0xa1);
747 ds3000_writereg(state, 0xa1, data);
749 data = ds3000_readreg(state, 0xa2);
752 ds3000_writereg(state, 0xa2, data);
757 data = ds3000_readreg(state, 0xa2);
760 ds3000_writereg(state, 0xa2, data);
765 /* Send DiSEqC burst */
766 static int ds3000_diseqc_send_burst(struct dvb_frontend *fe,
767 fe_sec_mini_cmd_t burst)
769 struct ds3000_state *state = fe->demodulator_priv;
773 dprintk("%s()\n", __func__);
775 data = ds3000_readreg(state, 0xa2);
777 ds3000_writereg(state, 0xa2, data);
780 if (burst == SEC_MINI_A)
781 /* Unmodulated tone burst */
782 ds3000_writereg(state, 0xa1, 0x02);
783 else if (burst == SEC_MINI_B)
784 /* Modulated tone burst */
785 ds3000_writereg(state, 0xa1, 0x01);
790 for (i = 0; i < 5; i++) {
791 data = ds3000_readreg(state, 0xa1);
792 if ((data & 0x40) == 0)
798 data = ds3000_readreg(state, 0xa1);
801 ds3000_writereg(state, 0xa1, data);
803 data = ds3000_readreg(state, 0xa2);
806 ds3000_writereg(state, 0xa2, data);
811 data = ds3000_readreg(state, 0xa2);
814 ds3000_writereg(state, 0xa2, data);
819 static void ds3000_release(struct dvb_frontend *fe)
821 struct ds3000_state *state = fe->demodulator_priv;
823 if (state->config->set_lock_led)
824 state->config->set_lock_led(fe, 0);
826 dprintk("%s\n", __func__);
830 static struct dvb_frontend_ops ds3000_ops;
832 struct dvb_frontend *ds3000_attach(const struct ds3000_config *config,
833 struct i2c_adapter *i2c)
835 struct ds3000_state *state = NULL;
838 dprintk("%s\n", __func__);
840 /* allocate memory for the internal state */
841 state = kzalloc(sizeof(struct ds3000_state), GFP_KERNEL);
843 printk(KERN_ERR "Unable to kmalloc\n");
847 state->config = config;
849 state->prevUCBS2 = 0;
851 /* check if the demod is present */
852 ret = ds3000_readreg(state, 0x00) & 0xfe;
854 printk(KERN_ERR "Invalid probe, probably not a DS3000\n");
858 printk(KERN_INFO "DS3000 chip version: %d.%d attached.\n",
859 ds3000_readreg(state, 0x02),
860 ds3000_readreg(state, 0x01));
862 memcpy(&state->frontend.ops, &ds3000_ops,
863 sizeof(struct dvb_frontend_ops));
864 state->frontend.demodulator_priv = state;
867 * Some devices like T480 starts with voltage on. Be sure
868 * to turn voltage off during init, as this can otherwise
869 * interfere with Unicable SCR systems.
871 ds3000_set_voltage(&state->frontend, SEC_VOLTAGE_OFF);
872 return &state->frontend;
879 EXPORT_SYMBOL(ds3000_attach);
881 static int ds3000_set_carrier_offset(struct dvb_frontend *fe,
882 s32 carrier_offset_khz)
884 struct ds3000_state *state = fe->demodulator_priv;
887 tmp = carrier_offset_khz;
889 tmp = (2 * tmp + DS3000_SAMPLE_RATE) / (2 * DS3000_SAMPLE_RATE);
894 ds3000_writereg(state, 0x5f, tmp >> 8);
895 ds3000_writereg(state, 0x5e, tmp & 0xff);
900 static int ds3000_set_frontend(struct dvb_frontend *fe)
902 struct ds3000_state *state = fe->demodulator_priv;
903 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
911 dprintk("%s() ", __func__);
913 if (state->config->set_ts_params)
914 state->config->set_ts_params(fe, 0);
916 if (fe->ops.tuner_ops.set_params)
917 fe->ops.tuner_ops.set_params(fe);
919 /* ds3000 global reset */
920 ds3000_writereg(state, 0x07, 0x80);
921 ds3000_writereg(state, 0x07, 0x00);
922 /* ds3000 build-in uC reset */
923 ds3000_writereg(state, 0xb2, 0x01);
924 /* ds3000 software reset */
925 ds3000_writereg(state, 0x00, 0x01);
927 switch (c->delivery_system) {
929 /* initialise the demod in DVB-S mode */
930 for (i = 0; i < sizeof(ds3000_dvbs_init_tab); i += 2)
931 ds3000_writereg(state,
932 ds3000_dvbs_init_tab[i],
933 ds3000_dvbs_init_tab[i + 1]);
934 value = ds3000_readreg(state, 0xfe);
937 ds3000_writereg(state, 0xfe, value);
940 /* initialise the demod in DVB-S2 mode */
941 for (i = 0; i < sizeof(ds3000_dvbs2_init_tab); i += 2)
942 ds3000_writereg(state,
943 ds3000_dvbs2_init_tab[i],
944 ds3000_dvbs2_init_tab[i + 1]);
945 if (c->symbol_rate >= 30000000)
946 ds3000_writereg(state, 0xfe, 0x54);
948 ds3000_writereg(state, 0xfe, 0x98);
954 /* enable 27MHz clock output */
955 ds3000_writereg(state, 0x29, 0x80);
956 /* enable ac coupling */
957 ds3000_writereg(state, 0x25, 0x8a);
959 /* enhance symbol rate performance */
960 if ((c->symbol_rate / 1000) <= 5000) {
961 value = 29777 / (c->symbol_rate / 1000) + 1;
964 ds3000_writereg(state, 0xc3, 0x0d);
965 ds3000_writereg(state, 0xc8, value);
966 ds3000_writereg(state, 0xc4, 0x10);
967 ds3000_writereg(state, 0xc7, 0x0e);
968 } else if ((c->symbol_rate / 1000) <= 10000) {
969 value = 92166 / (c->symbol_rate / 1000) + 1;
972 ds3000_writereg(state, 0xc3, 0x07);
973 ds3000_writereg(state, 0xc8, value);
974 ds3000_writereg(state, 0xc4, 0x09);
975 ds3000_writereg(state, 0xc7, 0x12);
976 } else if ((c->symbol_rate / 1000) <= 20000) {
977 value = 64516 / (c->symbol_rate / 1000) + 1;
978 ds3000_writereg(state, 0xc3, value);
979 ds3000_writereg(state, 0xc8, 0x0e);
980 ds3000_writereg(state, 0xc4, 0x07);
981 ds3000_writereg(state, 0xc7, 0x18);
983 value = 129032 / (c->symbol_rate / 1000) + 1;
984 ds3000_writereg(state, 0xc3, value);
985 ds3000_writereg(state, 0xc8, 0x0a);
986 ds3000_writereg(state, 0xc4, 0x05);
987 ds3000_writereg(state, 0xc7, 0x24);
990 /* normalized symbol rate rounded to the closest integer */
991 value = (((c->symbol_rate / 1000) << 16) +
992 (DS3000_SAMPLE_RATE / 2)) / DS3000_SAMPLE_RATE;
993 ds3000_writereg(state, 0x61, value & 0x00ff);
994 ds3000_writereg(state, 0x62, (value & 0xff00) >> 8);
996 /* co-channel interference cancellation disabled */
997 ds3000_writereg(state, 0x56, 0x00);
999 /* equalizer disabled */
1000 ds3000_writereg(state, 0x76, 0x00);
1002 /*ds3000_writereg(state, 0x08, 0x03);
1003 ds3000_writereg(state, 0xfd, 0x22);
1004 ds3000_writereg(state, 0x08, 0x07);
1005 ds3000_writereg(state, 0xfd, 0x42);
1006 ds3000_writereg(state, 0x08, 0x07);*/
1008 if (state->config->ci_mode) {
1009 switch (c->delivery_system) {
1012 ds3000_writereg(state, 0xfd, 0x80);
1015 ds3000_writereg(state, 0xfd, 0x01);
1020 /* ds3000 out of software reset */
1021 ds3000_writereg(state, 0x00, 0x00);
1022 /* start ds3000 build-in uC */
1023 ds3000_writereg(state, 0xb2, 0x00);
1025 if (fe->ops.tuner_ops.get_frequency) {
1026 fe->ops.tuner_ops.get_frequency(fe, &frequency);
1027 offset_khz = frequency - c->frequency;
1028 ds3000_set_carrier_offset(fe, offset_khz);
1031 for (i = 0; i < 30 ; i++) {
1032 ds3000_read_status(fe, &status);
1033 if (status & FE_HAS_LOCK)
1042 static int ds3000_tune(struct dvb_frontend *fe,
1044 unsigned int mode_flags,
1045 unsigned int *delay,
1046 fe_status_t *status)
1049 int ret = ds3000_set_frontend(fe);
1056 return ds3000_read_status(fe, status);
1059 static enum dvbfe_algo ds3000_get_algo(struct dvb_frontend *fe)
1061 struct ds3000_state *state = fe->demodulator_priv;
1063 if (state->config->set_lock_led)
1064 state->config->set_lock_led(fe, 0);
1066 dprintk("%s()\n", __func__);
1067 return DVBFE_ALGO_HW;
1071 * Initialise or wake up device
1073 * Power config will reset and load initial firmware if required
1075 static int ds3000_initfe(struct dvb_frontend *fe)
1077 struct ds3000_state *state = fe->demodulator_priv;
1080 dprintk("%s()\n", __func__);
1082 ds3000_writereg(state, 0x08, 0x01 | ds3000_readreg(state, 0x08));
1085 /* Load the firmware if required */
1086 ret = ds3000_firmware_ondemand(fe);
1088 printk(KERN_ERR "%s: Unable initialize firmware\n", __func__);
1095 static struct dvb_frontend_ops ds3000_ops = {
1096 .delsys = { SYS_DVBS, SYS_DVBS2 },
1098 .name = "Montage Technology DS3000",
1099 .frequency_min = 950000,
1100 .frequency_max = 2150000,
1101 .frequency_stepsize = 1011, /* kHz for QPSK frontends */
1102 .frequency_tolerance = 5000,
1103 .symbol_rate_min = 1000000,
1104 .symbol_rate_max = 45000000,
1105 .caps = FE_CAN_INVERSION_AUTO |
1106 FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1107 FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
1108 FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1109 FE_CAN_2G_MODULATION |
1110 FE_CAN_QPSK | FE_CAN_RECOVER
1113 .release = ds3000_release,
1115 .init = ds3000_initfe,
1116 .i2c_gate_ctrl = ds3000_i2c_gate_ctrl,
1117 .read_status = ds3000_read_status,
1118 .read_ber = ds3000_read_ber,
1119 .read_signal_strength = ds3000_read_signal_strength,
1120 .read_snr = ds3000_read_snr,
1121 .read_ucblocks = ds3000_read_ucblocks,
1122 .set_voltage = ds3000_set_voltage,
1123 .set_tone = ds3000_set_tone,
1124 .diseqc_send_master_cmd = ds3000_send_diseqc_msg,
1125 .diseqc_send_burst = ds3000_diseqc_send_burst,
1126 .get_frontend_algo = ds3000_get_algo,
1128 .set_frontend = ds3000_set_frontend,
1129 .tune = ds3000_tune,
1132 module_param(debug, int, 0644);
1133 MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");
1135 MODULE_DESCRIPTION("DVB Frontend module for Montage Technology "
1137 MODULE_AUTHOR("Konstantin Dimitrov <kosio.dimitrov@gmail.com>");
1138 MODULE_LICENSE("GPL");