提交 705d41e5 编写于 作者: A Antti Palosaari 提交者: 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: NAntti Palosaari <crope@iki.fi>
Signed-off-by: NMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: NMauro Carvalho Chehab <mchehab@infradead.org>
上级 38d0629f
......@@ -145,19 +145,6 @@ static struct qt1010_config au6610_qt1010_config = {
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,
adap->fe, &adap->dev->i2c_adap,
&au6610_qt1010_config) == NULL ? -ENODEV : 0;
......
......@@ -122,19 +122,6 @@ static struct qt1010_config gl861_qt1010_config = {
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,
adap->fe, &adap->dev->i2c_adap,
&gl861_qt1010_config) == NULL ? -ENODEV : 0;
......
......@@ -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->frequency = freq;
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 1); /* open i2c_gate */
/* reg 05 base value */
if (freq < 290000000) reg05 = 0x14; /* 290 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
if (debug)
qt1010_dump_regs(priv);
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0); /* close i2c_gate */
return 0;
}
......@@ -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);
}
static u8 qt1010_init_meas2(struct qt1010_priv *priv, u8 reg_init_val, u8 *retval)
{
u8 i, val;
......@@ -347,6 +352,9 @@ static int qt1010_init(struct dvb_frontend *fe)
{ 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++) {
switch (i2c_data[i].oper) {
case QT1010_WR:
......@@ -430,6 +438,9 @@ struct dvb_frontend * qt1010_attach(struct dvb_frontend *fe,
priv->cfg = cfg;
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. */
if (qt1010_readreg(priv, 0x29, &id) != 0 || (id != 0x39)) {
......@@ -437,6 +448,9 @@ struct dvb_frontend * qt1010_attach(struct dvb_frontend *fe,
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");
memcpy(&fe->ops.tuner_ops, &qt1010_tuner_ops, sizeof(struct dvb_tuner_ops));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册