* [PATCH] media: rtl2832_sdr: check all register writes in rtl2832_sdr_set_adc()
@ 2026-09-02 19:35 Sergey Shtylyov
0 siblings, 0 replies; only message in thread
From: Sergey Shtylyov @ 2026-09-02 19:35 UTC (permalink / raw)
To: Mauro Carvalho Chehab, linux-media; +Cc: Sergey Shtylyov
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
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-09-02 19:36 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-02 19:35 [PATCH] media: rtl2832_sdr: check all register writes in rtl2832_sdr_set_adc() Sergey Shtylyov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox