[linux-dvb] PATCH: Generic FE_DISHNETWORK_SEND_LEGACY_CMD support
Johannes Stezenbach
js at linuxtv.org
Fri Sep 23 04:06:19 CEST 2005
On Thu, Sep 22, 2005 NooneImportant wrote:
> I had been requested to add support for the legacy dish-network switches for
> other frontends besides the stv0299. This patch does this using set_voltage
> commands in the case that fe->ops->dishnetwork_send_legacy_command isn't
> defined (as I've said before, at least the stv0299 based budget cards
> respond too slowly to a set_voltage for thegeneric method to work). this
> will likely not work with all frontends, but hopefully will work with
> enough.
>
> I also moved the timing functions into dvb_frontend.c so that we don't need
> duplicate copies for each frontend.
If you add dishnetwork_send_legacy_command code to dvb_frontend,
shouldn't stv0299 just use it, too? Otherwise it *is* a duplication
of code, isn't it?
Also, please add your Signed-off-by: if you want the patch to be
applied.
There are a few nits:
> Index: linux/drivers/media/dvb/dvb-core/dvb_frontend.c
> ===================================================================
> RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/dvb-core/dvb_frontend.c,v
> retrieving revision 1.112
> diff -u -r1.112 dvb_frontend.c
> --- linux/drivers/media/dvb/dvb-core/dvb_frontend.c 1 Jul 2005 23:20:19 -0000 1.112
> +++ linux/drivers/media/dvb/dvb-core/dvb_frontend.c 22 Sep 2005 17:15:13 -0000
> @@ -577,6 +577,36 @@
> fepriv->thread_pid);
> }
>
> +inline s32 dvb_frontend_calc_usec_delay (struct timeval lasttime, struct timeval curtime)
> +{
> + return ((curtime.tv_usec < lasttime.tv_usec) ?
> + 1000000 - lasttime.tv_usec + curtime.tv_usec :
> + curtime.tv_usec - lasttime.tv_usec);
> +}
shouldn't this be called something like timeval_usec_diff()? It isn't
dvb_frontend specific. BTW, it doesn't look like you need usec
precision, so it would be better to use msec units.
Also: No space between function name and opening parenthesis (repeats
all over).
> +void dvb_frontend_sleep_until (struct timeval *waketime, u32 add_usec)
> +{
> + struct timeval lasttime;
> + s32 delta, newdelta;
> +
> + waketime->tv_usec += add_usec;
> + if (waketime->tv_usec >= 1000000) {
> + waketime->tv_usec -= 1000000;
> + waketime->tv_sec++;
> + }
You might as well add timeval_usec_add().
> +
> + do_gettimeofday (&lasttime);
> + delta = dvb_frontend_calc_usec_delay (lasttime, *waketime);
> + if (delta > 2500) {
> + msleep ((delta - 1500) / 1000);
> + do_gettimeofday (&lasttime);
> + newdelta = dvb_frontend_calc_usec_delay (lasttime, *waketime);
> + delta = (newdelta > delta) ? 0 : newdelta;
> + }
> + if (delta > 0)
> + udelay (delta);
> +}
dvb_frontend_sleep_until is so idosyncratic, it needs at least a
comment. And of course it will fail to meet its deadline when system
load is high enough, or with HZ == 100. But I guess there's nothing
one ca do about it.
> static int dvb_frontend_start(struct dvb_frontend *fe)
> {
> int ret;
> @@ -728,6 +758,41 @@
> err = fe->ops->dishnetwork_send_legacy_command(fe, (unsigned int) parg);
> fepriv->state = FESTATE_DISEQC;
> fepriv->status = 0;
> + } else if (fe->ops->set_voltage) {
This also needs a comment, and if possible a reference to the
dishnetwork spec.
> + for (i=0; i<9; i++) {
Please add space between operators.
Otherwise patch looks OK.
Johannes
More information about the linux-dvb
mailing list