]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
V4L/DVB (6449): tda18271: clean up i2c_gate handling
authorMichael Krufky <mkrufky@linuxtv.org>
Wed, 24 Oct 2007 12:55:54 +0000 (09:55 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 25 Jan 2008 21:01:14 +0000 (19:01 -0200)
Call analog_demod_ops->i2c_gate_ctrl when in analog tuning mode, and
frontend_ops.i2c_gate_ctrl when in digital tuning mode.

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/frontends/Makefile
drivers/media/dvb/frontends/tda18271.c

index 457effcda5da6bdd4498746fd33cc7d1cd586157..57e5fa80589bd50f52aa74614be40d0001d4b8b3 100644 (file)
@@ -3,6 +3,7 @@
 #
 
 EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core/
+EXTRA_CFLAGS += -Idrivers/media/video/
 
 obj-$(CONFIG_DVB_PLL) += dvb-pll.o
 obj-$(CONFIG_DVB_STV0299) += stv0299.o
index 1b9c143888ea75fd70d9f565452a5d9d50d3df7c..aaaa2f8851863cb7f849da859ba93f7c9dd1095a 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/i2c.h>
 #include <linux/delay.h>
 #include <linux/videodev2.h>
+#include "tuner-driver.h"
 
 #include "tda18271.h"
 
@@ -324,6 +325,26 @@ struct tda18271_priv {
        u32 bandwidth;
 };
 
+static int tda18271_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
+{
+       struct tda18271_priv *priv = fe->tuner_priv;
+       struct analog_tuner_ops *ops = fe->ops.analog_demod_ops;
+       int ret = 0;
+
+       switch (priv->mode) {
+       case TDA18271_ANALOG:
+               if (ops && ops->i2c_gate_ctrl)
+                       ret = ops->i2c_gate_ctrl(fe, enable);
+               break;
+       case TDA18271_DIGITAL:
+               if (fe->ops.i2c_gate_ctrl)
+                       ret = fe->ops.i2c_gate_ctrl(fe, enable);
+               break;
+       }
+
+       return ret;
+};
+
 /*---------------------------------------------------------------------*/
 
 static void tda18271_dump_regs(struct dvb_frontend *fe)
@@ -363,14 +384,12 @@ static void tda18271_read_regs(struct dvb_frontend *fe)
                  .buf = regs, .len = 16 }
        };
 
-       if (fe->ops.i2c_gate_ctrl)
-               fe->ops.i2c_gate_ctrl(fe, 1);
+       tda18271_i2c_gate_ctrl(fe, 1);
 
        /* read all registers */
        ret = i2c_transfer(priv->i2c_adap, msg, 2);
 
-       if (fe->ops.i2c_gate_ctrl)
-               fe->ops.i2c_gate_ctrl(fe, 0);
+       tda18271_i2c_gate_ctrl(fe, 0);
 
        if (ret != 2)
                printk("ERROR: %s: i2c_transfer returned: %d\n",
@@ -396,14 +415,12 @@ static void tda18271_write_regs(struct dvb_frontend *fe, int idx, int len)
                buf[i] = regs[idx-1+i];
        }
 
-       if (fe->ops.i2c_gate_ctrl)
-               fe->ops.i2c_gate_ctrl(fe, 1);
+       tda18271_i2c_gate_ctrl(fe, 1);
 
        /* write registers */
        ret = i2c_transfer(priv->i2c_adap, &msg, 1);
 
-       if (fe->ops.i2c_gate_ctrl)
-               fe->ops.i2c_gate_ctrl(fe, 0);
+       tda18271_i2c_gate_ctrl(fe, 0);
 
        if (ret != 1)
                printk(KERN_WARNING "ERROR: %s: i2c_transfer returned: %d\n",