On Tuesday 06 April 2004 15:46, Jesper Sörensen wrote: > Andrew de Quincey wrote: > >Hmm, on further thought, it might be objecting to the IRQ enable bits I'm > >using... they're "sort of" standard, but defined in a later document than > > the original standard. Perhaps some CAMs don't like them. > > > >The attached patch will disable them just during the link_init procedure. > > I've tested both patches now, but unfortunately neither seems to work. :-( > > With the timeout patch:
[...] > Apr 6 15:45:08 htpc kernel: dvb_ca_en50221_wait_if_status > Apr 6 15:45:09 htpc kernel: dvb_ca_en50221_wait_if_status failed > timeout:1001 > Apr 6 15:45:09 htpc kernel: dvb_ca: DVB CAM link initialisation failed :( > > With the noirq patch: [...] > Apr 6 16:32:57 htpc kernel: dvb_ca_en50221_link_init > Apr 6 16:32:57 htpc kernel: dvb_ca_en50221_wait_if_status > Apr 6 16:32:57 htpc kernel: dvb_ca_en50221_wait_if_status succeeded > timeout:0 > Apr 6 16:32:57 htpc kernel: dvb_ca_en50221_wait_if_status > Apr 6 16:32:57 htpc kernel: dvb_ca_en50221_wait_if_status failed > timeout:101 > Apr 6 16:32:57 htpc kernel: dvb_ca: DVB CAM link initialisation failed :( Oh dear, this is the sort of thing that Robert was seeing with the Zetacam. Its odd that the first wait_if_status works though. Attached is another patch which will just ignore if a timeout occurs and try to keep going. It'll probably claim the CAM is initialised OK, but it might not _actually_ be, so can you give a full debug dmesg again with this one... ta. > I did notice that CPU utilization jumps to 100 % after loading the > modules. This is what top tells me: Thanks, I'll look into that.
Index: linux/drivers/media/dvb/dvb-core/dvb_ca_en50221.c =================================================================== RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/dvb-core/dvb_ca_en50221.c,v retrieving revision 1.2 diff -r1.2 dvb_ca_en50221.c 275a276 > printk("STATUS: %x\n", res); 281a283 > printk("STATUS: %x\n", res); 326c328,329 < if ((ret = dvb_ca_en50221_wait_if_status(ca, slot, STATUSREG_DA, HZ/10)) != 0) return ret; --- > // if ((ret = dvb_ca_en50221_wait_if_status(ca, slot, STATUSREG_DA, HZ/10)) != 0) return ret; > dvb_ca_en50221_wait_if_status(ca, slot, STATUSREG_DA, HZ/10); 340c343,344 < if ((ret = dvb_ca_en50221_wait_if_status(ca, slot, STATUSREG_FR, HZ/10)) != 0) return ret; --- > // if ((ret = dvb_ca_en50221_wait_if_status(ca, slot, STATUSREG_FR, HZ/10)) != 0) return ret; > dvb_ca_en50221_wait_if_status(ca, slot, STATUSREG_FR, HZ/10);