Re: NOVA-S problems with 2.6.17

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

 



Hi!

 > Excellent, thanks.. well the most obvious patch from those that might cause 
 > this is the attached one.. could you try un-applying it to 2.6.17-rc1 and see 
 > if the problem goes away?
 > 
 > Apologies in advance if you already know this, but to save time, to un-apply 
 > it: 
 > 
 > cd linux-2.6.17-rc1
 > patch -R -p1 < budget-av-cam-reset.patch

I tried this with 2.6.17 final. Applied this patch, got a reject on
dvb_frontend.c

--- >>> --- >>> --- >>> ---
***************
*** 105,111 ****
  	fe_status_t status;
  	unsigned long tune_mode_flags;
  	unsigned int delay;
- 	unsigned int reinitialise;
  
  	/* swzigzag values */
  	unsigned int state;
--- 105,110 ----
  	fe_status_t status;
  	unsigned long tune_mode_flags;
  	unsigned int delay;
  
  	/* swzigzag values */
  	unsigned int state;
***************
*** 537,547 ****
  		if (down_interruptible(&fepriv->sem))
  			break;
  
- 		if (fepriv->reinitialise) {
- 			dvb_frontend_init(fe);
- 			fepriv->reinitialise = 0;
- 		}
- 
  		/* do an iteration of the tuning loop */
  		if (fe->ops->tune) {
  			/* have we been asked to retune? */
--- 526,531 ----
  		if (down_interruptible(&fepriv->sem))
  			break;
  
  		/* do an iteration of the tuning loop */
  		if (fe->ops->tune) {
  			/* have we been asked to retune? */
--- <<< --- <<< --- <<< ---

Then applied it by hand (more or less)...

Diff between vanilla and patched version :

--- >>> --- >>> --- >>> ---
--- /usr/src/linux-2.6.17/drivers/media/dvb/dvb-core/dvb_frontend.c	2006-06-30 06:46:23.000000000 +0200
+++ dvb_frontend.c	2006-07-02 19:35:00.000000000 +0200
@@ -105,7 +105,7 @@
 	fe_status_t status;
 	unsigned long tune_mode_flags;
 	unsigned int delay;
-	unsigned int reinitialise;
+//	unsigned int reinitialise;
 	int tone;
 	int voltage;
 
@@ -124,7 +124,6 @@
 	unsigned int check_wrapped;
 };
 
-static void dvb_frontend_wakeup(struct dvb_frontend *fe);
 
 static void dvb_frontend_add_event(struct dvb_frontend *fe, fe_status_t status)
 {
@@ -217,15 +216,6 @@
 		fe->ops->init(fe);
 }
 
-void dvb_frontend_reinitialise(struct dvb_frontend *fe)
-{
-	struct dvb_frontend_private *fepriv = fe->frontend_priv;
-
-	fepriv->reinitialise = 1;
-	dvb_frontend_wakeup(fe);
-}
-EXPORT_SYMBOL(dvb_frontend_reinitialise);
-
 static void dvb_frontend_swzigzag_update_delay(struct dvb_frontend_private *fepriv, int locked)
 {
 	int q2;
@@ -518,8 +508,8 @@
 	fepriv->quality = 0;
 	fepriv->delay = 3*HZ;
 	fepriv->status = 0;
+	dvb_frontend_init(fe);
 	fepriv->wakeup = 0;
-	fepriv->reinitialise = 1;
 
 	while (1) {
 		up(&fepriv->sem);	    /* is locked when we enter the thread... */
@@ -537,16 +527,16 @@
 		if (down_interruptible(&fepriv->sem))
 			break;
 
-		if (fepriv->reinitialise) {
-			dvb_frontend_init(fe);
-			if (fepriv->tone != -1) {
-				fe->ops->set_tone(fe, fepriv->tone);
-			}
-			if (fepriv->voltage != -1) {
-				fe->ops->set_voltage(fe, fepriv->voltage);
-			}
-			fepriv->reinitialise = 0;
-		}
+//	if (fepriv->reinitialise) {
+//		dvb_frontend_init(fe);
+//		if (fepriv->tone != -1) {
+//			fe->ops->set_tone(fe, fepriv->tone);
+//		}
+//		if (fepriv->voltage != -1) {
+//			fe->ops->set_voltage(fe, fepriv->voltage);
+//		}
+//		fepriv->reinitialise = 0;
+//	}
 
 		/* do an iteration of the tuning loop */
 		if (fe->ops->tune) {
@@ -686,10 +676,6 @@
 	fepriv->state = FESTATE_IDLE;
 	fepriv->exit = 0;
 	fepriv->thread_pid = 0;
-	fepriv->events.eventr = fepriv->events.eventw = 0;
-	fepriv->tune_mode_flags &= ~FE_TUNE_MODE_ONESHOT;
-	fepriv->tone = -1;
-	fepriv->voltage = -1;
 	mb();
 
 	ret = kernel_thread (dvb_frontend_thread, fe, 0);
@@ -1003,6 +989,14 @@
 		ret = dvb_frontend_start (fe);
 		if (ret)
 			dvb_generic_release (inode, file);
+
+		/*  empty event queue */
+		fepriv->events.eventr = fepriv->events.eventw = 0;
+
+		/* normal tune mode when opened R/W */
+		fepriv->tune_mode_flags &= ~FE_TUNE_MODE_ONESHOT;
+		fepriv->tone = -1;
+		fepriv->voltage = -1;
 	}
 
 	return ret;
--- <<< --- <<< --- <<< ---

And finally, it seems to work fine. Tried various channels on both LNBs
(ProSieben, n-tv, DunaTV, JCTV, ...).

Thanks,
Gergely

_______________________________________________

linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux