Re: Thoughts about supporting more complex tuners

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

 



Andrew de Quincey wrote:
Hi, we're starting to see cards which require more complex tuner code (especially with the new Silicon Tuners).. so much so that it begins to make sense to write these as their own standalone modules. I've been thinking how to incorporate these into the frontend structure. Attached is a first attempt.

As you can see, I have added some more ops to the frontend_ops structure and a tuner_priv field to the dvb_frontend structure. The idea being that when creating the frontend (pretend its stv0299 for the moment) for a card, you do the following:

dvb_frontend *fe = stv0299_attach();
acomplextuner_attach(fe);

So the stv0299 initalises the dvb_frontend first and fills out the ops function pointers. Then the tuner is attached, and fills out yet more function pointers (perhaps even overriding some of the demod ones) depending on precisely how the hardware is wired. The card driver can then override functions if it wants to (e.g. for DISEQC).

The tuner can control the demodulator's i2c switch (if present) using the i2c_gate_ctrl function pointer present in the ops structure (usually filled out by the demod attach function).

The frontend loop will be modified as well - instead of just calling set_frontend(), it will call tuner_set() beforehand as well.

Finally, if we do this, I would remove all the pll_set()/pll_init() function pointers in the demodulator config structures in favour of this method. I would however create a wrapper "simpletuner" so that we can continue with minimal code for the "simple" PLLs - theres no point in complicating these beasts.

Anyway, let me know what you think.. as I said this is a first attempt, so anything can be changed. ------------------------------------------------------------------------

diff -r 2b05b5271ae1 linux/drivers/media/dvb/dvb-core/dvb_frontend.h
--- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.h	Thu Apr 13 12:29:04 2006 -0400
+++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.h	Thu Apr 13 21:57:06 2006 +0100
@@ -86,6 +86,13 @@ struct dvb_frontend_ops {
 	int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg);
 	int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
 	int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
+
+	int (*tuner_release)(struct dvb_frontend *fe);
+	int (*tuner_init)(struct dvb_frontend *fe);
+	int (*tuner_sleep)(struct dvb_frontend *fe);
+	int (*tuner_set)(struct dvb_frontend *fe, struct dvb_frontend_parameters* params);
+	int (*tuner_get)(struct dvb_frontend *fe, struct dvb_frontend_parameters* params);
+	int (*tuner_poll)(struct dvb_frontend *fe);
 };
#define MAX_EVENT 8
@@ -102,6 +109,7 @@ struct dvb_frontend {
 struct dvb_frontend {
 	struct dvb_frontend_ops* ops;
 	struct dvb_adapter *dvb;
+	void* tuner_priv;


Looks nice, Already started using that one .. :-)




_______________________________________________

linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux