Linux Media Controller development
 help / color / mirror / Atom feed
From: Sergey Shtylyov <s.shtylyov@auroraos.dev>
To: Mauro Carvalho Chehab <mchehab@kernel.org>,
	<linux-media@vger.kernel.org>
Cc: Sergey Shtylyov <s.shtylyov@auroraos.dev>
Subject: [PATCH] media: rtl2832_sdr: check all register writes in rtl2832_sdr_set_adc()
Date: Wed, 2 Sep 2026 22:35:41 +0300	[thread overview]
Message-ID: <20260902193542.55451-1-s.shtylyov@auroraos.dev> (raw)

In rtl2832_sdr_set_adc(), the register writes done inside the *switch*
statement are not checked for errors, however the assignments to the ret
variable are done anyway. Add the missing checks, using the ?: operator
in order to save on LoC -- the recent gcc/clang even manage to generate
very decent code out of this crap... :-)

Found by Linux Verification Center (linuxtesting.org) with the Svace static
analysis tool.

Signed-off-by: Sergey Shtylyov <s.shtylyov@auroraos.dev>

---
The patch is against the next branch of the linuxtv.org/media.git repo...

 drivers/media/dvb-frontends/rtl2832_sdr.c | 206 +++++++++++-----------
 1 file changed, 104 insertions(+), 102 deletions(-)

diff --git a/drivers/media/dvb-frontends/rtl2832_sdr.c b/drivers/media/dvb-frontends/rtl2832_sdr.c
index 0330e7f0881a..cefe6890e983 100644
--- a/drivers/media/dvb-frontends/rtl2832_sdr.c
+++ b/drivers/media/dvb-frontends/rtl2832_sdr.c
@@ -606,123 +606,125 @@ static int rtl2832_sdr_set_adc(struct rtl2832_sdr_dev *dev)
 	switch (pdata->tuner) {
 	case RTL2832_SDR_TUNER_E4000:
 		ret = regmap_write(dev->regmap, 0x112, 0x5a);
-		ret = regmap_write(dev->regmap, 0x102, 0x40);
-		ret = regmap_write(dev->regmap, 0x103, 0x5a);
-		ret = regmap_write(dev->regmap, 0x1c7, 0x30);
-		ret = regmap_write(dev->regmap, 0x104, 0xd0);
-		ret = regmap_write(dev->regmap, 0x105, 0xbe);
-		ret = regmap_write(dev->regmap, 0x1c8, 0x18);
-		ret = regmap_write(dev->regmap, 0x106, 0x35);
-		ret = regmap_write(dev->regmap, 0x1c9, 0x21);
-		ret = regmap_write(dev->regmap, 0x1ca, 0x21);
-		ret = regmap_write(dev->regmap, 0x1cb, 0x00);
-		ret = regmap_write(dev->regmap, 0x107, 0x40);
-		ret = regmap_write(dev->regmap, 0x1cd, 0x10);
-		ret = regmap_write(dev->regmap, 0x1ce, 0x10);
-		ret = regmap_write(dev->regmap, 0x108, 0x80);
-		ret = regmap_write(dev->regmap, 0x109, 0x7f);
-		ret = regmap_write(dev->regmap, 0x10a, 0x80);
-		ret = regmap_write(dev->regmap, 0x10b, 0x7f);
-		ret = regmap_write(dev->regmap, 0x00e, 0xfc);
-		ret = regmap_write(dev->regmap, 0x00e, 0xfc);
-		ret = regmap_write(dev->regmap, 0x011, 0xd4);
-		ret = regmap_write(dev->regmap, 0x1e5, 0xf0);
-		ret = regmap_write(dev->regmap, 0x1d9, 0x00);
-		ret = regmap_write(dev->regmap, 0x1db, 0x00);
-		ret = regmap_write(dev->regmap, 0x1dd, 0x14);
-		ret = regmap_write(dev->regmap, 0x1de, 0xec);
-		ret = regmap_write(dev->regmap, 0x1d8, 0x0c);
-		ret = regmap_write(dev->regmap, 0x1e6, 0x02);
-		ret = regmap_write(dev->regmap, 0x1d7, 0x09);
-		ret = regmap_write(dev->regmap, 0x00d, 0x83);
-		ret = regmap_write(dev->regmap, 0x010, 0x49);
-		ret = regmap_write(dev->regmap, 0x00d, 0x87);
-		ret = regmap_write(dev->regmap, 0x00d, 0x85);
-		ret = regmap_write(dev->regmap, 0x013, 0x02);
+		ret = ret ?: regmap_write(dev->regmap, 0x102, 0x40);
+		ret = ret ?: regmap_write(dev->regmap, 0x103, 0x5a);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c7, 0x30);
+		ret = ret ?: regmap_write(dev->regmap, 0x104, 0xd0);
+		ret = ret ?: regmap_write(dev->regmap, 0x105, 0xbe);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c8, 0x18);
+		ret = ret ?: regmap_write(dev->regmap, 0x106, 0x35);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c9, 0x21);
+		ret = ret ?: regmap_write(dev->regmap, 0x1ca, 0x21);
+		ret = ret ?: regmap_write(dev->regmap, 0x1cb, 0x00);
+		ret = ret ?: regmap_write(dev->regmap, 0x107, 0x40);
+		ret = ret ?: regmap_write(dev->regmap, 0x1cd, 0x10);
+		ret = ret ?: regmap_write(dev->regmap, 0x1ce, 0x10);
+		ret = ret ?: regmap_write(dev->regmap, 0x108, 0x80);
+		ret = ret ?: regmap_write(dev->regmap, 0x109, 0x7f);
+		ret = ret ?: regmap_write(dev->regmap, 0x10a, 0x80);
+		ret = ret ?: regmap_write(dev->regmap, 0x10b, 0x7f);
+		ret = ret ?: regmap_write(dev->regmap, 0x00e, 0xfc);
+		ret = ret ?: regmap_write(dev->regmap, 0x00e, 0xfc);
+		ret = ret ?: regmap_write(dev->regmap, 0x011, 0xd4);
+		ret = ret ?: regmap_write(dev->regmap, 0x1e5, 0xf0);
+		ret = ret ?: regmap_write(dev->regmap, 0x1d9, 0x00);
+		ret = ret ?: regmap_write(dev->regmap, 0x1db, 0x00);
+		ret = ret ?: regmap_write(dev->regmap, 0x1dd, 0x14);
+		ret = ret ?: regmap_write(dev->regmap, 0x1de, 0xec);
+		ret = ret ?: regmap_write(dev->regmap, 0x1d8, 0x0c);
+		ret = ret ?: regmap_write(dev->regmap, 0x1e6, 0x02);
+		ret = ret ?: regmap_write(dev->regmap, 0x1d7, 0x09);
+		ret = ret ?: regmap_write(dev->regmap, 0x00d, 0x83);
+		ret = ret ?: regmap_write(dev->regmap, 0x010, 0x49);
+		ret = ret ?: regmap_write(dev->regmap, 0x00d, 0x87);
+		ret = ret ?: regmap_write(dev->regmap, 0x00d, 0x85);
+		ret = ret ?: regmap_write(dev->regmap, 0x013, 0x02);
 		break;
 	case RTL2832_SDR_TUNER_FC0012:
 	case RTL2832_SDR_TUNER_FC0013:
 		ret = regmap_write(dev->regmap, 0x112, 0x5a);
-		ret = regmap_write(dev->regmap, 0x102, 0x40);
-		ret = regmap_write(dev->regmap, 0x103, 0x5a);
-		ret = regmap_write(dev->regmap, 0x1c7, 0x2c);
-		ret = regmap_write(dev->regmap, 0x104, 0xcc);
-		ret = regmap_write(dev->regmap, 0x105, 0xbe);
-		ret = regmap_write(dev->regmap, 0x1c8, 0x16);
-		ret = regmap_write(dev->regmap, 0x106, 0x35);
-		ret = regmap_write(dev->regmap, 0x1c9, 0x21);
-		ret = regmap_write(dev->regmap, 0x1ca, 0x21);
-		ret = regmap_write(dev->regmap, 0x1cb, 0x00);
-		ret = regmap_write(dev->regmap, 0x107, 0x40);
-		ret = regmap_write(dev->regmap, 0x1cd, 0x10);
-		ret = regmap_write(dev->regmap, 0x1ce, 0x10);
-		ret = regmap_write(dev->regmap, 0x108, 0x80);
-		ret = regmap_write(dev->regmap, 0x109, 0x7f);
-		ret = regmap_write(dev->regmap, 0x10a, 0x80);
-		ret = regmap_write(dev->regmap, 0x10b, 0x7f);
-		ret = regmap_write(dev->regmap, 0x00e, 0xfc);
-		ret = regmap_write(dev->regmap, 0x00e, 0xfc);
-		ret = regmap_bulk_write(dev->regmap, 0x011, "\xe9\xbf", 2);
-		ret = regmap_write(dev->regmap, 0x1e5, 0xf0);
-		ret = regmap_write(dev->regmap, 0x1d9, 0x00);
-		ret = regmap_write(dev->regmap, 0x1db, 0x00);
-		ret = regmap_write(dev->regmap, 0x1dd, 0x11);
-		ret = regmap_write(dev->regmap, 0x1de, 0xef);
-		ret = regmap_write(dev->regmap, 0x1d8, 0x0c);
-		ret = regmap_write(dev->regmap, 0x1e6, 0x02);
-		ret = regmap_write(dev->regmap, 0x1d7, 0x09);
+		ret = ret ?: regmap_write(dev->regmap, 0x102, 0x40);
+		ret = ret ?: regmap_write(dev->regmap, 0x103, 0x5a);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c7, 0x2c);
+		ret = ret ?: regmap_write(dev->regmap, 0x104, 0xcc);
+		ret = ret ?: regmap_write(dev->regmap, 0x105, 0xbe);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c8, 0x16);
+		ret = ret ?: regmap_write(dev->regmap, 0x106, 0x35);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c9, 0x21);
+		ret = ret ?: regmap_write(dev->regmap, 0x1ca, 0x21);
+		ret = ret ?: regmap_write(dev->regmap, 0x1cb, 0x00);
+		ret = ret ?: regmap_write(dev->regmap, 0x107, 0x40);
+		ret = ret ?: regmap_write(dev->regmap, 0x1cd, 0x10);
+		ret = ret ?: regmap_write(dev->regmap, 0x1ce, 0x10);
+		ret = ret ?: regmap_write(dev->regmap, 0x108, 0x80);
+		ret = ret ?: regmap_write(dev->regmap, 0x109, 0x7f);
+		ret = ret ?: regmap_write(dev->regmap, 0x10a, 0x80);
+		ret = ret ?: regmap_write(dev->regmap, 0x10b, 0x7f);
+		ret = ret ?: regmap_write(dev->regmap, 0x00e, 0xfc);
+		ret = ret ?: regmap_write(dev->regmap, 0x00e, 0xfc);
+		ret = ret ?: regmap_bulk_write(dev->regmap, 0x011, "\xe9\xbf", 2);
+		ret = ret ?: regmap_write(dev->regmap, 0x1e5, 0xf0);
+		ret = ret ?: regmap_write(dev->regmap, 0x1d9, 0x00);
+		ret = ret ?: regmap_write(dev->regmap, 0x1db, 0x00);
+		ret = ret ?: regmap_write(dev->regmap, 0x1dd, 0x11);
+		ret = ret ?: regmap_write(dev->regmap, 0x1de, 0xef);
+		ret = ret ?: regmap_write(dev->regmap, 0x1d8, 0x0c);
+		ret = ret ?: regmap_write(dev->regmap, 0x1e6, 0x02);
+		ret = ret ?: regmap_write(dev->regmap, 0x1d7, 0x09);
 		break;
 	case RTL2832_SDR_TUNER_R820T:
 	case RTL2832_SDR_TUNER_R828D:
 		ret = regmap_write(dev->regmap, 0x112, 0x5a);
-		ret = regmap_write(dev->regmap, 0x102, 0x40);
-		ret = regmap_write(dev->regmap, 0x115, 0x01);
-		ret = regmap_write(dev->regmap, 0x103, 0x80);
-		ret = regmap_write(dev->regmap, 0x1c7, 0x24);
-		ret = regmap_write(dev->regmap, 0x104, 0xcc);
-		ret = regmap_write(dev->regmap, 0x105, 0xbe);
-		ret = regmap_write(dev->regmap, 0x1c8, 0x14);
-		ret = regmap_write(dev->regmap, 0x106, 0x35);
-		ret = regmap_write(dev->regmap, 0x1c9, 0x21);
-		ret = regmap_write(dev->regmap, 0x1ca, 0x21);
-		ret = regmap_write(dev->regmap, 0x1cb, 0x00);
-		ret = regmap_write(dev->regmap, 0x107, 0x40);
-		ret = regmap_write(dev->regmap, 0x1cd, 0x10);
-		ret = regmap_write(dev->regmap, 0x1ce, 0x10);
-		ret = regmap_write(dev->regmap, 0x108, 0x80);
-		ret = regmap_write(dev->regmap, 0x109, 0x7f);
-		ret = regmap_write(dev->regmap, 0x10a, 0x80);
-		ret = regmap_write(dev->regmap, 0x10b, 0x7f);
-		ret = regmap_write(dev->regmap, 0x00e, 0xfc);
-		ret = regmap_write(dev->regmap, 0x00e, 0xfc);
-		ret = regmap_write(dev->regmap, 0x011, 0xf4);
+		ret = ret ?: regmap_write(dev->regmap, 0x102, 0x40);
+		ret = ret ?: regmap_write(dev->regmap, 0x115, 0x01);
+		ret = ret ?: regmap_write(dev->regmap, 0x103, 0x80);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c7, 0x24);
+		ret = ret ?: regmap_write(dev->regmap, 0x104, 0xcc);
+		ret = ret ?: regmap_write(dev->regmap, 0x105, 0xbe);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c8, 0x14);
+		ret = ret ?: regmap_write(dev->regmap, 0x106, 0x35);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c9, 0x21);
+		ret = ret ?: regmap_write(dev->regmap, 0x1ca, 0x21);
+		ret = ret ?: regmap_write(dev->regmap, 0x1cb, 0x00);
+		ret = ret ?: regmap_write(dev->regmap, 0x107, 0x40);
+		ret = ret ?: regmap_write(dev->regmap, 0x1cd, 0x10);
+		ret = ret ?: regmap_write(dev->regmap, 0x1ce, 0x10);
+		ret = ret ?: regmap_write(dev->regmap, 0x108, 0x80);
+		ret = ret ?: regmap_write(dev->regmap, 0x109, 0x7f);
+		ret = ret ?: regmap_write(dev->regmap, 0x10a, 0x80);
+		ret = ret ?: regmap_write(dev->regmap, 0x10b, 0x7f);
+		ret = ret ?: regmap_write(dev->regmap, 0x00e, 0xfc);
+		ret = ret ?: regmap_write(dev->regmap, 0x00e, 0xfc);
+		ret = ret ?: regmap_write(dev->regmap, 0x011, 0xf4);
 		break;
 	case RTL2832_SDR_TUNER_FC2580:
 		ret = regmap_write(dev->regmap, 0x112, 0x39);
-		ret = regmap_write(dev->regmap, 0x102, 0x40);
-		ret = regmap_write(dev->regmap, 0x103, 0x5a);
-		ret = regmap_write(dev->regmap, 0x1c7, 0x2c);
-		ret = regmap_write(dev->regmap, 0x104, 0xcc);
-		ret = regmap_write(dev->regmap, 0x105, 0xbe);
-		ret = regmap_write(dev->regmap, 0x1c8, 0x16);
-		ret = regmap_write(dev->regmap, 0x106, 0x35);
-		ret = regmap_write(dev->regmap, 0x1c9, 0x21);
-		ret = regmap_write(dev->regmap, 0x1ca, 0x21);
-		ret = regmap_write(dev->regmap, 0x1cb, 0x00);
-		ret = regmap_write(dev->regmap, 0x107, 0x40);
-		ret = regmap_write(dev->regmap, 0x1cd, 0x10);
-		ret = regmap_write(dev->regmap, 0x1ce, 0x10);
-		ret = regmap_write(dev->regmap, 0x108, 0x80);
-		ret = regmap_write(dev->regmap, 0x109, 0x7f);
-		ret = regmap_write(dev->regmap, 0x10a, 0x9c);
-		ret = regmap_write(dev->regmap, 0x10b, 0x7f);
-		ret = regmap_write(dev->regmap, 0x00e, 0xfc);
-		ret = regmap_write(dev->regmap, 0x00e, 0xfc);
-		ret = regmap_bulk_write(dev->regmap, 0x011, "\xe9\xf4", 2);
+		ret = ret ?: regmap_write(dev->regmap, 0x102, 0x40);
+		ret = ret ?: regmap_write(dev->regmap, 0x103, 0x5a);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c7, 0x2c);
+		ret = ret ?: regmap_write(dev->regmap, 0x104, 0xcc);
+		ret = ret ?: regmap_write(dev->regmap, 0x105, 0xbe);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c8, 0x16);
+		ret = ret ?: regmap_write(dev->regmap, 0x106, 0x35);
+		ret = ret ?: regmap_write(dev->regmap, 0x1c9, 0x21);
+		ret = ret ?: regmap_write(dev->regmap, 0x1ca, 0x21);
+		ret = ret ?: regmap_write(dev->regmap, 0x1cb, 0x00);
+		ret = ret ?: regmap_write(dev->regmap, 0x107, 0x40);
+		ret = ret ?: regmap_write(dev->regmap, 0x1cd, 0x10);
+		ret = ret ?: regmap_write(dev->regmap, 0x1ce, 0x10);
+		ret = ret ?: regmap_write(dev->regmap, 0x108, 0x80);
+		ret = ret ?: regmap_write(dev->regmap, 0x109, 0x7f);
+		ret = ret ?: regmap_write(dev->regmap, 0x10a, 0x9c);
+		ret = ret ?: regmap_write(dev->regmap, 0x10b, 0x7f);
+		ret = ret ?: regmap_write(dev->regmap, 0x00e, 0xfc);
+		ret = ret ?: regmap_write(dev->regmap, 0x00e, 0xfc);
+		ret = ret ?: regmap_bulk_write(dev->regmap, 0x011, "\xe9\xf4", 2);
 		break;
 	default:
 		dev_notice(&pdev->dev, "Unsupported tuner\n");
 	}
+	if (ret)
+		goto err;
 
 	/* software reset */
 	ret = regmap_update_bits(dev->regmap, 0x101, 0x04, 0x04);
-- 
2.55.0

                 reply	other threads:[~2026-09-02 19:36 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260902193542.55451-1-s.shtylyov@auroraos.dev \
    --to=s.shtylyov@auroraos.dev \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox