Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[vdr] Re: final solution to the signalless operation problem found!! -> testers+RFC required



Am Wednesday 24 March 2004 15:17 schrieb Andreas Oberritter:
> FE_SLEEP is called when the frontend handle is closed, so why does vdr
> open it when it does not use it?

Right - we can give it another option in setup.conf for signalless 
operation...

>
> The only remaining problem is that the VES is in an undefined state
> after insmod. So how about this patch instead?

You _should_ be right - unfortunately my test showed, that the ARM crashes 
instantly if using your patch instead of calling ioctl(FE_SLEEP) in vdr just 
after opening the frontend (this way my ARM run now 24hours without any 
outcommand error or reset or crash - it's rock-solid!).

So the shutdown only wasn't the solution, there had to be an FE_INIT first, 
setting up the frontend-thread and later call FE_SLEEP or what else is going 
one there.

I just tried to do ves1x93_init(i2c) just above your 3 lines in the patch 
below, but it also did _not_  work.

>
> diff -u -r1.7 ves1x93.c
> --- ves1x93.c   14 Mar 2004 13:46:20 -0000      1.7
> +++ ves1x93.c   24 Mar 2004 14:14:04 -0000
> @@ -611,6 +611,10 @@
>         state->inversion = INVERSION_OFF;
>         *data = state;
>
> +	   ves1x93_init(i2c);//does also not work <-------Guido
> +       if (board_type == BOARD_SIEMENS_PCI)
> +               ves1x93_writereg(i2c, 0x1f, 0x00); /* LNB power off */
> +       ves1x93_writereg(i2c, 0x00, 0x08);         /* standby */
> +
>         return dvb_register_frontend (ves1x93_ioctl, i2c, (void*) state,
> &ves1x93_info);
>  }
>
> close() has the same advantages without changing any interface.

So i have to clarify my first mail - the patch i sent might not be working, 
the ioctl(FE_SLEEP)-call directly after opening the frontend in vdr did the 
trick !!!

So here again what __actually__ works for me like a charm:

--- linux/dvb/frontend.h.orig    2004-03-23 20:58:59.000000000 +0100
+++ linux/dvb/frontend.h 2004-03-23 20:58:24.000000000 +0100
@@ -255,6 +255,8 @@
 #define FE_GET_FRONTEND            _IOR('o', 77, struct 
dvb_frontend_parameters)
 #define FE_GET_EVENT               _IOR('o', 78, struct dvb_frontend_event)

+#define FE_SLEEP                  _IO('v', 80) /* needs to be public */
+#define FE_INIT                   _IO('v', 81) /* needs to be public */

 #endif /*_DVBFRONTEND_H_*/

--- dvbdevice.c.orig    2004-03-19 20:05:17.000000000 +0100
+++ dvbdevice.c 2004-03-24 19:27:32.748856312 +0100
@@ -471,7 +477,8 @@

   // Devices that are present on all card types:

   int fd_frontend = DvbOpen(DEV_DVB_FRONTEND, n, O_RDWR | O_NONBLOCK);
+  CHECK(ioctl(fd_frontend, FE_SLEEP,NULL));//this avoids the ARM-crash!

   // Devices that are only present on cards with decoders:


-- 
Info:
To unsubscribe send a mail to ecartis@linuxtv.org with "unsubscribe vdr" as subject.



Home | Main Index | Thread Index