Commit 705d41e5 authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab

V4L/DVB (5240): Qt1010: use i2c_gate_ctrl where appropriate

This patch adds calls to i2c_gate_ctrl in the qt1010 dvb tuner module,
while removing the temporary hack in au6610 and gl861.
Tested successfully against fi-Oulu frequencies with
MSI Megasky 580 GL861 and Sigmatek DVB-110 AU6610.
Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 38d0629f
...@@ -145,19 +145,6 @@ static struct qt1010_config au6610_qt1010_config = { ...@@ -145,19 +145,6 @@ static struct qt1010_config au6610_qt1010_config = {
static int au6610_qt1010_tuner_attach(struct dvb_usb_adapter *adap) static int au6610_qt1010_tuner_attach(struct dvb_usb_adapter *adap)
{ {
/* TODO FIXME; probably I2C gate.
QT1010 tuner does not respond before we write 0x1a to ZL10353 demod
register 0x62. This ought to be done somewhere in demod initialization.
This solution is temporary hack. */
u8 buf[2] = { 0x62, 0x1a };
struct i2c_msg msg = { .addr = au6610_zl10353_config.demod_address,
.flags = 0, .buf = buf, .len = 2 };
if (i2c_transfer(&adap->dev->i2c_adap, &msg, 1) != 1) {
printk(KERN_WARNING "au6610 tuner attach failed\n");
return -EREMOTEIO;
}
return dvb_attach(qt1010_attach, return dvb_attach(qt1010_attach,
adap->fe, &adap->dev->i2c_adap, adap->fe, &adap->dev->i2c_adap,
&au6610_qt1010_config) == NULL ? -ENODEV : 0; &au6610_qt1010_config) == NULL ? -ENODEV : 0;
......
...@@ -122,19 +122,6 @@ static struct qt1010_config gl861_qt1010_config = { ...@@ -122,19 +122,6 @@ static struct qt1010_config gl861_qt1010_config = {
static int gl861_tuner_attach(struct dvb_usb_adapter *adap) static int gl861_tuner_attach(struct dvb_usb_adapter *adap)
{ {
/* TODO FIXME; probably I2C gate.
QT1010 tuner does not respond before we write 0x1a to ZL10353 demod
register 0x62. This ought to be done somewhere in demod initialization.
This solution is temporary hack. */
u8 buf[2] = { 0x62, 0x1a };
struct i2c_msg msg = { .addr = gl861_zl10353_config.demod_address,
.flags = 0, .buf = buf, .len = 2 };
if (i2c_transfer(&adap->dev->i2c_adap, &msg, 1) != 1) {
printk(KERN_WARNING "gl861 tuner attach failed\n");
return -EREMOTEIO;
}
return dvb_attach(qt1010_attach, return dvb_attach(qt1010_attach,
adap->fe, &adap->dev->i2c_adap, adap->fe, &adap->dev->i2c_adap,
&gl861_qt1010_config) == NULL ? -ENODEV : 0; &gl861_qt1010_config) == NULL ? -ENODEV : 0;
......
...@@ -149,6 +149,9 @@ static int qt1010_set_params(struct dvb_frontend *fe, struct dvb_frontend_parame ...@@ -149,6 +149,9 @@ static int qt1010_set_params(struct dvb_frontend *fe, struct dvb_frontend_parame
priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0; priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0;
priv->frequency = freq; priv->frequency = freq;
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1); /* open i2c_gate */
/* reg 05 base value */ /* reg 05 base value */
if (freq < 290000000) reg05 = 0x14; /* 290 MHz */ if (freq < 290000000) reg05 = 0x14; /* 290 MHz */
else if (freq < 610000000) reg05 = 0x34; /* 610 MHz */ else if (freq < 610000000) reg05 = 0x34; /* 610 MHz */
...@@ -242,6 +245,9 @@ static int qt1010_set_params(struct dvb_frontend *fe, struct dvb_frontend_parame ...@@ -242,6 +245,9 @@ static int qt1010_set_params(struct dvb_frontend *fe, struct dvb_frontend_parame
if (debug) if (debug)
qt1010_dump_regs(priv); qt1010_dump_regs(priv);
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0); /* close i2c_gate */
return 0; return 0;
} }
...@@ -277,7 +283,6 @@ static int qt1010_init_meas1(struct qt1010_priv *priv, u8 oper, u8 reg, u8 reg_i ...@@ -277,7 +283,6 @@ static int qt1010_init_meas1(struct qt1010_priv *priv, u8 oper, u8 reg, u8 reg_i
return qt1010_writereg(priv, 0x1e, 0x00); return qt1010_writereg(priv, 0x1e, 0x00);
} }
static u8 qt1010_init_meas2(struct qt1010_priv *priv, u8 reg_init_val, u8 *retval) static u8 qt1010_init_meas2(struct qt1010_priv *priv, u8 reg_init_val, u8 *retval)
{ {
u8 i, val; u8 i, val;
...@@ -347,6 +352,9 @@ static int qt1010_init(struct dvb_frontend *fe) ...@@ -347,6 +352,9 @@ static int qt1010_init(struct dvb_frontend *fe)
{ QT1010_WR, 0x08, 0x08 } { QT1010_WR, 0x08, 0x08 }
}; };
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1); /* open i2c_gate */
for (i = 0; i < sizeof(i2c_data) / sizeof(*i2c_data); i++) { for (i = 0; i < sizeof(i2c_data) / sizeof(*i2c_data); i++) {
switch (i2c_data[i].oper) { switch (i2c_data[i].oper) {
case QT1010_WR: case QT1010_WR:
...@@ -430,6 +438,9 @@ struct dvb_frontend * qt1010_attach(struct dvb_frontend *fe, ...@@ -430,6 +438,9 @@ struct dvb_frontend * qt1010_attach(struct dvb_frontend *fe,
priv->cfg = cfg; priv->cfg = cfg;
priv->i2c = i2c; priv->i2c = i2c;
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1); /* open i2c_gate */
/* Try to detect tuner chip. Probably this is not correct register. */ /* Try to detect tuner chip. Probably this is not correct register. */
if (qt1010_readreg(priv, 0x29, &id) != 0 || (id != 0x39)) { if (qt1010_readreg(priv, 0x29, &id) != 0 || (id != 0x39)) {
...@@ -437,6 +448,9 @@ struct dvb_frontend * qt1010_attach(struct dvb_frontend *fe, ...@@ -437,6 +448,9 @@ struct dvb_frontend * qt1010_attach(struct dvb_frontend *fe,
return NULL; return NULL;
} }
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0); /* close i2c_gate */
printk(KERN_INFO "Quantek QT1010 successfully identified.\n"); printk(KERN_INFO "Quantek QT1010 successfully identified.\n");
memcpy(&fe->ops.tuner_ops, &qt1010_tuner_ops, sizeof(struct dvb_tuner_ops)); memcpy(&fe->ops.tuner_ops, &qt1010_tuner_ops, sizeof(struct dvb_tuner_ops));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment