On Wednesday 07 April 2004 00:04, Jesper Sörensen wrote: > >Hmm, it isn't looking particularly hopeful unfortunately :( But... maybe > > its just not waiting long enough after the reset... the attached patch > > adds a huge delay just in case. > > The extra delay didn't change anything. :(
Argh, thanks for trying that last one. OK, the attached patch does Robert's suggestion of clearing the reset bit manually. > I've started looking into the code but I don't really know if I'll be > able to figure something out. The sleeping stuff in the main loop > [while(!ca->exit)] in dvb_ca_en50221_thread() doesn't seem to work > though. According to my tests that loop was run about 200000 times in a > few seconds, so I'd say that's what's causing the 100 % CPU. Maybe you > already knew that but I just thought I'd point it out anyway... :) Heh, yeah I've been messing about with that stuff since the rewrite of the IO code, so its probably a bit broken right now; I'm in the middle of getting the higher layers going right now so I can test the IO stuff, so I'll fix those bits later. > If you get any ideas you know where to find me, otherwise we'll wait and > see what kind of results other testers get (Carlo perhaps), and I'll see > if I can check the hardware on Windows. Thanks for your efforts so far! > It's very much appreciated. Thanks! I hope we can sort this thing out...
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); 315a318,319 > printk("PRESTATUS: %x\n", ca->pub->read_cam_control(ca->pub, slot, CTRLIF_STATUS)); > 319a324,327 > dvb_delay(100); > ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, 0); > dvb_delay(100); > 326c334,335 < 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); 331a341 > printk("CAM SENT BUF SIZE: %i\n", buf_size) 340c350,351 < 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); 587c598 < goto exit; --- > // goto exit; 1039a1051 > dvb_delay(1000);