[PATCH] DiSEqC bug fixed for stv0288 based interfaces

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Fixed problem with DiSEqC communication. The message was wrongly modulated, 
so the DiSEqC switch was not work.

This patch fixes DiSEqC messages, simple tone burst and tone on/off. 
I verified it with osciloscope against the DiSEqC documentation.

Interface: PCI DVB-S TV tuner TeVii S420
Kernel: 2.6.32-24-generic (UBUNTU 10.4)

Signed-off-by: Josef Pavlik <josef@xxxxxxxxx>




diff --git a/drivers/media/dvb/frontends/stv0288.c b/drivers/media/dvb/frontends/stv0288.c
index 2930a5d..6a32535 100644
--- a/drivers/media/dvb/frontends/stv0288.c
+++ b/drivers/media/dvb/frontends/stv0288.c
@@ -6,6 +6,8 @@
        Copyright (C) 2008 Igor M. Liplianin <liplianin@xxxxx>
                Removed stb6000 specific tuner code and revised some
                procedures.
+       2010-09-01 Josef Pavlik <josef@xxxxxxxxx>
+               Fixed diseqc_msg, diseqc_burst and set_tone problems

        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
@@ -156,14 +158,13 @@ static int stv0288_send_diseqc_msg(struct dvb_frontend *fe,

        stv0288_writeregI(state, 0x09, 0);
        msleep(30);
-       stv0288_writeregI(state, 0x05, 0x16);
+       stv0288_writeregI(state, 0x05, 0x12); /* modulated mode, single shot */

        for (i = 0; i < m->msg_len; i++) {
                if (stv0288_writeregI(state, 0x06, m->msg[i]))
                        return -EREMOTEIO;
-               msleep(12);
        }
-
+       msleep(m->msg_len*12);
        return 0;
 }

@@ -174,13 +175,14 @@ static int stv0288_send_diseqc_burst(struct dvb_frontend *fe,

        dprintk("%s\n", __func__);

-       if (stv0288_writeregI(state, 0x05, 0x16))/* burst mode */
+       if (stv0288_writeregI(state, 0x05, 0x03)) /* "simple tone burst" mode, single shot */
                return -EREMOTEIO;

        if (stv0288_writeregI(state, 0x06, burst == SEC_MINI_A ? 0x00 : 0xff))
                return -EREMOTEIO;

-       if (stv0288_writeregI(state, 0x06, 0x12))
+       msleep(15);
+       if (stv0288_writeregI(state, 0x05, 0x12))
                return -EREMOTEIO;

        return 0;
@@ -192,18 +194,19 @@ static int stv0288_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)

        switch (tone) {
        case SEC_TONE_ON:
-               if (stv0288_writeregI(state, 0x05, 0x10))/* burst mode */
+               if (stv0288_writeregI(state, 0x05, 0x10))/* burst mode, continuous carrier */
                        return -EREMOTEIO;
-               return stv0288_writeregI(state, 0x06, 0xff);
+               break;

        case SEC_TONE_OFF:
-               if (stv0288_writeregI(state, 0x05, 0x13))/* burst mode */
+               if (stv0288_writeregI(state, 0x05, 0x12))/* burst mode off*/
                        return -EREMOTEIO;
-               return stv0288_writeregI(state, 0x06, 0x00);
+               break;

        default:
                return -EINVAL;
        }
+       return 0;
 }

 static u8 stv0288_inittab[] = {
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux