Apply polarization parameters even if a satellite number is not provided.
The polarization is fetched from struct dvb_v5_fe_parms directly and not from 
the
parameter DTV_POLARIZATION.
Since DTV_VOLTAGE and DTV_TONE are set according the polarization, those 
parameters
are removed from the props structures in dvb-v5-std.c.

Signed-off-by: Guy Martin <gms...@tuxicoman.be>

diff --git a/lib/include/dvb-fe.h b/lib/include/dvb-fe.h
index 7352218..571d4ac 100644
--- a/lib/include/dvb-fe.h
+++ b/lib/include/dvb-fe.h
@@ -104,7 +104,7 @@ struct dvb_v5_fe_parms {
        unsigned                        freq_bpf;
 
        /* Satellite specific stuff, used internally */
-       //enum dvb_sat_polarization       pol;
+       enum dvb_sat_polarization       pol;
        int                             high_band;
        unsigned                        diseqc_wait;
        unsigned                        freq_offset;
diff --git a/lib/libdvbv5/dvb-sat.c b/lib/libdvbv5/dvb-sat.c
index d00a09e..89f8e88 100644
--- a/lib/libdvbv5/dvb-sat.c
+++ b/lib/libdvbv5/dvb-sat.c
@@ -272,8 +272,7 @@ static int dvbsat_scr_odu_channel_change(struct 
dvb_v5_fe_parms *parms, struct d
 static int dvbsat_diseqc_set_input(struct dvb_v5_fe_parms *parms, uint16_t t)
 {
        int rc;
-       enum dvb_sat_polarization pol;
-       dvb_fe_retrieve_parm(parms, DTV_POLARIZATION,& pol);
+       enum dvb_sat_polarization pol = parms->pol;
        int pol_v = (pol == POLARIZATION_V) || (pol == POLARIZATION_R);
        int high_band = parms->high_band;
        int sat_number = parms->sat_number;
@@ -284,12 +283,6 @@ static int dvbsat_diseqc_set_input(struct dvb_v5_fe_parms 
*parms, uint16_t t)
 
        if (!lnb->rangeswitch) {
                /*
-                * Bandstacking and single LO may not be using DISEqC
-                */
-               if (sat_number < 0)
-                       return 0;
-
-               /*
                 * Bandstacking switches don't use 2 bands nor use
                 * DISEqC for setting the polarization. It also doesn't
                 * use any tone/tone burst
@@ -297,11 +290,6 @@ static int dvbsat_diseqc_set_input(struct dvb_v5_fe_parms 
*parms, uint16_t t)
                pol_v = 0;
                high_band = 1;
        } else {
-               if (sat_number < 0) {
-                       dvb_logerr("Need a satellite number for DISEqC");
-                       return -EINVAL;
-               }
-
                /* Adjust voltage/tone accordingly */
                if (parms->sat_number < 2) {
                        vol_high = pol_v ? 0 : 1;
@@ -310,32 +298,35 @@ static int dvbsat_diseqc_set_input(struct dvb_v5_fe_parms 
*parms, uint16_t t)
                }
        }
 
-       rc = dvb_fe_sec_tone(parms, SEC_TONE_OFF);
-       if (rc)
-               return rc;
-
        rc = dvb_fe_sec_voltage(parms, 1, vol_high);
        if (rc)
                return rc;
-       usleep(15 * 1000);
+       
+       if (parms->sat_number > 0) {
+               rc = dvb_fe_sec_tone(parms, SEC_TONE_OFF);
+               if (rc)
+                       return rc;
 
-       if (!t)
-               rc = dvbsat_diseqc_write_to_port_group(parms, &cmd, high_band,
-                                                      pol_v, sat_number);
-       else
-               rc = dvbsat_scr_odu_channel_change(parms, &cmd, high_band,
-                                                  pol_v, sat_number, t);
+               usleep(15 * 1000);
 
-       if (rc) {
-               dvb_logerr("sending diseq failed");
-               return rc;
-       }
-       usleep((15 + parms->diseqc_wait) * 1000);
+               if (!t)
+                       rc = dvbsat_diseqc_write_to_port_group(parms, &cmd, 
high_band,
+                                                              pol_v, 
sat_number);
+               else
+                       rc = dvbsat_scr_odu_channel_change(parms, &cmd, 
high_band,
+                                                          pol_v, sat_number, 
t);
 
-       rc = dvb_fe_diseqc_burst(parms, mini_b);
-       if (rc)
-               return rc;
-       usleep(15 * 1000);
+               if (rc) {
+                       dvb_logerr("sending diseq failed");
+                       return rc;
+               }
+               usleep((15 + parms->diseqc_wait) * 1000);
+
+               rc = dvb_fe_diseqc_burst(parms, mini_b);
+               if (rc)
+                       return rc;
+               usleep(15 * 1000);
+       }
 
        rc = dvb_fe_sec_tone(parms, tone_on ? SEC_TONE_ON : SEC_TONE_OFF);
 
@@ -350,8 +341,7 @@ static int dvbsat_diseqc_set_input(struct dvb_v5_fe_parms 
*parms, uint16_t t)
 int dvb_sat_set_parms(struct dvb_v5_fe_parms *parms)
 {
        const struct dvb_sat_lnb *lnb = parms->lnb;
-       enum dvb_sat_polarization pol;
-       dvb_fe_retrieve_parm(parms, DTV_POLARIZATION, &pol);
+       enum dvb_sat_polarization pol = parms->pol;
        uint32_t freq;
        uint16_t t = 0;
        /*uint32_t voltage = SEC_VOLTAGE_18;*/
diff --git a/lib/libdvbv5/dvb-v5-std.c b/lib/libdvbv5/dvb-v5-std.c
index 5a1854b..53809ef 100644
--- a/lib/libdvbv5/dvb-v5-std.c
+++ b/lib/libdvbv5/dvb-v5-std.c
@@ -125,9 +125,6 @@ const unsigned int sys_dvbs_props[] = {
        DTV_INVERSION,
        DTV_SYMBOL_RATE,
        DTV_INNER_FEC,
-       /*DTV_VOLTAGE,*/
-       /*DTV_TONE,*/
-       DTV_POLARIZATION,
        0
 };
 
@@ -136,12 +133,9 @@ const unsigned int sys_dvbs2_props[] = {
        DTV_INVERSION,
        DTV_SYMBOL_RATE,
        DTV_INNER_FEC,
-       /*DTV_VOLTAGE,*/
-       /*DTV_TONE,*/
        DTV_MODULATION,
        DTV_PILOT,
        DTV_ROLLOFF,
-       DTV_POLARIZATION,
        0
 };
 
@@ -150,8 +144,6 @@ const unsigned int sys_turbo_props[] = {
        DTV_INVERSION,
        DTV_SYMBOL_RATE,
        DTV_INNER_FEC,
-       DTV_VOLTAGE,
-       DTV_TONE,
        DTV_MODULATION,
        0
 };
@@ -161,7 +153,6 @@ const unsigned int sys_isdbs_props[] = {
        DTV_INVERSION,
        DTV_SYMBOL_RATE,
        DTV_INNER_FEC,
-       DTV_VOLTAGE,
        DTV_ISDBS_TS_ID_LEGACY,
        0
 };
-- 
1.8.1.5


--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to