summaryrefslogtreecommitdiff
path: root/drivers/media/tuners/tda18212.c
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2014-07-31 23:35:56 +0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-09-21 23:42:40 +0400
commit976bcb2f6f9c9fb11f0aad7b7c87953e9c3f0116 (patch)
tree94f77253446f5ab902307cdf09b02a0766e64b80 /drivers/media/tuners/tda18212.c
parent8e417224dfb397633601a04214841df12cd470b0 (diff)
downloadlinux-976bcb2f6f9c9fb11f0aad7b7c87953e9c3f0116.tar.xz
[media] tda18212: add support for slave chip version
There is 2 different versions of that chip available, master and slave. Slave is used only on dual tuner devices with master tuner. Laser printing top of chip is 18212/M or 18212/S according to chip version. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/tuners/tda18212.c')
-rw-r--r--drivers/media/tuners/tda18212.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/drivers/media/tuners/tda18212.c b/drivers/media/tuners/tda18212.c
index 05a4ac9edb6b..15b09f8d85c0 100644
--- a/drivers/media/tuners/tda18212.c
+++ b/drivers/media/tuners/tda18212.c
@@ -306,7 +306,8 @@ struct dvb_frontend *tda18212_attach(struct dvb_frontend *fe,
{
struct tda18212_priv *priv = NULL;
int ret;
- u8 val;
+ u8 chip_id = chip_id;
+ char *version;
priv = kzalloc(sizeof(struct tda18212_priv), GFP_KERNEL);
if (priv == NULL)
@@ -320,26 +321,38 @@ struct dvb_frontend *tda18212_attach(struct dvb_frontend *fe,
fe->ops.i2c_gate_ctrl(fe, 1); /* open I2C-gate */
/* check if the tuner is there */
- ret = tda18212_rd_reg(priv, 0x00, &val);
+ ret = tda18212_rd_reg(priv, 0x00, &chip_id);
+ dev_dbg(&priv->i2c->dev, "%s: chip_id=%02x\n", __func__, chip_id);
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe, 0); /* close I2C-gate */
- if (!ret)
- dev_dbg(&priv->i2c->dev, "%s: chip id=%02x\n", __func__, val);
- if (ret || val != 0xc7) {
- kfree(priv);
- return NULL;
+ if (ret)
+ goto err;
+
+ switch (chip_id) {
+ case 0xc7:
+ version = "M"; /* master */
+ break;
+ case 0x47:
+ version = "S"; /* slave */
+ break;
+ default:
+ goto err;
}
dev_info(&priv->i2c->dev,
- "%s: NXP TDA18212HN successfully identified\n",
- KBUILD_MODNAME);
+ "%s: NXP TDA18212HN/%s successfully identified\n",
+ KBUILD_MODNAME, version);
memcpy(&fe->ops.tuner_ops, &tda18212_tuner_ops,
sizeof(struct dvb_tuner_ops));
return fe;
+err:
+ dev_dbg(&i2c->dev, "%s: failed=%d\n", __func__, ret);
+ kfree(priv);
+ return NULL;
}
EXPORT_SYMBOL(tda18212_attach);