Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] Re: blocking FE_SET_FRONTEND ioctl in non-blocking mode



On Wednesday 12 May 2004 17:05, Andrew de Quincey wrote:
> > I have now tried again with current CVS from the linux_2_4
> > branch. I have also realised that I was in error yesterday
> > and actually timing two consecutive tuning on the TDA
> > (5s from cold, 700 ms from warm). I've actually timed
> > the grundig this time and it takes 3-4 seconds from
> > cold, 500 ms from warm. I've also noted the very first
> > tuning attempt after booting is fast like a warm one.
> >
> > > Is 39ms an acceptable figure,
> >
> > It should be good enough, much better than 5 seconds :-).
>
> I can maybe speed it up even more - I've got some ideas for an alternative
> way to fix the stray data problem. Will post a patch later if they turn out
> to work.

Hi, the attached patch implements my removal of the FE_CAN_MUTE_TS fix - seems 
to work for me. Tuning seems even zippier now, and I've had no data problems 
yet (testing with channel changes in kaxtv).
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.79
diff -a -u -b -r1.79 dvb_frontend.c
--- linux/drivers/media/dvb/dvb-core/dvb_frontend.c	3 May 2004 16:29:27 -0000	1.79
+++ linux/drivers/media/dvb/dvb-core/dvb_frontend.c	12 May 2004 22:49:45 -0000
@@ -237,9 +237,6 @@
 
 	fe->status = s;
 
-	if (!(s & FE_HAS_LOCK) && (fe->info->caps & FE_CAN_MUTE_TS))
-		return;
-
 	/**
 	 *   now tell the Demux about the TS status changes...
 	 */
@@ -772,6 +769,7 @@
 		       fe->min_delay = (dvb_override_tune_delay * HZ) / 1000;
 		}
 
+		dvb_frontend_wakeup(fe);		
 		dvb_frontend_add_event (fe, 0);	    
 		break;
 
@@ -797,14 +795,6 @@
 		tmp->caps |= FE_CAN_INVERSION_AUTO;
 	}
 
-	// if the frontend has just been set, wait until the first tune has finished.
-	// This ensures the app doesn't start reading data too quickly, perhaps from the
-	// previous lock, which is REALLY CONFUSING TO DEBUG!
-	if ((cmd == FE_SET_FRONTEND) && (err == 0)) {
-		dvb_frontend_wakeup(fe);
-		err = wait_event_interruptible(fe->wait_queue, fe->state & ~FESTATE_RETUNE);
-	}
-
 	return err;
 }
 

Home | Main Index | Thread Index