On 4/15/06, Alan Nisota <alannisota@xxxxxxxxx> wrote: > The issue I have is > that set_frontend is called from dvb_frontend_swzigzag_autotune and > dvb_frontend_swzigzag both of which examine fepriv->parameters. Do > you expect to update these functions to use fepriv->parameters_new (I > assume so)? if so, how do you know when to use one vs the other? I made some assumptions about your intentions and completed the implementation in dvb_frontend.c. I then finished off the driver, but I haven't been able to test yet, as I still need to update mythtv to support the new ioctls. I hope this is approximately what you intended. Index: v4l-dvb/linux/drivers/media/dvb/dvb-core/dvb_frontend.c =================================================================== --- v4l-dvb.orig/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2006-04-15 13:07:55.000000000 -0700 +++ v4l-dvb/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2006-04-15 13:07:47.000000000 -0700 @@ -272,7 +272,7 @@ /* are we using autoinversion? */ autoinversion = ((!(fe->ops->info.caps & FE_CAN_INVERSION_AUTO)) && ((fepriv->current_standard_set && - fepriv->parameters_new.inversion == INVERSION_AUTO) ||; + fepriv->parameters_new.inversion == INVERSION_AUTO) || (! fepriv->current_standard_set && fepriv->parameters.inversion == INVERSION_AUTO))); @@ -996,12 +996,22 @@ break; } + if (fepriv->parameters_new.u) + kfree(fepriv->parameters_new.u); + castedparg = (struct dvb_frontend_parameters_new *)parg; memcpy (&fepriv->parameters_new, parg, sizeof (struct dvb_frontend_parameters_new)); memset(&fetunesettings, 0, sizeof(struct dvb_frontend_tune_settings)); + fepriv->parameters_new.u = (struct frontend_parameters_union *) kmalloc(castedparg->size, GFP_KERNEL); + if ( !fepriv->parameters_new.u ) { + + err = -ENOMEM; + break; + } + memcpy(fepriv->parameters_new.u, castedparg->u, castedparg->size); /* be sure struct union pointer is set - even if it is NULL */ fetunesettings.parameters_new.u = (struct frontend_parameters_union *) kmalloc(castedparg->size, GFP_KERNEL); if ( !fetunesettings.parameters_new.u ) { @@ -1066,7 +1076,13 @@ printk("dvb-core: FE_ATSC not handled yet.\n"); break; case FE_DVB_S2: - printk("dvb-core: FE_DVB_S2 not handled yet.\n"); + if (fepriv->current_standard != FE_DVB_S2) { + err = -EINVAL; + break; + } + fepriv->min_delay = HZ/20; + fepriv->step_size = fepriv->parameters_new.u->qpsk2.symbol_rate / 16000; + fepriv->max_drift = fepriv->parameters_new.u->qpsk2.symbol_rate / 2000; break; } _______________________________________________ linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb