Alex Betis wrote:
> On Tue, Jan 27, 2009 at 9:56 PM, Manu Abraham <[email protected]>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)