OSDN Git Service

media: si2157: Better check for running tuner in init
authorBrad Love <brad@nextdimension.cc>
Thu, 14 Nov 2019 20:03:57 +0000 (21:03 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 21 Apr 2020 14:45:44 +0000 (16:45 +0200)
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>
drivers/media/tuners/si2157.c

index 69c625e..e1e23e7 100644 (file)
@@ -81,24 +81,23 @@ static int si2157_init(struct dvb_frontend *fe)
        struct si2157_cmd cmd;
        const struct firmware *fw;
        const char *fw_name;
-       unsigned int uitmp, chip_id;
+       unsigned int chip_id, xtal_trim;
 
        dev_dbg(&client->dev, "\n");
 
-       /* Returned IF frequency is garbage when firmware is not running */
-       memcpy(cmd.args, "\x15\x00\x06\x07", 4);
+       /* Try to get Xtal trim property, to verify tuner still running */
+       memcpy(cmd.args, "\x15\x00\x04\x02", 4);
        cmd.wlen = 4;
        cmd.rlen = 4;
        ret = si2157_cmd_execute(client, &cmd);
-       if (ret)
-               goto err;
 
-       uitmp = cmd.args[2] << 0 | cmd.args[3] << 8;
-       dev_dbg(&client->dev, "if_frequency kHz=%u\n", uitmp);
+       xtal_trim = cmd.args[2] | (cmd.args[3] << 8);
 
-       if (uitmp == dev->if_frequency / 1000)
+       if (ret == 0 && xtal_trim < 16)
                goto warm;
 
+       dev->if_frequency = 0; /* we no longer know current tuner state */
+
        /* power up */
        if (dev->chiptype == SI2157_CHIPTYPE_SI2146) {
                memcpy(cmd.args, "\xc0\x05\x01\x00\x00\x0b\x00\x00\x01", 9);