[linux-dvb] [PATCH] function for checking if the dvb framework is idle

Markus Rechberger markus.rechberger at amd.com
Thu Aug 9 14:19:29 CEST 2007


Following patch adds the functionality to check if the dvb framework is 
idle or currently processing some commands.

The return value of that function is true if fepriv->thread is set and 
false if not.

This might become important for devices which supports video4linux 
(analogue TV) and digital TV. In case of a firmware reupload for a 
specific mode one framework has to be idle and should not interfere, 
this function adds the possibility for checking the current status of 
the DVB side.

Signed-off-by: Markus Rechberger <markus.rechberger at amd.com>

http://mcentral.de/~mrec/patches/dvb_frontend_eventstatus.diff

diff -r cae47793b091 linux/drivers/media/dvb/dvb-core/dvb_frontend.c
--- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.c    Tue Aug 07 
10:52:55 2007 -0300
+++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.c    Thu Aug 09 
13:53:47 2007 +0200
@@ -133,6 +133,25 @@ struct dvb_frontend_private {
 };
 
 static void dvb_frontend_wakeup(struct dvb_frontend *fe);
+
+int dvb_frontend_eventstatus(struct dvb_frontend *fe)
+{
+      struct dvb_frontend_private *fepriv = fe->frontend_priv;
+      struct dvb_fe_events *events = &fepriv->events;
+      int ret;
+
+      if (mutex_lock_interruptible (&events->mtx))
+              return -EINTR;
+
+      ret = (fepriv->thread) ? true:false;
+      mutex_unlock (&events->mtx);
+
+      return ret;
+}
+
+
+
+EXPORT_SYMBOL(dvb_frontend_eventstatus);
 
 static void dvb_frontend_add_event(struct dvb_frontend *fe, fe_status_t 
status)
 {
diff -r cae47793b091 linux/drivers/media/dvb/dvb-core/dvb_frontend.h
--- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.h    Tue Aug 07 
10:52:55 2007 -0300
+++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.h    Thu Aug 09 
13:52:26 2007 +0200
@@ -170,6 +170,8 @@ extern void dvb_frontend_detach(struct d
 
 extern void dvb_frontend_reinitialise(struct dvb_frontend *fe);
 
+extern int dvb_frontend_eventstatus(struct dvb_frontend *fe);
+
 extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 
add_usec);
 extern s32 timeval_usec_diff(struct timeval lasttime, struct timeval 
curtime);






More information about the linux-dvb mailing list