dvb-fe: Use a separate call to change LNA settings
authorMauro Carvalho Chehab <m.chehab@samsung.com>
Sun, 16 Feb 2014 09:57:17 +0000 (18:57 +0900)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Sun, 16 Feb 2014 09:57:17 +0000 (18:57 +0900)
Setting the LNA mode may fail, as this is not implemented on
all drivers. So, move this into a separate call, and don't
make it a fatal error.

Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
lib/libdvbv5/dvb-fe.c

index 36da95d..28e6354 100644 (file)
@@ -631,12 +631,23 @@ int dvb_fe_set_parms(struct dvb_v5_fe_parms *parms)
        /* Filter out any user DTV_foo property such as DTV_POLARIZATION */
        tmp_parms.n_props = dvb_copy_fe_props(tmp_parms.dvb_prop, tmp_parms.n_props, tmp_parms.dvb_prop);
 
+       if (parms->lna != LNA_AUTO && !parms->legacy_fe) {
+               memset(&prop, 0, sizeof(prop));
+               prop.props = tmp_parms.dvb_prop;
+
+               prop.props[0].cmd = DTV_LNA;
+               prop.props[0].u.data = parms->lna;
+               prop.num = 1;
+               if (ioctl(parms->fd, FE_SET_PROPERTY, &prop) == -1) {
+                       dvb_perror("Setting LNA");
+                       parms->lna = LNA_AUTO;
+               } else if (parms->lna != LNA_AUTO && parms->verbose)
+                       dvb_logdbg("LNA is %s", parms->lna ? "ON" : "OFF");
+       }
+
        memset(&prop, 0, sizeof(prop));
        prop.props = tmp_parms.dvb_prop;
        prop.num = tmp_parms.n_props;
-       prop.props[prop.num].cmd = DTV_LNA;
-       prop.props[prop.num].u.data = parms->lna;
-       prop.num++;
        prop.props[prop.num].cmd = DTV_TUNE;
        prop.num++;
 
@@ -647,9 +658,6 @@ int dvb_fe_set_parms(struct dvb_v5_fe_parms *parms)
                                dvb_fe_prt_parms(parms);
                        return -1;
                }
-               if (parms->lna != LNA_AUTO && parms->verbose)
-                       dvb_logdbg("LNA is %s", parms->lna ? "ON" : "OFF");
-
                return 0;
        }
        /* DVBv3 call */