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