Alex Betis wrote: > On Tue, Jan 27, 2009 at 9:56 PM, Manu Abraham <abraham.manu@xxxxxxxxx>wrote: > >>> Hmm OK, but is there by any chance a fix for those issues somewhere or >>> in the pipe at least? I am willing to test (as I already offered), I >>> can compile the drivers, spread printk or whatever else is needed to >>> get useful reports. Let me know if I can help sort this problem. BTW in >>> my case it is DVB-S2 30000 SR and FEC 5/6. >> It was quite not appreciable on my part to provide a fix or reply in >> time nor spend much time on it earlier, but that said i was quite >> stuck up with some other things. >> >> Can you please pull a copy of the multiproto tree >> http://jusst.de/hg/multiproto or the v4l-dvb tree from >> http://jusst.de/hg/v4l-dvb >> >> and apply the following patch and comment what your result is ? >> Before applying please do check whether you still have the issues. > > Manu, > I've tried to increase those timers long ago when played around with my card > (Twinhan 1041) and scan utility. > I must say that I've concentrated mostly on DVB-S channels that wasn't > always locking. > I didn't notice much improvements. The thing that did help was increasing > the resolution of scan zigzags. With regards to the zig-zag, one bug is fixed in the v4l-dvb tree. Most likely you haven't tried that change. > I've sent a patch on that ML and people were happy with the results. I did look at your patch, but that was completely against the tuning algorithm. [..] > I believe DVB-S2 lock suffer from the same problem, but in that case the > zigzag is done in the chip and not in the driver. Along with the patch i sent, does the attached patch help you in anyway (This works out for DVB-S2 only)?
diff -r a4731ed28cac linux/drivers/media/dvb/frontends/stb0899_drv.c --- a/linux/drivers/media/dvb/frontends/stb0899_drv.c Tue Jan 27 23:29:44 2009 +0400 +++ b/linux/drivers/media/dvb/frontends/stb0899_drv.c Wed Jan 28 01:08:25 2009 +0400 @@ -1461,19 +1461,16 @@ struct stb0899_config *config = state->config; s32 iter_scale; - u32 reg; iter_scale = 17 * (internal->master_clk / 1000); iter_scale += 410000; - iter_scale /= (internal->srate / 1000000); - iter_scale /= 1000; + iter_scale /= (internal->srate / 1000); if (iter_scale > config->ldpc_max_iter) iter_scale = config->ldpc_max_iter; - reg = STB0899_READ_S2REG(STB0899_S2DEMOD, MAX_ITER); - STB0899_SETFIELD_VAL(MAX_ITERATIONS, reg, iter_scale); - stb0899_write_s2reg(state, STB0899_S2DEMOD, STB0899_BASE_MAX_ITER, STB0899_OFF0_MAX_ITER, reg); + stb0899_write_s2reg(state, STB0899_S2DEMOD, STB0899_BASE_MAX_ITER, STB0899_OFF0_MAX_ITER, iter_scale); + stb0899_write_s2reg(state, STB0899_S2DEMOD, STB0899_BASE_ITER_SCALE, STB0899_OFF0_ITER_SCALE, iter_scale); } static enum dvbfe_search stb0899_search(struct dvb_frontend *fe, struct dvb_frontend_parameters *p)