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 <media/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, value == 0x%02x)\n",
252 __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
);
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, reg == 0x%02x\n",
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__
,
360 DS3000_DEFAULT_FIRMWARE
);
361 ret
= request_firmware(&fw
, DS3000_DEFAULT_FIRMWARE
,
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 found?)\n",
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
,
406 enum fe_sec_voltage voltage
)
408 struct ds3000_state
*state
= fe
->demodulator_priv
;
411 dprintk("%s(%d)\n", __func__
, voltage
);
413 data
= ds3000_readreg(state
, 0xa2);
414 data
|= 0x03; /* bit0 V/H, bit1 off/on */
424 case SEC_VOLTAGE_OFF
:
428 ds3000_writereg(state
, 0xa2, data
);
433 static int ds3000_read_status(struct dvb_frontend
*fe
, enum fe_status
*status
)
435 struct ds3000_state
*state
= fe
->demodulator_priv
;
436 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
441 switch (c
->delivery_system
) {
443 lock
= ds3000_readreg(state
, 0xd1);
444 if ((lock
& 0x07) == 0x07)
445 *status
= FE_HAS_SIGNAL
| FE_HAS_CARRIER
|
446 FE_HAS_VITERBI
| FE_HAS_SYNC
|
451 lock
= ds3000_readreg(state
, 0x0d);
452 if ((lock
& 0x8f) == 0x8f)
453 *status
= FE_HAS_SIGNAL
| FE_HAS_CARRIER
|
454 FE_HAS_VITERBI
| FE_HAS_SYNC
|
462 if (state
->config
->set_lock_led
)
463 state
->config
->set_lock_led(fe
, *status
== 0 ? 0 : 1);
465 dprintk("%s: status = 0x%02x\n", __func__
, lock
);
470 /* read DS3000 BER value */
471 static int ds3000_read_ber(struct dvb_frontend
*fe
, u32
* ber
)
473 struct ds3000_state
*state
= fe
->demodulator_priv
;
474 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
476 u32 ber_reading
, lpdc_frames
;
478 dprintk("%s()\n", __func__
);
480 switch (c
->delivery_system
) {
482 /* set the number of bytes checked during
484 ds3000_writereg(state
, 0xf9, 0x04);
485 /* read BER estimation status */
486 data
= ds3000_readreg(state
, 0xf8);
487 /* check if BER estimation is ready */
488 if ((data
& 0x10) == 0) {
489 /* this is the number of error bits,
490 to calculate the bit error rate
492 *ber
= (ds3000_readreg(state
, 0xf7) << 8) |
493 ds3000_readreg(state
, 0xf6);
494 /* start counting error bits */
495 /* need to be set twice
496 otherwise it fails sometimes */
498 ds3000_writereg(state
, 0xf8, data
);
499 ds3000_writereg(state
, 0xf8, data
);
501 /* used to indicate that BER estimation
502 is not ready, i.e. BER is unknown */
506 /* read the number of LPDC decoded frames */
507 lpdc_frames
= (ds3000_readreg(state
, 0xd7) << 16) |
508 (ds3000_readreg(state
, 0xd6) << 8) |
509 ds3000_readreg(state
, 0xd5);
510 /* read the number of packets with bad CRC */
511 ber_reading
= (ds3000_readreg(state
, 0xf8) << 8) |
512 ds3000_readreg(state
, 0xf7);
513 if (lpdc_frames
> 750) {
514 /* clear LPDC frame counters */
515 ds3000_writereg(state
, 0xd1, 0x01);
516 /* clear bad packets counter */
517 ds3000_writereg(state
, 0xf9, 0x01);
518 /* enable bad packets counter */
519 ds3000_writereg(state
, 0xf9, 0x00);
520 /* enable LPDC frame counters */
521 ds3000_writereg(state
, 0xd1, 0x00);
524 /* used to indicate that BER estimation is not ready,
525 i.e. BER is unknown */
535 static int ds3000_read_signal_strength(struct dvb_frontend
*fe
,
536 u16
*signal_strength
)
538 if (fe
->ops
.tuner_ops
.get_rf_strength
)
539 fe
->ops
.tuner_ops
.get_rf_strength(fe
, signal_strength
);
544 /* calculate DS3000 snr value in dB */
545 static int ds3000_read_snr(struct dvb_frontend
*fe
, u16
*snr
)
547 struct ds3000_state
*state
= fe
->demodulator_priv
;
548 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
549 u8 snr_reading
, snr_value
;
550 u32 dvbs2_signal_reading
, dvbs2_noise_reading
, tmp
;
551 static const u16 dvbs_snr_tab
[] = { /* 20 x Table (rounded up) */
552 0x0000, 0x1b13, 0x2aea, 0x3627, 0x3ede, 0x45fe, 0x4c03,
553 0x513a, 0x55d4, 0x59f2, 0x5dab, 0x6111, 0x6431, 0x6717,
554 0x69c9, 0x6c4e, 0x6eac, 0x70e8, 0x7304, 0x7505
556 static const u16 dvbs2_snr_tab
[] = { /* 80 x Table (rounded up) */
557 0x0000, 0x0bc2, 0x12a3, 0x1785, 0x1b4e, 0x1e65, 0x2103,
558 0x2347, 0x2546, 0x2710, 0x28ae, 0x2a28, 0x2b83, 0x2cc5,
559 0x2df1, 0x2f09, 0x3010, 0x3109, 0x31f4, 0x32d2, 0x33a6,
560 0x3470, 0x3531, 0x35ea, 0x369b, 0x3746, 0x37ea, 0x3888,
561 0x3920, 0x39b3, 0x3a42, 0x3acc, 0x3b51, 0x3bd3, 0x3c51,
562 0x3ccb, 0x3d42, 0x3db6, 0x3e27, 0x3e95, 0x3f00, 0x3f68,
563 0x3fcf, 0x4033, 0x4094, 0x40f4, 0x4151, 0x41ac, 0x4206,
564 0x425e, 0x42b4, 0x4308, 0x435b, 0x43ac, 0x43fc, 0x444a,
565 0x4497, 0x44e2, 0x452d, 0x4576, 0x45bd, 0x4604, 0x4649,
566 0x468e, 0x46d1, 0x4713, 0x4755, 0x4795, 0x47d4, 0x4813,
567 0x4851, 0x488d, 0x48c9, 0x4904, 0x493f, 0x4978, 0x49b1,
568 0x49e9, 0x4a20, 0x4a57
571 dprintk("%s()\n", __func__
);
573 switch (c
->delivery_system
) {
575 snr_reading
= ds3000_readreg(state
, 0xff);
577 if (snr_reading
== 0)
580 if (snr_reading
> 20)
582 snr_value
= dvbs_snr_tab
[snr_reading
- 1] * 10 / 23026;
583 /* cook the value to be suitable for szap-s2
584 human readable output */
585 *snr
= snr_value
* 8 * 655;
587 dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__
,
591 dvbs2_noise_reading
= (ds3000_readreg(state
, 0x8c) & 0x3f) +
592 (ds3000_readreg(state
, 0x8d) << 4);
593 dvbs2_signal_reading
= ds3000_readreg(state
, 0x8e);
594 tmp
= dvbs2_signal_reading
* dvbs2_signal_reading
>> 1;
599 if (dvbs2_noise_reading
== 0) {
601 /* cook the value to be suitable for szap-s2
602 human readable output */
606 if (tmp
> dvbs2_noise_reading
) {
607 snr_reading
= tmp
/ dvbs2_noise_reading
;
608 if (snr_reading
> 80)
610 snr_value
= dvbs2_snr_tab
[snr_reading
- 1] / 1000;
611 /* cook the value to be suitable for szap-s2
612 human readable output */
613 *snr
= snr_value
* 5 * 655;
615 snr_reading
= dvbs2_noise_reading
/ tmp
;
616 if (snr_reading
> 80)
618 *snr
= -(dvbs2_snr_tab
[snr_reading
- 1] / 1000);
620 dprintk("%s: raw / cooked = 0x%02x / 0x%04x\n", __func__
,
630 /* read DS3000 uncorrected blocks */
631 static int ds3000_read_ucblocks(struct dvb_frontend
*fe
, u32
*ucblocks
)
633 struct ds3000_state
*state
= fe
->demodulator_priv
;
634 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
638 dprintk("%s()\n", __func__
);
640 switch (c
->delivery_system
) {
642 *ucblocks
= (ds3000_readreg(state
, 0xf5) << 8) |
643 ds3000_readreg(state
, 0xf4);
644 data
= ds3000_readreg(state
, 0xf8);
645 /* clear packet counters */
647 ds3000_writereg(state
, 0xf8, data
);
648 /* enable packet counters */
650 ds3000_writereg(state
, 0xf8, data
);
653 _ucblocks
= (ds3000_readreg(state
, 0xe2) << 8) |
654 ds3000_readreg(state
, 0xe1);
655 if (_ucblocks
> state
->prevUCBS2
)
656 *ucblocks
= _ucblocks
- state
->prevUCBS2
;
658 *ucblocks
= state
->prevUCBS2
- _ucblocks
;
659 state
->prevUCBS2
= _ucblocks
;
668 static int ds3000_set_tone(struct dvb_frontend
*fe
, enum fe_sec_tone_mode tone
)
670 struct ds3000_state
*state
= fe
->demodulator_priv
;
673 dprintk("%s(%d)\n", __func__
, tone
);
674 if ((tone
!= SEC_TONE_ON
) && (tone
!= SEC_TONE_OFF
)) {
675 printk(KERN_ERR
"%s: Invalid, tone=%d\n", __func__
, tone
);
679 data
= ds3000_readreg(state
, 0xa2);
681 ds3000_writereg(state
, 0xa2, data
);
685 dprintk("%s: setting tone on\n", __func__
);
686 data
= ds3000_readreg(state
, 0xa1);
689 ds3000_writereg(state
, 0xa1, data
);
692 dprintk("%s: setting tone off\n", __func__
);
693 data
= ds3000_readreg(state
, 0xa2);
695 ds3000_writereg(state
, 0xa2, data
);
702 static int ds3000_send_diseqc_msg(struct dvb_frontend
*fe
,
703 struct dvb_diseqc_master_cmd
*d
)
705 struct ds3000_state
*state
= fe
->demodulator_priv
;
709 /* Dump DiSEqC message */
710 dprintk("%s(", __func__
);
711 for (i
= 0 ; i
< d
->msg_len
;) {
712 dprintk("0x%02x", d
->msg
[i
]);
713 if (++i
< d
->msg_len
)
717 /* enable DiSEqC message send pin */
718 data
= ds3000_readreg(state
, 0xa2);
720 ds3000_writereg(state
, 0xa2, data
);
723 for (i
= 0; i
< d
->msg_len
; i
++)
724 ds3000_writereg(state
, 0xa3 + i
, d
->msg
[i
]);
726 data
= ds3000_readreg(state
, 0xa1);
727 /* clear DiSEqC message length and status,
728 enable DiSEqC message send */
730 /* set DiSEqC mode, modulation active during 33 pulses,
731 set DiSEqC message length */
732 data
|= ((d
->msg_len
- 1) << 3) | 0x07;
733 ds3000_writereg(state
, 0xa1, data
);
735 /* wait up to 150ms for DiSEqC transmission to complete */
736 for (i
= 0; i
< 15; i
++) {
737 data
= ds3000_readreg(state
, 0xa1);
738 if ((data
& 0x40) == 0)
743 /* DiSEqC timeout after 150ms */
745 data
= ds3000_readreg(state
, 0xa1);
748 ds3000_writereg(state
, 0xa1, data
);
750 data
= ds3000_readreg(state
, 0xa2);
753 ds3000_writereg(state
, 0xa2, data
);
758 data
= ds3000_readreg(state
, 0xa2);
761 ds3000_writereg(state
, 0xa2, data
);
766 /* Send DiSEqC burst */
767 static int ds3000_diseqc_send_burst(struct dvb_frontend
*fe
,
768 enum fe_sec_mini_cmd burst
)
770 struct ds3000_state
*state
= fe
->demodulator_priv
;
774 dprintk("%s()\n", __func__
);
776 data
= ds3000_readreg(state
, 0xa2);
778 ds3000_writereg(state
, 0xa2, data
);
781 if (burst
== SEC_MINI_A
)
782 /* Unmodulated tone burst */
783 ds3000_writereg(state
, 0xa1, 0x02);
784 else if (burst
== SEC_MINI_B
)
785 /* Modulated tone burst */
786 ds3000_writereg(state
, 0xa1, 0x01);
791 for (i
= 0; i
< 5; i
++) {
792 data
= ds3000_readreg(state
, 0xa1);
793 if ((data
& 0x40) == 0)
799 data
= ds3000_readreg(state
, 0xa1);
802 ds3000_writereg(state
, 0xa1, data
);
804 data
= ds3000_readreg(state
, 0xa2);
807 ds3000_writereg(state
, 0xa2, data
);
812 data
= ds3000_readreg(state
, 0xa2);
815 ds3000_writereg(state
, 0xa2, data
);
820 static void ds3000_release(struct dvb_frontend
*fe
)
822 struct ds3000_state
*state
= fe
->demodulator_priv
;
824 if (state
->config
->set_lock_led
)
825 state
->config
->set_lock_led(fe
, 0);
827 dprintk("%s\n", __func__
);
831 static const struct dvb_frontend_ops ds3000_ops
;
833 struct dvb_frontend
*ds3000_attach(const struct ds3000_config
*config
,
834 struct i2c_adapter
*i2c
)
836 struct ds3000_state
*state
;
839 dprintk("%s\n", __func__
);
841 /* allocate memory for the internal state */
842 state
= kzalloc(sizeof(*state
), GFP_KERNEL
);
846 state
->config
= config
;
848 state
->prevUCBS2
= 0;
850 /* check if the demod is present */
851 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
;
874 EXPORT_SYMBOL(ds3000_attach
);
876 static int ds3000_set_carrier_offset(struct dvb_frontend
*fe
,
877 s32 carrier_offset_khz
)
879 struct ds3000_state
*state
= fe
->demodulator_priv
;
882 tmp
= carrier_offset_khz
;
884 tmp
= (2 * tmp
+ DS3000_SAMPLE_RATE
) / (2 * DS3000_SAMPLE_RATE
);
889 ds3000_writereg(state
, 0x5f, tmp
>> 8);
890 ds3000_writereg(state
, 0x5e, tmp
& 0xff);
895 static int ds3000_set_frontend(struct dvb_frontend
*fe
)
897 struct ds3000_state
*state
= fe
->demodulator_priv
;
898 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
901 enum fe_status status
;
906 dprintk("%s() ", __func__
);
908 if (state
->config
->set_ts_params
)
909 state
->config
->set_ts_params(fe
, 0);
911 if (fe
->ops
.tuner_ops
.set_params
)
912 fe
->ops
.tuner_ops
.set_params(fe
);
914 /* ds3000 global reset */
915 ds3000_writereg(state
, 0x07, 0x80);
916 ds3000_writereg(state
, 0x07, 0x00);
917 /* ds3000 build-in uC reset */
918 ds3000_writereg(state
, 0xb2, 0x01);
919 /* ds3000 software reset */
920 ds3000_writereg(state
, 0x00, 0x01);
922 switch (c
->delivery_system
) {
924 /* initialise the demod in DVB-S mode */
925 for (i
= 0; i
< sizeof(ds3000_dvbs_init_tab
); i
+= 2)
926 ds3000_writereg(state
,
927 ds3000_dvbs_init_tab
[i
],
928 ds3000_dvbs_init_tab
[i
+ 1]);
929 value
= ds3000_readreg(state
, 0xfe);
932 ds3000_writereg(state
, 0xfe, value
);
935 /* initialise the demod in DVB-S2 mode */
936 for (i
= 0; i
< sizeof(ds3000_dvbs2_init_tab
); i
+= 2)
937 ds3000_writereg(state
,
938 ds3000_dvbs2_init_tab
[i
],
939 ds3000_dvbs2_init_tab
[i
+ 1]);
940 if (c
->symbol_rate
>= 30000000)
941 ds3000_writereg(state
, 0xfe, 0x54);
943 ds3000_writereg(state
, 0xfe, 0x98);
949 /* enable 27MHz clock output */
950 ds3000_writereg(state
, 0x29, 0x80);
951 /* enable ac coupling */
952 ds3000_writereg(state
, 0x25, 0x8a);
954 if ((c
->symbol_rate
< ds3000_ops
.info
.symbol_rate_min
) ||
955 (c
->symbol_rate
> ds3000_ops
.info
.symbol_rate_max
)) {
956 dprintk("%s() symbol_rate %u out of range (%u ... %u)\n",
957 __func__
, c
->symbol_rate
,
958 ds3000_ops
.info
.symbol_rate_min
,
959 ds3000_ops
.info
.symbol_rate_max
);
963 /* enhance symbol rate performance */
964 if ((c
->symbol_rate
/ 1000) <= 5000) {
965 value
= 29777 / (c
->symbol_rate
/ 1000) + 1;
968 ds3000_writereg(state
, 0xc3, 0x0d);
969 ds3000_writereg(state
, 0xc8, value
);
970 ds3000_writereg(state
, 0xc4, 0x10);
971 ds3000_writereg(state
, 0xc7, 0x0e);
972 } else if ((c
->symbol_rate
/ 1000) <= 10000) {
973 value
= 92166 / (c
->symbol_rate
/ 1000) + 1;
976 ds3000_writereg(state
, 0xc3, 0x07);
977 ds3000_writereg(state
, 0xc8, value
);
978 ds3000_writereg(state
, 0xc4, 0x09);
979 ds3000_writereg(state
, 0xc7, 0x12);
980 } else if ((c
->symbol_rate
/ 1000) <= 20000) {
981 value
= 64516 / (c
->symbol_rate
/ 1000) + 1;
982 ds3000_writereg(state
, 0xc3, value
);
983 ds3000_writereg(state
, 0xc8, 0x0e);
984 ds3000_writereg(state
, 0xc4, 0x07);
985 ds3000_writereg(state
, 0xc7, 0x18);
987 value
= 129032 / (c
->symbol_rate
/ 1000) + 1;
988 ds3000_writereg(state
, 0xc3, value
);
989 ds3000_writereg(state
, 0xc8, 0x0a);
990 ds3000_writereg(state
, 0xc4, 0x05);
991 ds3000_writereg(state
, 0xc7, 0x24);
994 /* normalized symbol rate rounded to the closest integer */
995 value
= (((c
->symbol_rate
/ 1000) << 16) +
996 (DS3000_SAMPLE_RATE
/ 2)) / DS3000_SAMPLE_RATE
;
997 ds3000_writereg(state
, 0x61, value
& 0x00ff);
998 ds3000_writereg(state
, 0x62, (value
& 0xff00) >> 8);
1000 /* co-channel interference cancellation disabled */
1001 ds3000_writereg(state
, 0x56, 0x00);
1003 /* equalizer disabled */
1004 ds3000_writereg(state
, 0x76, 0x00);
1006 /*ds3000_writereg(state, 0x08, 0x03);
1007 ds3000_writereg(state, 0xfd, 0x22);
1008 ds3000_writereg(state, 0x08, 0x07);
1009 ds3000_writereg(state, 0xfd, 0x42);
1010 ds3000_writereg(state, 0x08, 0x07);*/
1012 if (state
->config
->ci_mode
) {
1013 switch (c
->delivery_system
) {
1016 ds3000_writereg(state
, 0xfd, 0x80);
1019 ds3000_writereg(state
, 0xfd, 0x01);
1024 /* ds3000 out of software reset */
1025 ds3000_writereg(state
, 0x00, 0x00);
1026 /* start ds3000 build-in uC */
1027 ds3000_writereg(state
, 0xb2, 0x00);
1029 if (fe
->ops
.tuner_ops
.get_frequency
) {
1030 fe
->ops
.tuner_ops
.get_frequency(fe
, &frequency
);
1031 offset_khz
= frequency
- c
->frequency
;
1032 ds3000_set_carrier_offset(fe
, offset_khz
);
1035 for (i
= 0; i
< 30 ; i
++) {
1036 ds3000_read_status(fe
, &status
);
1037 if (status
& FE_HAS_LOCK
)
1046 static int ds3000_tune(struct dvb_frontend
*fe
,
1048 unsigned int mode_flags
,
1049 unsigned int *delay
,
1050 enum fe_status
*status
)
1053 int ret
= ds3000_set_frontend(fe
);
1060 return ds3000_read_status(fe
, status
);
1063 static enum dvbfe_algo
ds3000_get_algo(struct dvb_frontend
*fe
)
1065 struct ds3000_state
*state
= fe
->demodulator_priv
;
1067 if (state
->config
->set_lock_led
)
1068 state
->config
->set_lock_led(fe
, 0);
1070 dprintk("%s()\n", __func__
);
1071 return DVBFE_ALGO_HW
;
1075 * Initialise or wake up device
1077 * Power config will reset and load initial firmware if required
1079 static int ds3000_initfe(struct dvb_frontend
*fe
)
1081 struct ds3000_state
*state
= fe
->demodulator_priv
;
1084 dprintk("%s()\n", __func__
);
1086 ds3000_writereg(state
, 0x08, 0x01 | ds3000_readreg(state
, 0x08));
1089 /* Load the firmware if required */
1090 ret
= ds3000_firmware_ondemand(fe
);
1092 printk(KERN_ERR
"%s: Unable initialize firmware\n", __func__
);
1099 static const struct dvb_frontend_ops ds3000_ops
= {
1100 .delsys
= { SYS_DVBS
, SYS_DVBS2
},
1102 .name
= "Montage Technology DS3000",
1103 .frequency_min_hz
= 950 * MHz
,
1104 .frequency_max_hz
= 2150 * MHz
,
1105 .frequency_stepsize_hz
= 1011 * kHz
,
1106 .frequency_tolerance_hz
= 5 * MHz
,
1107 .symbol_rate_min
= 1000000,
1108 .symbol_rate_max
= 45000000,
1109 .caps
= FE_CAN_INVERSION_AUTO
|
1110 FE_CAN_FEC_1_2
| FE_CAN_FEC_2_3
| FE_CAN_FEC_3_4
|
1111 FE_CAN_FEC_4_5
| FE_CAN_FEC_5_6
| FE_CAN_FEC_6_7
|
1112 FE_CAN_FEC_7_8
| FE_CAN_FEC_AUTO
|
1113 FE_CAN_2G_MODULATION
|
1114 FE_CAN_QPSK
| FE_CAN_RECOVER
1117 .release
= ds3000_release
,
1119 .init
= ds3000_initfe
,
1120 .i2c_gate_ctrl
= ds3000_i2c_gate_ctrl
,
1121 .read_status
= ds3000_read_status
,
1122 .read_ber
= ds3000_read_ber
,
1123 .read_signal_strength
= ds3000_read_signal_strength
,
1124 .read_snr
= ds3000_read_snr
,
1125 .read_ucblocks
= ds3000_read_ucblocks
,
1126 .set_voltage
= ds3000_set_voltage
,
1127 .set_tone
= ds3000_set_tone
,
1128 .diseqc_send_master_cmd
= ds3000_send_diseqc_msg
,
1129 .diseqc_send_burst
= ds3000_diseqc_send_burst
,
1130 .get_frontend_algo
= ds3000_get_algo
,
1132 .set_frontend
= ds3000_set_frontend
,
1133 .tune
= ds3000_tune
,
1136 module_param(debug
, int, 0644);
1137 MODULE_PARM_DESC(debug
, "Activates frontend debugging (default:0)");
1139 MODULE_DESCRIPTION("DVB Frontend module for Montage Technology DS3000 hardware");
1140 MODULE_AUTHOR("Konstantin Dimitrov <kosio.dimitrov@gmail.com>");
1141 MODULE_LICENSE("GPL");
1142 MODULE_FIRMWARE(DS3000_DEFAULT_FIRMWARE
);