[Prev] Thread [Next]  |  [Prev] Date [Next]

Re: [ivtv-devel] [PATCH] tuner-simple, tveeprom: Add support for the FQ1216LME MK3 Mauro Carvalho Chehab Fri Jun 05 18:00:22 2009

Em Fri, 05 Jun 2009 17:52:12 -0400
Andy Walls <[EMAIL PROTECTED]> escreveu:

> Hi,
> This patch:
> 1. adds explicit support for the FQ1216LME MK3
> 2. points the tveeprom module to the FQ1216LME MK3 entry for EEPROMs
> claiming FQ1216LME MK3 and MK5.
> 3. refactors some code in simple_post_tune() because
> a. I needed to set the Auxillary Byte, as did TUNER_LG_TDVS_H06XF, so I
> could set the TUA6030 TOP to external AGC per the datasheet.
> b. I wanted to do fast tuning while managing PLL phase noise, like the
> TUNER_MICROTUNE_4042FI5 was already doing.
> Hermann & Dmitri,
> I think what is done for setting the charge pump current for the
> TUNER_MICROTUNE_4042FI5 & FQ1216LME_MK3 in this patch is better than
> fixing the control byte to a constant value of 0xce.

The idea seems good, and it is probably interesting to do it also with other

On a quick view to see the code, however, one part of the code popped up on my 

> +static int simple_wait_pll_lock(struct dvb_frontend *fe, unsigned int 
> timeout,
> +                             unsigned long interval)
> +{
> +     unsigned long expire;
> +     int locked = 0;
> +
> +     for (expire = jiffies + msecs_to_jiffies(timeout);
> +          !time_after(jiffies, expire);
> +          udelay(interval)) {
> +
> +             if (tuner_islocked(tuner_read_status(fe))) {
> +                     locked = 1;
> +                     break;
> +             }
> +     }
> +     return locked;
> +}

It is better to use a do {} while construct in situations like above, to make
the loop easier to read.

Yet, I don't like the idea of using udelay to wait for up a long interval like
on the above code  - you can delay it up to max(unsigned int) with the above 

Holding CPU for a long period of time is really a very bad idea. Instead, you
should use, for example, a waitqueue for it, like:

static int simple_wait_pll_lock(struct dvb_frontend *fe, unsigned int timeout)
        wait_event_timeout(wait, tuner_islocked(tuner_read_status(fe)), 
        return (tuner_islocked(tuner_read_status(fe)));

This is cleaner, and, as wait_event_timeout() will call schedule(), the CPU will
be released to deal with other tasks or to go to low power consumption level,
saving some power (especially important on notebooks) and causing penalty on
machine's performance


ivtv-devel mailing list