Linux Media Controller development
 help / color / mirror / Atom feed
* [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