PATCH: Leadtek DTVb1800H require longer delay for tuner reset
Hi,
I am using alot of tuners Leadtek DTV1800H under Linux, minimum 5
devices per one PC with kernel 2.6.37.4. I discovered bug which I can se very often but not always. When device tuner is reseted there is not enough time to do all needed stuff and sometimes (randomly) kernel show this message:
[ 821.369647] cx88[0]/1: IRQ loop detected, disabling interrupts
Patch is again very simple, we need to adjust time in reset function after cx_clear and cx_set calls from 50 to 75 us. I tested this patch on 4 PC with similar problems and all are without this issue.
M. Slugen
drivers/media/video/cx88/cx88-cards.c renamed from /drivers/media/video/cx88/cx88-cards.c +2 -2
@@ -3019,9 +3019,9 @@cx_set (MO_GP1_IO ,0x1010 );mdelay (50 );cx_clear (MO_GP1_IO ,0x10 ); -mdelay (50 ); +mdelay (75 );cx_set (MO_GP1_IO ,0x10 ); -mdelay (50 ); +mdelay (75 );return 0 ; }return -EINVAL ;
_______________________________________________
linux-dvb users mailing list
For V4L/DVB development, please use instead [email protected] [email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
Quoted 24 lines · Mirek Slugeň
Hi,
I am using alot of tuners Leadtek DTV1800H under Linux, minimum 5
devices per one PC with kernel 2.6.37.4. I discovered bug which I can se very often but not always. When device tuner is reseted there is not enough time to do all needed stuff and sometimes (randomly) kernel show this message:[ 821.369647] cx88[0]/1: IRQ loop detected, disabling interruptsPatch is again very simple, we need to adjust time in reset function after
cx_clearandcx_setcalls from 50 to 75 us. I tested this patch on 4 PC with similar problems and all are without this issue.M. Slugen
kernel_cx88_reset.diff
diff -Naur
linux-2.6.37.4.old//drivers/media/video/cx88/cx88-cards.clinux-2.6.37.4/drivers/media/video/cx88/cx88-cards.c
drivers/media/video/cx88/cx88-cards.c line 3024
Quoted 8 lines
drivers/media/video/cx88/cx88-cards.c renamed from /drivers/media/video/cx88/cx88-cards.c +2
-2@@ -3019,9 +3019,9 @@cx_set (MO_GP1_IO ,0x1010 );mdelay (50 );cx_clear (MO_GP1_IO ,0x10 ); -mdelay (50 ); +mdelay (75 );cx_set (MO_GP1_IO ,0x10 ); -mdelay (50 ); +mdelay (75 );
Wow, 75 ms of busy-waiting. Since others use msleep, all these should be converted to msleep too. Or is this an atomic context, so that the others are broken (e.g. cx88_dvico_xc2028_callback)?
Also for instance I don't understand this code:
cx_write(MO_GP2_IO, 0xcf7);
mdelay(50);
cx_write(MO_GP2_IO, 0xef5);
mdelay(50);
cx_write(MO_GP2_IO, 0xcf7);
msleep(10);Delays of 50 ms and sleep of 10 ms? Given [um]delay spin _at least_ the time specified, what was the intention of this?
regards,
Signature · 2 lines
js suse labs