All of lore.kernel.org
 help / color / mirror / Atom feed
From: "André Roth" <neolynx@gmail.com>
To: linux-media@vger.kernel.org
Subject: Re: [PATCH 5/6] libdvbv5: Use a temporary copy of the dvb parameters when tuning
Date: Tue, 2 Jul 2013 20:31:19 +0200	[thread overview]
Message-ID: <20130702203119.6985d8d1@myon.exnihilo> (raw)
In-Reply-To: <42ac663a85e646b5594c57ce1c61ee492c9a0a1f.1371561676.git.gmsoft@tuxicoman.be>


Acked-by: André Roth <neolynx@gmail.com>

On Tue, 18 Jun 2013 16:19:08 +0200
Guy Martin <gmsoft@tuxicoman.be> wrote:
> This patch copies the parms provided into a temporary buffer. This buffer will then
> be used for any modification that needs to be performed. It makes the function
> dvb_fe_set_parms() thread-safe. Also, since the DTV_FREQUENCY is not modified, it fixes
> a bug where dvbv5-scan retrieves the frequency from the parms and write it to the
> channel file.
> 
> Signed-off-by: Guy Martin <gmsoft@tuxicoman.be>
> ---
>  lib/include/dvb-sat.h  |  1 -
>  lib/libdvbv5/dvb-fe.c  | 71 ++++++++++++++++++++++----------------------------
>  lib/libdvbv5/dvb-sat.c | 11 --------
>  3 files changed, 31 insertions(+), 52 deletions(-)
> 
> diff --git a/lib/include/dvb-sat.h b/lib/include/dvb-sat.h
> index 23df228..8b20c9e 100644
> --- a/lib/include/dvb-sat.h
> +++ b/lib/include/dvb-sat.h
> @@ -49,7 +49,6 @@ int print_lnb(int i);
>  void print_all_lnb(void);
>  const struct dvb_sat_lnb *dvb_sat_get_lnb(int i);
>  int dvb_sat_set_parms(struct dvb_v5_fe_parms *parms);
> -int dvb_sat_get_parms(struct dvb_v5_fe_parms *parms);
>  
>  #ifdef __cplusplus
>  }
> diff --git a/lib/libdvbv5/dvb-fe.c b/lib/libdvbv5/dvb-fe.c
> index b786a85..408423f 100644
> --- a/lib/libdvbv5/dvb-fe.c
> +++ b/lib/libdvbv5/dvb-fe.c
> @@ -551,7 +551,7 @@ int dvb_fe_get_parms(struct dvb_v5_fe_parms *parms)
>  			       delivery_system_name[parms->current_sys]);
>  			dvb_fe_prt_parms(parms);
>  		}
> -		goto ret;
> +		return 0;
>  	}
>  	/* DVBv3 call */
>  	if (ioctl(parms->fd, FE_GET_FRONTEND, &v3_parms) == -1) {
> @@ -592,32 +592,27 @@ int dvb_fe_get_parms(struct dvb_v5_fe_parms *parms)
>  		return -EINVAL;
>  	}
>  
> -ret:
> -	/* For satellite, need to recover from LNBf IF frequency */
> -	if (dvb_fe_is_satellite(parms->current_sys))
> -		return dvb_sat_get_parms(parms);
> -
>  	return 0;
>  }
>  
>  int dvb_fe_set_parms(struct dvb_v5_fe_parms *parms)
>  {
> +	/* Use a temporary copy of the parameters so we can safely perform
> +	 * adjustments for satellite */
> +	struct dvb_v5_fe_parms tmp_parms = *parms;
> +
>  	struct dtv_properties prop;
>  	struct dvb_frontend_parameters v3_parms;
> -	uint32_t freq;
>  	uint32_t bw;
>  
> -	struct dtv_property fe_prop[DTV_MAX_COMMAND];
> -
> -	if (dvb_fe_is_satellite(parms->current_sys)) {
> -		dvb_fe_retrieve_parm(parms, DTV_FREQUENCY, &freq);
> -		dvb_sat_set_parms(parms);
> -	}
> +	if (dvb_fe_is_satellite(tmp_parms.current_sys))
> +		dvb_sat_set_parms(&tmp_parms);
>  
> -	int n = dvb_copy_fe_props(parms->dvb_prop, parms->n_props, fe_prop);
> +	/* 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);
>  
> -	prop.props = fe_prop;
> -	prop.num = n;
> +	prop.props = tmp_parms.dvb_prop;
> +	prop.num = tmp_parms.n_props;
>  	prop.props[prop.num].cmd = DTV_TUNE;
>  	prop.num++;
>  
> @@ -628,53 +623,49 @@ int dvb_fe_set_parms(struct dvb_v5_fe_parms *parms)
>  				dvb_fe_prt_parms(parms);
>  			return -1;
>  		}
> -		goto ret;
> +		return 0;
>  	}
>  	/* DVBv3 call */
>  
> -	dvb_fe_retrieve_parm(parms, DTV_FREQUENCY, &v3_parms.frequency);
> -	dvb_fe_retrieve_parm(parms, DTV_INVERSION, &v3_parms.inversion);
> -	switch (parms->current_sys) {
> +	dvb_fe_retrieve_parm(&tmp_parms, DTV_FREQUENCY, &v3_parms.frequency);
> +	dvb_fe_retrieve_parm(&tmp_parms, DTV_INVERSION, &v3_parms.inversion);
> +	switch (tmp_parms.current_sys) {
>  	case SYS_DVBS:
> -		dvb_fe_retrieve_parm(parms, DTV_SYMBOL_RATE, &v3_parms.u.qpsk.symbol_rate);
> -		dvb_fe_retrieve_parm(parms, DTV_INNER_FEC, &v3_parms.u.qpsk.fec_inner);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_SYMBOL_RATE, &v3_parms.u.qpsk.symbol_rate);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_INNER_FEC, &v3_parms.u.qpsk.fec_inner);
>  		break;
>  	case SYS_DVBC_ANNEX_AC:
> -		dvb_fe_retrieve_parm(parms, DTV_SYMBOL_RATE, &v3_parms.u.qam.symbol_rate);
> -		dvb_fe_retrieve_parm(parms, DTV_INNER_FEC, &v3_parms.u.qam.fec_inner);
> -		dvb_fe_retrieve_parm(parms, DTV_MODULATION, &v3_parms.u.qam.modulation);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_SYMBOL_RATE, &v3_parms.u.qam.symbol_rate);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_INNER_FEC, &v3_parms.u.qam.fec_inner);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_MODULATION, &v3_parms.u.qam.modulation);
>  		break;
>  	case SYS_ATSC:
>  	case SYS_ATSCMH:
>  	case SYS_DVBC_ANNEX_B:
> -		dvb_fe_retrieve_parm(parms, DTV_MODULATION, &v3_parms.u.vsb.modulation);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_MODULATION, &v3_parms.u.vsb.modulation);
>  		break;
>  	case SYS_DVBT:
>  		for (bw = 0; fe_bandwidth_name[bw] != 0; bw++) {
>  			if (fe_bandwidth_name[bw] == v3_parms.u.ofdm.bandwidth)
>  				break;
>  		}
> -		dvb_fe_retrieve_parm(parms, DTV_BANDWIDTH_HZ, &bw);
> -		dvb_fe_retrieve_parm(parms, DTV_CODE_RATE_HP, &v3_parms.u.ofdm.code_rate_HP);
> -		dvb_fe_retrieve_parm(parms, DTV_CODE_RATE_LP, &v3_parms.u.ofdm.code_rate_LP);
> -		dvb_fe_retrieve_parm(parms, DTV_MODULATION, &v3_parms.u.ofdm.constellation);
> -		dvb_fe_retrieve_parm(parms, DTV_TRANSMISSION_MODE, &v3_parms.u.ofdm.transmission_mode);
> -		dvb_fe_retrieve_parm(parms, DTV_GUARD_INTERVAL, &v3_parms.u.ofdm.guard_interval);
> -		dvb_fe_retrieve_parm(parms, DTV_HIERARCHY, &v3_parms.u.ofdm.hierarchy_information);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_BANDWIDTH_HZ, &bw);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_CODE_RATE_HP, &v3_parms.u.ofdm.code_rate_HP);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_CODE_RATE_LP, &v3_parms.u.ofdm.code_rate_LP);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_MODULATION, &v3_parms.u.ofdm.constellation);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_TRANSMISSION_MODE, &v3_parms.u.ofdm.transmission_mode);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_GUARD_INTERVAL, &v3_parms.u.ofdm.guard_interval);
> +		dvb_fe_retrieve_parm(&tmp_parms, DTV_HIERARCHY, &v3_parms.u.ofdm.hierarchy_information);
>  		break;
>  	default:
>  		return -EINVAL;
>  	}
> -	if (ioctl(parms->fd, FE_SET_FRONTEND, &v3_parms) == -1) {
> +	if (ioctl(tmp_parms.fd, FE_SET_FRONTEND, &v3_parms) == -1) {
>  		dvb_perror("FE_SET_FRONTEND");
> -		if (parms->verbose)
> -			dvb_fe_prt_parms(parms);
> +		if (tmp_parms.verbose)
> +			dvb_fe_prt_parms(&tmp_parms);
>  		return -1;
>  	}
> -ret:
> -	/* For satellite, need to recover from LNBf IF frequency */
> -	if (dvb_fe_is_satellite(parms->current_sys))
> -		dvb_fe_store_parm(parms, DTV_FREQUENCY, freq);
>  
>  	return 0;
>  }
> diff --git a/lib/libdvbv5/dvb-sat.c b/lib/libdvbv5/dvb-sat.c
> index f84b5a4..3cbcf03 100644
> --- a/lib/libdvbv5/dvb-sat.c
> +++ b/lib/libdvbv5/dvb-sat.c
> @@ -394,17 +394,6 @@ ret:
>  	return rc;
>  }
>  
> -int dvb_sat_get_parms(struct dvb_v5_fe_parms *parms)
> -{
> -	uint32_t freq = 0;
> -
> -	dvb_fe_retrieve_parm(parms, DTV_FREQUENCY, &freq);
> -	freq = abs(freq + parms->freq_offset);
> -	dvb_fe_store_parm(parms, DTV_FREQUENCY, freq);
> -
> -	return 0;
> -}
> -
>  const char *dvbsat_polarization_name[5] = {
>  	"OFF",
>  	"H",

  reply	other threads:[~2013-07-02 18:31 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-18 14:19 [PATCH v2 0/6] v4l-utils: v4l-utils: Fix satellite support in dvbv5-{scan,zap} tools Guy Martin
2013-06-18 14:19 ` [PATCH v2 1/6] libdvbv5: Remove buggy parsing of extra DTV_foo parameters Guy Martin
2013-07-02 18:28   ` André Roth
2013-06-18 14:19 ` [PATCH 2/6] libdvbv5: Add parsing of POLARIZATION Guy Martin
2013-07-02 18:29   ` André Roth
2013-06-18 14:19 ` [PATCH 3/6] libdvbv5: Export dvb_fe_is_satellite() Guy Martin
2013-07-02 18:29   ` André Roth
2013-06-18 14:19 ` [PATCH 4/6] libdvbv5: Fix satellite handling and apply polarization parameter to the frontend Guy Martin
2013-07-02 18:30   ` André Roth
2013-06-18 14:19 ` [PATCH 5/6] libdvbv5: Use a temporary copy of the dvb parameters when tuning Guy Martin
2013-07-02 18:31   ` André Roth [this message]
2013-06-18 14:19 ` [PATCH 6/6] dvbv5-zap: Parse the LNB from the channel file Guy Martin
2013-07-02 18:31   ` André Roth
2013-07-02 18:04 ` [PATCH v2 0/6] v4l-utils: v4l-utils: Fix satellite support in dvbv5-{scan,zap} tools André Roth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130702203119.6985d8d1@myon.exnihilo \
    --to=neolynx@gmail.com \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.