[linux-dvb] [Patch] Added Nova-S-Plus and Nova-SE2 DVB-S support

Johannes Stezenbach js at linuxtv.org
Tue Nov 29 20:35:57 CET 2005


Steve Toth wrote:
> Johannes Stezenbach wrote:
> >Let's quote from your patch:
> >
> >+       timeout=0;
> >+       /* write the msb 8 bits, wait for the send to be completed */
> >+       cx24123_writereg(state, 0x22, (data>>16) & 0xff);
> >+       while ( ( cx24123_readreg(state, 0x20) & 0x40 ) == 0 )
> >+       {
> >+               /* Safety - No reason why the write should not complete, 
> >and we never get here, avoid hang */
> >+               if (timeout++ >= 4) {
> >+                       printk("%s:  demodulator is no longer responding, 
> >aborting.\n",__FUNCTION__);
> >+                       return -EREMOTEIO;
> >+               }
> >+               msleep(500);
> >+       }
> >
> >"No reason why the write should not complete, and we never get here"?
> >500 msec delay?
> >
> >I haven't got the data sheet so I can only guess what the code is doing,
> >but it looks fishy. ;-)
> >What is (cx24123_readreg(state, 0x20) & 0x40) testing for?
> >
> >  
> The demod uses a private 3 wire interface to communicate with the tuner. 
> This is basically waiting for the tuner to go ready for the next 
> available command/byte. If it doesn't, and I saw this once or twice (the 
> pll seemed to die), it makes sure we never end up in a hanging situation.
> 
> It may of been a bad hardware sample, or bad timing generally but I 
> though the added safety didn't hurt.
> 
> We can remove the timeout code if you feel the safety is unnecessary.

Seems like I am unable to communicate today :-(

Creating a potentially endless waiting loop is not the solution.

But
a) you shold update the comment from "we enever get here" to "saw this
   happening a couple of times"
b) choose a reasonable timeout (where do the 4 seconds come from, why
   is it worth waiting 1.5 more seconds if the initial 500msec wait
   didn't fix it)
c) implement timeouts with boilerplate jiffies/time_after() code
   as is preferred on lkml because it is independent from
   system load etc.

How long does the private 3 wire write usually take? Doesn't
the initial check in your code fail everytime because it is
done too soon, and then your code waits needlessly for 500msecs
before checking again?

Johannes



More information about the linux-dvb mailing list