Skip to contentSkip to conversation

PATCH: Leadtek DTVb1800H require longer delay for tuner reset

PATCH Mirek Slugeň 2 participants 2 messages Mar 20, 2011 – Mar 21, 2011 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

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
diff -Naur linux-2.6.37.4.old//drivers/media/video/cx88/cx88-cards.c linux-2.6.37.4/drivers/media/video/cx88/cx88-cards.c
@@ -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

#1 lore raw
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 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

kernel_cx88_reset.diff

diff -Naur linux-2.6.37.4.old//drivers/media/video/cx88/cx88-cards.c linux-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