Skip to content

Commit

Permalink
V4L/DVB (8999): S2API: Reduce demod driver complexity by using a cach…
Browse files Browse the repository at this point in the history
…e sync

For demod drivers, we want a single tuning function (set_frontend) to have
access to the properly constructed dvb_frontend_parameters structure, or
the cache values - regardless of whether the legacy or new API is being used.

This cuts down on redundant code in the demod drivers and ensures the
tuning parameters are consistent regardless of the API entry type.

Signed-off-by: Steven Toth <stoth@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Steven Toth authored and Mauro Carvalho Chehab committed Oct 12, 2008
1 parent 65af619 commit ee33c52
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions drivers/media/dvb/dvb-core/dvb_frontend.c
Original file line number Diff line number Diff line change
Expand Up @@ -993,6 +993,42 @@ int is_legacy_delivery_system(fe_delivery_system_t s)
return 0;
}

/* Synchronise the legacy tuning parameters into the cache, so that demodulator
* drivers can use a single set_frontend tuning function, regardless of whether
* it's being used for the legacy or new API, reducing code and complexity.
*/
void dtv_property_cache_sync(struct dvb_frontend *fe, struct dvb_frontend_parameters *p)
{
struct dtv_frontend_properties *c = &fe->dtv_property_cache;

c->frequency = p->frequency;
c->inversion = p->inversion;

switch (fe->ops.info.type) {
case FE_QPSK:
c->symbol_rate = p->u.qpsk.symbol_rate;
c->fec_inner = p->u.qpsk.fec_inner;
break;
case FE_QAM:
c->symbol_rate = p->u.qam.symbol_rate;
c->fec_inner = p->u.qam.fec_inner;
c->modulation = p->u.qam.modulation;
break;
case FE_OFDM:
c->bandwidth = p->u.ofdm.bandwidth;
c->code_rate_HP = p->u.ofdm.code_rate_HP;
c->code_rate_LP = p->u.ofdm.code_rate_LP;
c->modulation = p->u.ofdm.constellation;
c->transmission_mode = p->u.ofdm.transmission_mode;
c->guard_interval = p->u.ofdm.guard_interval;
c->hierarchy = p->u.ofdm.hierarchy_information;
break;
case FE_ATSC:
c->modulation = p->u.vsb.modulation;
break;
}
}

int dtv_property_cache_submit(struct dvb_frontend *fe)
{

Expand Down Expand Up @@ -1548,6 +1584,8 @@ static int dvb_frontend_ioctl_legacy(struct inode *inode, struct file *file,
case FE_SET_FRONTEND: {
struct dvb_frontend_tune_settings fetunesettings;

dtv_property_cache_sync(fe, &fepriv->parameters);

if(fe->dtv_property_cache.state == DTV_TUNE) {
if (dvb_frontend_check_parameters(fe, &fepriv->parameters) < 0) {
err = -EINVAL;
Expand Down

0 comments on commit ee33c52

Please sign in to comment.