On 12/14/2012 07:28 PM, Patrice Chotard wrote:
Before dvb_pll_attch call, be sure that drxd demodulator was initialized, otherwise, dvb_pll_attach() will always failed. In dvb_pll_attach(), first thing done is to enable the I2C gate control in order to probe the pll by performing a read access. As demodulator was not initialized, every i2c access failed. Reported-by: frederic.mantegazza@xxxxxxxxxxx Signed-off-by: Patrice Chotard <patricechotard@xxxxxxx> --- drivers/media/pci/ngene/ngene-cards.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/pci/ngene/ngene-cards.c b/drivers/media/pci/ngene/ngene-cards.c index 96a13ed..e2192db 100644 --- a/drivers/media/pci/ngene/ngene-cards.c +++ b/drivers/media/pci/ngene/ngene-cards.c @@ -328,6 +328,8 @@ static int demod_attach_drxd(struct ngene_channel *chan) return -ENODEV; } + /* initialized the DRXD demodulator */ + chan->fe->ops.init(chan->fe); if (!dvb_attach(dvb_pll_attach, chan->fe, feconf->pll_address, &chan->i2c_adapter, feconf->pll_type)) {
I don't like that as this causes again more deviation against normal procedures. If gate open is needed (for probe or id check?) then pll/tuner attach should open it. If that is not easily possible then calling gate_control() before pll attach is allowed. init() is very, very, bad as generally starts whole chip => starts eating power etc.
Even better would be to let whole gate-control to responsibility of DVB-core, but unfortunately current situation is quite mess. Gate is operated sometimes by DVB-core (like for init/sleep) and for some cases it is left for responsibility of tuner driver. So on real life there is mixed solutions and for init/sleep gate is even double controlled.
regards Antti -- http://palosaari.fi/ -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html