From 1555c05fdb6b9ef9ddb1ea798618cc5a76e0f504 Mon Sep 17 00:00:00 2001 From: Michael Krufky Date: Sun, 9 Dec 2007 22:23:30 -0300 Subject: [PATCH] --- yaml --- r: 76573 b: refs/heads/master c: e435f95ce6468f0240f050e14c9eac93e2fe7e71 h: refs/heads/master i: 76571: d0f4056f26e204477673b0106833a5628757b019 v: v3 --- [refs] | 2 +- .../drivers/media/dvb/frontends/tda18271-fe.c | 34 ++++++++++++++++--- trunk/drivers/media/dvb/frontends/tda18271.h | 12 +++++-- trunk/drivers/media/video/tda8290.c | 3 +- 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 6d3f0d9c9d27..fb0528a6b712 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7206abbc2d19b6846b879fb266672b40da9961cb +refs/heads/master: e435f95ce6468f0240f050e14c9eac93e2fe7e71 diff --git a/trunk/drivers/media/dvb/frontends/tda18271-fe.c b/trunk/drivers/media/dvb/frontends/tda18271-fe.c index dbf0f619a90a..28c63fd4493e 100644 --- a/trunk/drivers/media/dvb/frontends/tda18271-fe.c +++ b/trunk/drivers/media/dvb/frontends/tda18271-fe.c @@ -40,7 +40,9 @@ struct tda18271_priv { u8 i2c_addr; struct i2c_adapter *i2c_adap; unsigned char tda18271_regs[TDA18271_NUM_REGS]; + enum tda18271_mode mode; + enum tda18271_i2c_gate gate; u32 frequency; u32 bandwidth; @@ -50,17 +52,39 @@ 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; + enum tda18271_i2c_gate gate; int ret = 0; - switch (priv->mode) { - case TDA18271_ANALOG: + switch (priv->gate) { + case TDA18271_GATE_DIGITAL: + case TDA18271_GATE_ANALOG: + gate = priv->gate; + break; + case TDA18271_GATE_AUTO: + default: + switch (priv->mode) { + case TDA18271_DIGITAL: + gate = TDA18271_GATE_DIGITAL; + break; + case TDA18271_ANALOG: + default: + gate = TDA18271_GATE_ANALOG; + break; + } + } + + switch (gate) { + case TDA18271_GATE_ANALOG: if (ops && ops->i2c_gate_ctrl) ret = ops->i2c_gate_ctrl(fe, enable); break; - case TDA18271_DIGITAL: + case TDA18271_GATE_DIGITAL: if (fe->ops.i2c_gate_ctrl) ret = fe->ops.i2c_gate_ctrl(fe, enable); break; + default: + ret = -EINVAL; + break; } return ret; @@ -713,7 +737,8 @@ static struct dvb_tuner_ops tda18271_tuner_ops = { }; struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, - struct i2c_adapter *i2c) + struct i2c_adapter *i2c, + enum tda18271_i2c_gate gate) { struct tda18271_priv *priv = NULL; @@ -724,6 +749,7 @@ struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, priv->i2c_addr = addr; priv->i2c_adap = i2c; + priv->gate = gate; memcpy(&fe->ops.tuner_ops, &tda18271_tuner_ops, sizeof(struct dvb_tuner_ops)); diff --git a/trunk/drivers/media/dvb/frontends/tda18271.h b/trunk/drivers/media/dvb/frontends/tda18271.h index a8a19a7197f0..d8400337263b 100644 --- a/trunk/drivers/media/dvb/frontends/tda18271.h +++ b/trunk/drivers/media/dvb/frontends/tda18271.h @@ -24,13 +24,21 @@ #include #include "dvb_frontend.h" +enum tda18271_i2c_gate { + TDA18271_GATE_AUTO = 0, + TDA18271_GATE_ANALOG, + TDA18271_GATE_DIGITAL, +}; + #if defined(CONFIG_DVB_TDA18271) || (defined(CONFIG_DVB_TDA18271_MODULE) && defined(MODULE)) extern struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, - struct i2c_adapter *i2c); + struct i2c_adapter *i2c, + enum tda18271_i2c_gate gate); #else static inline struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, - struct i2c_adapter *i2c) + struct i2c_adapter *i2c, + enum tda18271_i2c_gate gate); { printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__); return NULL; diff --git a/trunk/drivers/media/video/tda8290.c b/trunk/drivers/media/video/tda8290.c index 403f96f998ec..a451d9480c1d 100644 --- a/trunk/drivers/media/video/tda8290.c +++ b/trunk/drivers/media/video/tda8290.c @@ -574,7 +574,8 @@ static int tda829x_find_tuner(struct dvb_frontend *fe) if (data == 0x83) { priv->ver |= TDA18271; tda18271_attach(fe, priv->tda827x_addr, - priv->i2c_props.adap); + priv->i2c_props.adap, + TDA18271_GATE_ANALOG); } else { if ((data & 0x3c) == 0) priv->ver |= TDA8275;