Commit 5741f4af authored by Brad Love's avatar Brad Love Committed by Mauro Carvalho Chehab

media: si2157: Check error status bit on cmd execute

Check error status bit on command execute, if error bit is
set return -EAGAIN. Ignore -EAGAIN in probe during device check.
Signed-off-by: default avatarBrad Love <brad@nextdimension.cc>
Signed-off-by: default avatarSean Young <sean@mess.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 5714e84f
...@@ -47,14 +47,20 @@ static int si2157_cmd_execute(struct i2c_client *client, struct si2157_cmd *cmd) ...@@ -47,14 +47,20 @@ static int si2157_cmd_execute(struct i2c_client *client, struct si2157_cmd *cmd)
break; break;
} }
dev_dbg(&client->dev, "cmd execution took %d ms\n", dev_dbg(&client->dev, "cmd execution took %d ms, status=%x\n",
jiffies_to_msecs(jiffies) - jiffies_to_msecs(jiffies) -
(jiffies_to_msecs(timeout) - TIMEOUT)); (jiffies_to_msecs(timeout) - TIMEOUT),
cmd->args[0]);
if (!((cmd->args[0] >> 7) & 0x01)) { if (!((cmd->args[0] >> 7) & 0x01)) {
ret = -ETIMEDOUT; ret = -ETIMEDOUT;
goto err_mutex_unlock; goto err_mutex_unlock;
} }
/* check error status bit */
if (cmd->args[0] & 0x40) {
ret = -EAGAIN;
goto err_mutex_unlock;
}
} }
mutex_unlock(&dev->i2c_mutex); mutex_unlock(&dev->i2c_mutex);
...@@ -106,7 +112,7 @@ static int si2157_init(struct dvb_frontend *fe) ...@@ -106,7 +112,7 @@ static int si2157_init(struct dvb_frontend *fe)
} }
cmd.rlen = 1; cmd.rlen = 1;
ret = si2157_cmd_execute(client, &cmd); ret = si2157_cmd_execute(client, &cmd);
if (ret) if (ret && (dev->chiptype != SI2157_CHIPTYPE_SI2141 || ret != -EAGAIN))
goto err; goto err;
/* Si2141 needs a second command before it answers the revision query */ /* Si2141 needs a second command before it answers the revision query */
...@@ -478,7 +484,7 @@ static int si2157_probe(struct i2c_client *client, ...@@ -478,7 +484,7 @@ static int si2157_probe(struct i2c_client *client,
cmd.wlen = 0; cmd.wlen = 0;
cmd.rlen = 1; cmd.rlen = 1;
ret = si2157_cmd_execute(client, &cmd); ret = si2157_cmd_execute(client, &cmd);
if (ret) if (ret && ret != -EAGAIN)
goto err_kfree; goto err_kfree;
memcpy(&fe->ops.tuner_ops, &si2157_ops, sizeof(struct dvb_tuner_ops)); memcpy(&fe->ops.tuner_ops, &si2157_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