Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 76573
b: refs/heads/master
c: e435f95
h: refs/heads/master
i:
  76571: d0f4056
v: v3
  • Loading branch information
Michael Krufky authored and Mauro Carvalho Chehab committed Jan 25, 2008
1 parent 5ce6490 commit 1555c05
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7206abbc2d19b6846b879fb266672b40da9961cb
refs/heads/master: e435f95ce6468f0240f050e14c9eac93e2fe7e71
34 changes: 30 additions & 4 deletions trunk/drivers/media/dvb/frontends/tda18271-fe.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;

Expand All @@ -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));
Expand Down
12 changes: 10 additions & 2 deletions trunk/drivers/media/dvb/frontends/tda18271.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,21 @@
#include <linux/i2c.h>
#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;
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/media/video/tda8290.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 1555c05

Please sign in to comment.