Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4688ba5b authored by Brad Love's avatar Brad Love Committed by Greg Kroah-Hartman
Browse files

media: si2157: Better check for running tuner in init



[ Upstream commit e955f959ac52e145f27ff2be9078b646d0352af0 ]

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: 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>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 7cfcf05c
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -84,24 +84,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);