Browse Source

[media] DVB: dvb_frontend: clear stale events on FE_SET_FRONTEND

  the first event after an attempt to tune.

Signed-off-by: Andreas Oberritter <obi@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Andreas Oberritter 14 years ago
parent
commit
20640bea87
1 changed files with 11 additions and 0 deletions
  1. 11 0
      drivers/media/dvb/dvb-core/dvb_frontend.c

+ 11 - 0
drivers/media/dvb/dvb-core/dvb_frontend.c

@@ -220,6 +220,16 @@ static int dvb_frontend_get_event(struct dvb_frontend *fe,
 	return 0;
 }
 
+static void dvb_frontend_clear_events(struct dvb_frontend *fe)
+{
+	struct dvb_frontend_private *fepriv = fe->frontend_priv;
+	struct dvb_fe_events *events = &fepriv->events;
+
+	mutex_lock(&events->mtx);
+	events->eventr = events->eventw;
+	mutex_unlock(&events->mtx);
+}
+
 static void dvb_frontend_init(struct dvb_frontend *fe)
 {
 	dprintk ("DVB: initialising adapter %i frontend %i (%s)...\n",
@@ -1891,6 +1901,7 @@ static int dvb_frontend_ioctl_legacy(struct file *file,
 		/* Request the search algorithm to search */
 		fepriv->algo_status |= DVBFE_ALGO_SEARCH_AGAIN;
 
+		dvb_frontend_clear_events(fe);
 		dvb_frontend_add_event(fe, 0);
 		dvb_frontend_wakeup(fe);
 		fepriv->status = 0;