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...) \
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"
45 #define DS3000_SAMPLE_RATE 96000 /* in kHz */
47 /* Register values to initialise the demod in DVB-S mode */
48 static u8 ds3000_dvbs_init_tab
[] = {
132 /* Register values to initialise the demod in DVB-S2 mode */
133 static u8 ds3000_dvbs2_init_tab
[] = {
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 */
240 static int ds3000_writereg(struct ds3000_state
*state
, int reg
, int data
)
242 u8 buf
[] = { reg
, data
};
243 struct i2c_msg msg
= { .addr
= state
->config
->demod_address
,
244 .flags
= 0, .buf
= buf
, .len
= 2 };
247 dprintk("%s: write reg 0x%02x, value 0x%02x\n", __func__
, reg
, data
);
249 err
= i2c_transfer(state
->i2c
, &msg
, 1);
251 printk(KERN_ERR
"%s: writereg error(err == %i, reg == 0x%02x,"
252 " value == 0x%02x)\n", __func__
, err
, reg
, data
);
259 static int ds3000_i2c_gate_ctrl(struct dvb_frontend
*fe
, int enable
)
261 struct ds3000_state
*state
= fe
->demodulator_priv
;
264 ds3000_writereg(state
, 0x03, 0x12);
266 ds3000_writereg(state
, 0x03, 0x02);
271 /* I2C write for 8k firmware load */
272 static int ds3000_writeFW(struct ds3000_state
*state
, int reg
,
273 const u8
*data
, u16 len
)
279 buf
= kmalloc(33, GFP_KERNEL
);
281 printk(KERN_ERR
"Unable to kmalloc\n");
287 msg
.addr
= state
->config
->demod_address
;
292 for (i
= 0; i
< len
; i
+= 32) {
293 memcpy(buf
+ 1, data
+ i
, 32);
295 dprintk("%s: write reg 0x%02x, len = %d\n", __func__
, reg
, len
);
297 ret
= i2c_transfer(state
->i2c
, &msg
, 1);
299 printk(KERN_ERR
"%s: write error(err == %i, "
300 "reg == 0x%02x\n", __func__
, ret
, reg
);
313 static int ds3000_readreg(struct ds3000_state
*state
, u8 reg
)
318 struct i2c_msg msg
[] = {
320 .addr
= state
->config
->demod_address
,
325 .addr
= state
->config
->demod_address
,
332 ret
= i2c_transfer(state
->i2c
, msg
, 2);
335 printk(KERN_ERR
"%s: reg=0x%x(error=%d)\n", __func__
, reg
, ret
);
339 dprintk("%s: read reg 0x%02x, value 0x%02x\n", __func__
, reg
, b1
[0]);
344 static int ds3000_load_firmware(struct dvb_frontend
*fe
,
345 const struct firmware
*fw
);
347 static int ds3000_firmware_ondemand(struct dvb_frontend
*fe
)
349 struct ds3000_state
*state
= fe
->demodulator_priv
;
350 const struct firmware
*fw
;
353 dprintk("%s()\n", __func__
);
355 ret
= ds3000_readreg(state
, 0xb2);
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__
);
367 printk(KERN_ERR
"%s: No firmware uploaded (timeout or file not "
368 "found?)\n", __func__
);
372 ret
= ds3000_load_firmware(fe
, fw
);
374 printk("%s: Writing firmware to device failed\n", __func__
);
376 release_firmware(fw
);
378 dprintk("%s: Firmware upload %s\n", __func__
,
379 ret
== 0 ? "complete" : "failed");
384 static int ds3000_load_firmware(struct dvb_frontend
*fe
,
385 const struct firmware
*fw
)
387 struct ds3000_state
*state
= fe
->demodulator_priv
;
390 dprintk("%s\n", __func__
);
391 dprintk("Firmware is %zu bytes (%02x %02x .. %02x %02x)\n",
395 fw
->data
[fw
->size
- 2],
396 fw
->data
[fw
->size
- 1]);
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);
407 static int ds3000_set_voltage(struct dvb_frontend
*fe
, fe_sec_voltage_t voltage
)
409 struct ds3000_state
*state
= fe
->demodulator_priv
;
412 dprintk("%s(%d)\n", __func__
, voltage
);
414 data
= ds3000_readreg(state
, 0xa2);
415 data
|= 0x03; /* bit0 V/H, bit1 off/on */
425 case SEC_VOLTAGE_OFF
:
429 ds3000_writereg(state
, 0xa2, data
);
434 static int ds3000_read_status(struct dvb_frontend
*fe
, fe_status_t
* status
)
436 struct ds3000_state
*state
= fe
->demodulator_priv
;
437 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
442 switch (c
->delivery_system
) {
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
|
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
|
463 if (state
->config
->set_lock_led
)
464 state
->config
->set_lock_led(fe
, *status
== 0 ? 0 : 1);
466 dprintk("%s: status = 0x%02x\n", __func__
, lock
);
471 /* read DS3000 BER value */
472 static int ds3000_read_ber(struct dvb_frontend
*fe
, u32
* ber
)
474 struct ds3000_state
*state
= fe
->demodulator_priv
;
475 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
477 u32 ber_reading
, lpdc_frames
;
479 dprintk("%s()\n", __func__
);
481 switch (c
->delivery_system
) {
483 /* set the number of bytes checked during
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
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 */
499 ds3000_writereg(state
, 0xf8, data
);
500 ds3000_writereg(state
, 0xf8, data
);
502 /* used to indicate that BER estimation
503 is not ready, i.e. BER is unknown */
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);
525 /* used to indicate that BER estimation is not ready,
526 i.e. BER is unknown */
536 static int ds3000_read_signal_strength(struct dvb_frontend
*fe
,
537 u16
*signal_strength
)
539 if (fe
->ops
.tuner_ops
.get_rf_strength
)
540 fe
->ops
.tuner_ops
.get_rf_strength(fe
, signal_strength
);
545 /* calculate DS3000 snr value in dB */
546 static int ds3000_read_snr(struct dvb_frontend
*fe
, u16
*snr
)
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
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
572 dprintk("%s()\n", __func__
);
574 switch (c
->delivery_system
) {
576 snr_reading
= ds3000_readreg(state
, 0xff);
578 if (snr_reading
== 0)
581 if (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;
588 dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__
,
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;
600 if (dvbs2_noise_reading
== 0) {
602 /* cook the value to be suitable for szap-s2
603 human readable output */
607 if (tmp
> dvbs2_noise_reading
) {
608 snr_reading
= tmp
/ dvbs2_noise_reading
;
609 if (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;
616 snr_reading
= dvbs2_noise_reading
/ tmp
;
617 if (snr_reading
> 80)
619 *snr
= -(dvbs2_snr_tab
[snr_reading
] / 1000);
621 dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__
,
631 /* read DS3000 uncorrected blocks */
632 static int ds3000_read_ucblocks(struct dvb_frontend
*fe
, u32
*ucblocks
)
634 struct ds3000_state
*state
= fe
->demodulator_priv
;
635 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
639 dprintk("%s()\n", __func__
);
641 switch (c
->delivery_system
) {
643 *ucblocks
= (ds3000_readreg(state
, 0xf5) << 8) |
644 ds3000_readreg(state
, 0xf4);
645 data
= ds3000_readreg(state
, 0xf8);
646 /* clear packet counters */
648 ds3000_writereg(state
, 0xf8, data
);
649 /* enable packet counters */
651 ds3000_writereg(state
, 0xf8, data
);
654 _ucblocks
= (ds3000_readreg(state
, 0xe2) << 8) |
655 ds3000_readreg(state
, 0xe1);
656 if (_ucblocks
> state
->prevUCBS2
)
657 *ucblocks
= _ucblocks
- state
->prevUCBS2
;
659 *ucblocks
= state
->prevUCBS2
- _ucblocks
;
660 state
->prevUCBS2
= _ucblocks
;
669 static int ds3000_set_tone(struct dvb_frontend
*fe
, fe_sec_tone_mode_t tone
)
671 struct ds3000_state
*state
= fe
->demodulator_priv
;
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
);
680 data
= ds3000_readreg(state
, 0xa2);
682 ds3000_writereg(state
, 0xa2, data
);
686 dprintk("%s: setting tone on\n", __func__
);
687 data
= ds3000_readreg(state
, 0xa1);
690 ds3000_writereg(state
, 0xa1, data
);
693 dprintk("%s: setting tone off\n", __func__
);
694 data
= ds3000_readreg(state
, 0xa2);
696 ds3000_writereg(state
, 0xa2, data
);
703 static int ds3000_send_diseqc_msg(struct dvb_frontend
*fe
,
704 struct dvb_diseqc_master_cmd
*d
)
706 struct ds3000_state
*state
= fe
->demodulator_priv
;
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
)
718 /* enable DiSEqC message send pin */
719 data
= ds3000_readreg(state
, 0xa2);
721 ds3000_writereg(state
, 0xa2, data
);
724 for (i
= 0; i
< d
->msg_len
; i
++)
725 ds3000_writereg(state
, 0xa3 + i
, d
->msg
[i
]);
727 data
= ds3000_readreg(state
, 0xa1);
728 /* clear DiSEqC message length and status,
729 enable DiSEqC message send */
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
);
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)
744 /* DiSEqC timeout after 150ms */
746 data
= ds3000_readreg(state
, 0xa1);
749 ds3000_writereg(state
, 0xa1, data
);
751 data
= ds3000_readreg(state
, 0xa2);
754 ds3000_writereg(state
, 0xa2, data
);
759 data
= ds3000_readreg(state
, 0xa2);
762 ds3000_writereg(state
, 0xa2, data
);
767 /* Send DiSEqC burst */
768 static int ds3000_diseqc_send_burst(struct dvb_frontend
*fe
,
769 fe_sec_mini_cmd_t burst
)
771 struct ds3000_state
*state
= fe
->demodulator_priv
;
775 dprintk("%s()\n", __func__
);
777 data
= ds3000_readreg(state
, 0xa2);
779 ds3000_writereg(state
, 0xa2, data
);
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);
792 for (i
= 0; i
< 5; i
++) {
793 data
= ds3000_readreg(state
, 0xa1);
794 if ((data
& 0x40) == 0)
800 data
= ds3000_readreg(state
, 0xa1);
803 ds3000_writereg(state
, 0xa1, data
);
805 data
= ds3000_readreg(state
, 0xa2);
808 ds3000_writereg(state
, 0xa2, data
);
813 data
= ds3000_readreg(state
, 0xa2);
816 ds3000_writereg(state
, 0xa2, data
);
821 static void ds3000_release(struct dvb_frontend
*fe
)
823 struct ds3000_state
*state
= fe
->demodulator_priv
;
825 if (state
->config
->set_lock_led
)
826 state
->config
->set_lock_led(fe
, 0);
828 dprintk("%s\n", __func__
);
832 static struct dvb_frontend_ops ds3000_ops
;
834 struct dvb_frontend
*ds3000_attach(const struct ds3000_config
*config
,
835 struct i2c_adapter
*i2c
)
837 struct ds3000_state
*state
= NULL
;
840 dprintk("%s\n", __func__
);
842 /* allocate memory for the internal state */
843 state
= kzalloc(sizeof(struct ds3000_state
), GFP_KERNEL
);
845 printk(KERN_ERR
"Unable to kmalloc\n");
849 state
->config
= config
;
851 state
->prevUCBS2
= 0;
853 /* check if the demod is present */
854 ret
= ds3000_readreg(state
, 0x00) & 0xfe;
856 printk(KERN_ERR
"Invalid probe, probably not a DS3000\n");
860 printk(KERN_INFO
"DS3000 chip version: %d.%d attached.\n",
861 ds3000_readreg(state
, 0x02),
862 ds3000_readreg(state
, 0x01));
864 memcpy(&state
->frontend
.ops
, &ds3000_ops
,
865 sizeof(struct dvb_frontend_ops
));
866 state
->frontend
.demodulator_priv
= state
;
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.
873 ds3000_set_voltage(&state
->frontend
, SEC_VOLTAGE_OFF
);
874 return &state
->frontend
;
881 EXPORT_SYMBOL(ds3000_attach
);
883 static int ds3000_set_carrier_offset(struct dvb_frontend
*fe
,
884 s32 carrier_offset_khz
)
886 struct ds3000_state
*state
= fe
->demodulator_priv
;
889 tmp
= carrier_offset_khz
;
891 tmp
= (2 * tmp
+ DS3000_SAMPLE_RATE
) / (2 * DS3000_SAMPLE_RATE
);
896 ds3000_writereg(state
, 0x5f, tmp
>> 8);
897 ds3000_writereg(state
, 0x5e, tmp
& 0xff);
902 static int ds3000_set_frontend(struct dvb_frontend
*fe
)
904 struct ds3000_state
*state
= fe
->demodulator_priv
;
905 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
913 dprintk("%s() ", __func__
);
915 if (state
->config
->set_ts_params
)
916 state
->config
->set_ts_params(fe
, 0);
918 if (fe
->ops
.tuner_ops
.set_params
)
919 fe
->ops
.tuner_ops
.set_params(fe
);
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);
929 switch (c
->delivery_system
) {
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);
939 ds3000_writereg(state
, 0xfe, value
);
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);
950 ds3000_writereg(state
, 0xfe, 0x98);
956 /* enable 27MHz clock output */
957 ds3000_writereg(state
, 0x29, 0x80);
958 /* enable ac coupling */
959 ds3000_writereg(state
, 0x25, 0x8a);
961 /* enhance symbol rate performance */
962 if ((c
->symbol_rate
/ 1000) <= 5000) {
963 value
= 29777 / (c
->symbol_rate
/ 1000) + 1;
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;
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);
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);
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);
998 /* co-channel interference cancellation disabled */
999 ds3000_writereg(state
, 0x56, 0x00);
1001 /* equalizer disabled */
1002 ds3000_writereg(state
, 0x76, 0x00);
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);*/
1010 if (state
->config
->ci_mode
) {
1011 switch (c
->delivery_system
) {
1014 ds3000_writereg(state
, 0xfd, 0x80);
1017 ds3000_writereg(state
, 0xfd, 0x01);
1022 /* ds3000 out of software reset */
1023 ds3000_writereg(state
, 0x00, 0x00);
1024 /* start ds3000 build-in uC */
1025 ds3000_writereg(state
, 0xb2, 0x00);
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
);
1033 for (i
= 0; i
< 30 ; i
++) {
1034 ds3000_read_status(fe
, &status
);
1035 if (status
& FE_HAS_LOCK
)
1044 static int ds3000_tune(struct dvb_frontend
*fe
,
1046 unsigned int mode_flags
,
1047 unsigned int *delay
,
1048 fe_status_t
*status
)
1051 int ret
= ds3000_set_frontend(fe
);
1058 return ds3000_read_status(fe
, status
);
1061 static enum dvbfe_algo
ds3000_get_algo(struct dvb_frontend
*fe
)
1063 struct ds3000_state
*state
= fe
->demodulator_priv
;
1065 if (state
->config
->set_lock_led
)
1066 state
->config
->set_lock_led(fe
, 0);
1068 dprintk("%s()\n", __func__
);
1069 return DVBFE_ALGO_HW
;
1073 * Initialise or wake up device
1075 * Power config will reset and load initial firmware if required
1077 static int ds3000_initfe(struct dvb_frontend
*fe
)
1079 struct ds3000_state
*state
= fe
->demodulator_priv
;
1082 dprintk("%s()\n", __func__
);
1084 ds3000_writereg(state
, 0x08, 0x01 | ds3000_readreg(state
, 0x08));
1087 /* Load the firmware if required */
1088 ret
= ds3000_firmware_ondemand(fe
);
1090 printk(KERN_ERR
"%s: Unable initialize firmware\n", __func__
);
1097 static struct dvb_frontend_ops ds3000_ops
= {
1098 .delsys
= { SYS_DVBS
, SYS_DVBS2
},
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
1115 .release
= ds3000_release
,
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
,
1130 .set_frontend
= ds3000_set_frontend
,
1131 .tune
= ds3000_tune
,
1134 module_param(debug
, int, 0644);
1135 MODULE_PARM_DESC(debug
, "Activates frontend debugging (default:0)");
1137 MODULE_DESCRIPTION("DVB Frontend module for Montage Technology "
1139 MODULE_AUTHOR("Konstantin Dimitrov <kosio.dimitrov@gmail.com>");
1140 MODULE_LICENSE("GPL");
1141 MODULE_FIRMWARE(DS3000_DEFAULT_FIRMWARE
);