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