On Tuesday 27 February 2007, Markus Rechberger wrote: > Hi guys, > > since I really want to get that xc3028 story done I propose to add > some changes to the dvb framework which would allow to support loading > tuner modules from v4l and dvb without having a real dependency of > each other. > The interface I aim at uses almost the same structure as dvb_tuner_ops. > > So to point it out more clearly: > > I'd like to replace or modify: > struct dvb_tuner_ops { > > struct dvb_tuner_info info; > > int (*release)(struct dvb_frontend *fe); > int (*init)(struct dvb_frontend *fe); > int (*sleep)(struct dvb_frontend *fe); > > /** This is for simple PLLs - set all parameters in one go. */ > int (*set_params)(struct dvb_frontend *fe, struct > dvb_frontend_parameters *p); > > /** This is support for demods like the mt352 - fills out the > supplied buffer with what to write. */ > int (*calc_regs)(struct dvb_frontend *fe, struct > dvb_frontend_parameters *p, u8 *buf, int buf_len); > > int (*get_frequency)(struct dvb_frontend *fe, u32 *frequency); > int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth); > > #define TUNER_STATUS_LOCKED 1 > int (*get_status)(struct dvb_frontend *fe, u32 *status); > > /** These are provided seperately from set_params in order to > facilitate silicon > * tuners which require sophisticated tuning loops, > controlling each parameter seperately. */ > int (*set_frequency)(struct dvb_frontend *fe, u32 frequency); > int (*set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth); > }; > > with: > struct v4l_dvb_tuner { > /* wrapper */ > void *priv; /* some privat data for internal use */ > void *dev; /* v4l private data for tuner-core */ > struct dvb_frontend *fe; /* dvb_frontend, for dvb only > drivers, internal use */ > > int (*ioctl)(struct v4l_dvb_tuner *dev, int cmd, int arg); > struct tuner_info info; > int (*release)(struct v4l_dvb_tuner *dev); > int (*init)(struct v4l_dvb_tuner *dev); > int (*sleep)(struct v4l_dvb_tuner *dev); > > /** This is for simple PLLs - set all parameters in one go. */ > int (*set_params)(struct v4l_dvb_tuner *dev, struct > tuner_parameters *p); > > /** This is support for demods like the mt352 - fills out the > supplied buffer with what to write. */ > int (*calc_regs)(struct v4l_dvb_tuner *dev, struct > tuner_parameters *p, u8 *buf, int buf_len); > > int (*get_frequency)(struct v4l_dvb_tuner *dev, u32 *frequency); > int (*get_bandwidth)(struct v4l_dvb_tuner *dev, u32 *bandwidth); > > #define TUNER_STATUS_LOCKED 1 > int (*get_status)(struct v4l_dvb_tuner *dev, u32 *status); > > /** These are provided seperately from set_params in order to > facilitate silicon > * tuners which require sophisticated tuning loops, > controlling each parameter seperately. */ > int (*set_frequency)(struct v4l_dvb_tuner *dev, u32 frequency); > int (*set_bandwidth)(struct v4l_dvb_tuner *dev, u32 bandwidth); > > int (*set_mode)(struct v4l_dvb_tuner *dev, struct > tuner_parameters *params); > }; > > tuner_parameters is an extended version of dvb_frontend_params > > struct dvb_frontend_parameters { > __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */ > /* intermediate frequency in kHz for QPSK */ > fe_spectral_inversion_t inversion; > union { > struct dvb_qpsk_parameters qpsk; > struct dvb_qam_parameters qam; > struct dvb_ofdm_parameters ofdm; > struct dvb_vsb_parameters vsb; > } u; > }; > > vs: > > struct tuner_parameters { > __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */ > /* intermediate frequency in kHz for QPSK */ > enum v4l2_tuner_type type; > v4l2_std_id std; > fe_spectral_inversion_t inversion; > union { > struct dvb_qpsk_parameters qpsk; > struct dvb_qam_parameters qam; > struct dvb_ofdm_parameters ofdm; > struct dvb_vsb_parameters vsb; > } u; > }; > > for not breaking userspace we can use an internal converter for that > format just like: > #define V4L_OPS(i) ({ \ > struct tuner_parameters __o; \ > __o.frequency = i->frequency; \ > __o.inversion = i->inversion; \ > .... > &__o; \ > }) > > this seems to be a good approach for hybrid devices > dvb only silicon tuners could still access dvb_frontend internally, > hybrid tuners have to avoid this since the structure since it wouldn't > be fully initialized. > So what do you guys think about that? > > I already have some code which does this and it works fine. > So I'm looking for some feedback/suggestions here > > thanks, > Markus > > _______________________________________________ > linux-dvb mailing list > linux-dvb@xxxxxxxxxxx > http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb > hi, as already told on irc (summary of one hour talk) i am against this patch as this sort of thing could be implemented in the same way like e.g. saa7134 this implements your changes to be unneccessary. best regards marcel _______________________________________________ linux-dvb mailing list linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb