From a7019a3d0964886ecf475cef0970064ef8deda6b Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Sun, 16 Feb 2014 18:57:17 +0900 Subject: [PATCH] dvb-fe: Use a separate call to change LNA settings 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 --- lib/libdvbv5/dvb-fe.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/libdvbv5/dvb-fe.c b/lib/libdvbv5/dvb-fe.c index 36da95d..28e6354 100644 --- a/lib/libdvbv5/dvb-fe.c +++ b/lib/libdvbv5/dvb-fe.c @@ -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 */ -- 2.7.4