Gerd Knorr wrote: > +void dvb_suspend_frontend(struct dvb_frontend* fe) > +{ > + if (fe->ops->sleep) > + fe->ops->sleep(fe); > +} Does the PM core allow us to call this after the dvb_frontend_thread has been put in the refridgerator? If not we might have to add a FESTATE_FREEZER. I also see the follwoing: if (dvb_powerdown_on_sleep) if (fe->ops->set_voltage) fe->ops->set_voltage(fe, SEC_VOLTAGE_OFF); You might wat to add this to dvb_suspend_frontend() (and maybe call dvb_suspend_frontend() then from the dvb_frontend_thread()). One problem is of course that it won't work with DiSEqC (the app would have to resend the DiSEqC sequence after wakeup; since DiSEqC sequences can be arbitrarily complex the drivers make no effort to remember them for automatic re-send.) We could add a flag to enum fe_status to signal this condition to the app after wakeup. Or we don't power down the LNB, but that's lousy power management then. > +void dvb_resume_frontend(struct dvb_frontend* fe) > +{ > + struct dvb_frontend_private *fepriv = fe->frontend_priv; > + > + if (fe->ops->init) > + fe->ops->init(fe); dvb_frontend_init(); > + fepriv->state = FESTATE_RETUNE; > + dvb_frontend_wakeup(fe); > + dvb_frontend_add_event (fe, 0); > + fepriv->status = 0; I see this is the same sequence as in FE_SET_FRONTEND, but I wonder if it should be (in both places): fepriv->state = FESTATE_RETUNE; fepriv->status = 0; dvb_frontend_add_event (fe, 0); dvb_frontend_wakeup(fe); since dvb_frontend_thread() can change fepriv->status and generate events after wakeup. Johannes