media: si2157: Better check for running tuner in init
Getting the Xtal trim property to check if running is less error prone. Reset if_frequency if state is unknown. Replaces the previous "garbage check". Signed-off-by: Brad Love <brad@nextdimension.cc> Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
5741f4affb
commit
e955f959ac
|
@ -81,24 +81,23 @@ static int si2157_init(struct dvb_frontend *fe)
|
||||||
struct si2157_cmd cmd;
|
struct si2157_cmd cmd;
|
||||||
const struct firmware *fw;
|
const struct firmware *fw;
|
||||||
const char *fw_name;
|
const char *fw_name;
|
||||||
unsigned int uitmp, chip_id;
|
unsigned int chip_id, xtal_trim;
|
||||||
|
|
||||||
dev_dbg(&client->dev, "\n");
|
dev_dbg(&client->dev, "\n");
|
||||||
|
|
||||||
/* Returned IF frequency is garbage when firmware is not running */
|
/* Try to get Xtal trim property, to verify tuner still running */
|
||||||
memcpy(cmd.args, "\x15\x00\x06\x07", 4);
|
memcpy(cmd.args, "\x15\x00\x04\x02", 4);
|
||||||
cmd.wlen = 4;
|
cmd.wlen = 4;
|
||||||
cmd.rlen = 4;
|
cmd.rlen = 4;
|
||||||
ret = si2157_cmd_execute(client, &cmd);
|
ret = si2157_cmd_execute(client, &cmd);
|
||||||
if (ret)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
uitmp = cmd.args[2] << 0 | cmd.args[3] << 8;
|
xtal_trim = cmd.args[2] | (cmd.args[3] << 8);
|
||||||
dev_dbg(&client->dev, "if_frequency kHz=%u\n", uitmp);
|
|
||||||
|
|
||||||
if (uitmp == dev->if_frequency / 1000)
|
if (ret == 0 && xtal_trim < 16)
|
||||||
goto warm;
|
goto warm;
|
||||||
|
|
||||||
|
dev->if_frequency = 0; /* we no longer know current tuner state */
|
||||||
|
|
||||||
/* power up */
|
/* power up */
|
||||||
if (dev->chiptype == SI2157_CHIPTYPE_SI2146) {
|
if (dev->chiptype == SI2157_CHIPTYPE_SI2146) {
|
||||||
memcpy(cmd.args, "\xc0\x05\x01\x00\x00\x0b\x00\x00\x01", 9);
|
memcpy(cmd.args, "\xc0\x05\x01\x00\x00\x0b\x00\x00\x01", 9);
|
||||||
|
|
Loading…
Reference in New Issue