lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20250530043300.89377-1-andreluizrodriguescastro@gmail.com>
Date: Fri, 30 May 2025 01:33:00 -0300
From: Andre Luiz da Nobrega <andreluizrodriguescastro@...il.com>
To: lee@...nel.org
Cc: jingoohan1@...il.com,
	linux-kernel@...r.kernel.org,
	dri-devel@...ts.freedesktop.org,
	Andre Luiz da Nobrega <andreluizrodriguescastro@...il.com>
Subject: [PATCH] backlight: lm3630a: Use scoped iterator to simplify error handling

This avoids the need to manually call fwnode_handle_put() in error paths.
Prevents potential memory leaks if future error paths forget the cleanup.

Signed-off-by: Andre Luiz da Nobrega <andreluizrodriguescastro@...il.com>
---
 drivers/video/backlight/lm3630a_bl.c | 121 +++++++++++++--------------
 1 file changed, 56 insertions(+), 65 deletions(-)

diff --git a/drivers/video/backlight/lm3630a_bl.c b/drivers/video/backlight/lm3630a_bl.c
index 37651c2b9393..35a13bd38133 100644
--- a/drivers/video/backlight/lm3630a_bl.c
+++ b/drivers/video/backlight/lm3630a_bl.c
@@ -16,29 +16,29 @@
 #include <linux/pwm.h>
 #include <linux/platform_data/lm3630a_bl.h>
 
-#define REG_CTRL	0x00
-#define REG_BOOST	0x02
-#define REG_CONFIG	0x01
-#define REG_BRT_A	0x03
-#define REG_BRT_B	0x04
-#define REG_I_A		0x05
-#define REG_I_B		0x06
-#define REG_INT_STATUS	0x09
-#define REG_INT_EN	0x0A
-#define REG_FAULT	0x0B
-#define REG_PWM_OUTLOW	0x12
-#define REG_PWM_OUTHIGH	0x13
-#define REG_FILTER_STRENGTH	0x50
-#define REG_MAX		0x50
-
-#define INT_DEBOUNCE_MSEC	10
-
-#define LM3630A_BANK_0		0
-#define LM3630A_BANK_1		1
-
-#define LM3630A_NUM_SINKS	2
-#define LM3630A_SINK_0		0
-#define LM3630A_SINK_1		1
+#define REG_CTRL 0x00
+#define REG_BOOST 0x02
+#define REG_CONFIG 0x01
+#define REG_BRT_A 0x03
+#define REG_BRT_B 0x04
+#define REG_I_A 0x05
+#define REG_I_B 0x06
+#define REG_INT_STATUS 0x09
+#define REG_INT_EN 0x0A
+#define REG_FAULT 0x0B
+#define REG_PWM_OUTLOW 0x12
+#define REG_PWM_OUTHIGH 0x13
+#define REG_FILTER_STRENGTH 0x50
+#define REG_MAX 0x50
+
+#define INT_DEBOUNCE_MSEC 10
+
+#define LM3630A_BANK_0 0
+#define LM3630A_BANK_1 1
+
+#define LM3630A_NUM_SINKS 2
+#define LM3630A_SINK_0 0
+#define LM3630A_SINK_1 1
 
 struct lm3630a_chip {
 	struct device *dev;
@@ -67,15 +67,14 @@ static int lm3630a_read(struct lm3630a_chip *pchip, unsigned int reg)
 	return reg_val & 0xFF;
 }
 
-static int lm3630a_write(struct lm3630a_chip *pchip,
-			 unsigned int reg, unsigned int data)
+static int lm3630a_write(struct lm3630a_chip *pchip, unsigned int reg,
+			 unsigned int data)
 {
 	return regmap_write(pchip->regmap, reg, data);
 }
 
-static int lm3630a_update(struct lm3630a_chip *pchip,
-			  unsigned int reg, unsigned int mask,
-			  unsigned int data)
+static int lm3630a_update(struct lm3630a_chip *pchip, unsigned int reg,
+			  unsigned int mask, unsigned int data)
 {
 	return regmap_update_bits(pchip->regmap, reg, mask, data);
 }
@@ -158,9 +157,9 @@ static int lm3630a_intr_config(struct lm3630a_chip *pchip)
 		dev_err(pchip->dev, "create irq thread fail\n");
 		return -ENOMEM;
 	}
-	if (request_threaded_irq
-	    (pchip->irq, NULL, lm3630a_isr_func,
-	     IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "lm3630a_irq", pchip)) {
+	if (request_threaded_irq(pchip->irq, NULL, lm3630a_isr_func,
+				 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+				 "lm3630a_irq", pchip)) {
 		dev_err(pchip->dev, "request threaded irq fail\n");
 		destroy_workqueue(pchip->irqthread);
 		return -ENOMEM;
@@ -208,8 +207,8 @@ static int lm3630a_bank_a_update_status(struct backlight_device *bl)
 		/* turn the string off  */
 		ret |= lm3630a_update(pchip, REG_CTRL, LM3630A_LEDA_ENABLE, 0);
 	else
-		ret |= lm3630a_update(pchip, REG_CTRL,
-				      LM3630A_LEDA_ENABLE, LM3630A_LEDA_ENABLE);
+		ret |= lm3630a_update(pchip, REG_CTRL, LM3630A_LEDA_ENABLE,
+				      LM3630A_LEDA_ENABLE);
 	if (ret < 0)
 		goto out_i2c_err;
 	return 0;
@@ -283,8 +282,8 @@ static int lm3630a_bank_b_update_status(struct backlight_device *bl)
 		/* turn the string off  */
 		ret |= lm3630a_update(pchip, REG_CTRL, LM3630A_LEDB_ENABLE, 0);
 	else
-		ret |= lm3630a_update(pchip, REG_CTRL,
-				      LM3630A_LEDB_ENABLE, LM3630A_LEDB_ENABLE);
+		ret |= lm3630a_update(pchip, REG_CTRL, LM3630A_LEDB_ENABLE,
+				      LM3630A_LEDB_ENABLE);
 	if (ret < 0)
 		goto out_i2c_err;
 	return 0;
@@ -345,10 +344,9 @@ static int lm3630a_backlight_register(struct lm3630a_chip *pchip)
 		props.brightness = pdata->leda_init_brt;
 		props.max_brightness = pdata->leda_max_brt;
 		label = pdata->leda_label ? pdata->leda_label : "lm3630a_leda";
-		pchip->bleda =
-		    devm_backlight_device_register(pchip->dev, label,
-						   pchip->dev, pchip,
-						   &lm3630a_bank_a_ops, &props);
+		pchip->bleda = devm_backlight_device_register(
+			pchip->dev, label, pchip->dev, pchip,
+			&lm3630a_bank_a_ops, &props);
 		if (IS_ERR(pchip->bleda))
 			return PTR_ERR(pchip->bleda);
 	}
@@ -358,10 +356,9 @@ static int lm3630a_backlight_register(struct lm3630a_chip *pchip)
 		props.brightness = pdata->ledb_init_brt;
 		props.max_brightness = pdata->ledb_max_brt;
 		label = pdata->ledb_label ? pdata->ledb_label : "lm3630a_ledb";
-		pchip->bledb =
-		    devm_backlight_device_register(pchip->dev, label,
-						   pchip->dev, pchip,
-						   &lm3630a_bank_b_ops, &props);
+		pchip->bledb = devm_backlight_device_register(
+			pchip->dev, label, pchip->dev, pchip,
+			&lm3630a_bank_b_ops, &props);
 		if (IS_ERR(pchip->bledb))
 			return PTR_ERR(pchip->bledb);
 	}
@@ -392,7 +389,8 @@ static int lm3630a_parse_led_sources(struct fwnode_handle *node,
 		return ret;
 
 	for (i = 0; i < num_sources; i++) {
-		if (sources[i] != LM3630A_SINK_0 && sources[i] != LM3630A_SINK_1)
+		if (sources[i] != LM3630A_SINK_0 &&
+		    sources[i] != LM3630A_SINK_1)
 			return -EINVAL;
 
 		ret |= BIT(sources[i]);
@@ -425,23 +423,20 @@ static int lm3630a_parse_bank(struct lm3630a_platform_data *pdata,
 
 	*seen_led_sources |= led_sources;
 
-	linear = fwnode_property_read_bool(node,
-					   "ti,linear-mapping-mode");
+	linear = fwnode_property_read_bool(node, "ti,linear-mapping-mode");
 	if (bank) {
 		if (led_sources & BIT(LM3630A_SINK_0) ||
 		    !(led_sources & BIT(LM3630A_SINK_1)))
 			return -EINVAL;
 
-		pdata->ledb_ctrl = linear ?
-			LM3630A_LEDB_ENABLE_LINEAR :
-			LM3630A_LEDB_ENABLE;
+		pdata->ledb_ctrl = linear ? LM3630A_LEDB_ENABLE_LINEAR :
+					    LM3630A_LEDB_ENABLE;
 	} else {
 		if (!(led_sources & BIT(LM3630A_SINK_0)))
 			return -EINVAL;
 
-		pdata->leda_ctrl = linear ?
-			LM3630A_LEDA_ENABLE_LINEAR :
-			LM3630A_LEDA_ENABLE;
+		pdata->leda_ctrl = linear ? LM3630A_LEDA_ENABLE_LINEAR :
+					    LM3630A_LEDA_ENABLE;
 
 		if (led_sources & BIT(LM3630A_SINK_1))
 			pdata->ledb_ctrl = LM3630A_LEDB_ON_A;
@@ -455,8 +450,7 @@ static int lm3630a_parse_bank(struct lm3630a_platform_data *pdata,
 			pdata->leda_label = label;
 	}
 
-	ret = fwnode_property_read_u32(node, "default-brightness",
-				       &val);
+	ret = fwnode_property_read_u32(node, "default-brightness", &val);
 	if (!ret) {
 		if (bank)
 			pdata->ledb_init_brt = val;
@@ -479,12 +473,10 @@ static int lm3630a_parse_node(struct lm3630a_chip *pchip,
 			      struct lm3630a_platform_data *pdata)
 {
 	int ret = -ENODEV, seen_led_sources = 0;
-	struct fwnode_handle *node;
 
-	device_for_each_child_node(pchip->dev, node) {
+	device_for_each_child_node_scoped(pchip->dev, node) {
 		ret = lm3630a_parse_bank(pdata, node, &seen_led_sources);
 		if (ret) {
-			fwnode_handle_put(node);
 			return ret;
 		}
 	}
@@ -538,8 +530,8 @@ static int lm3630a_probe(struct i2c_client *client)
 	}
 	pchip->pdata = pdata;
 
-	pchip->enable_gpio = devm_gpiod_get_optional(&client->dev, "enable",
-						GPIOD_OUT_HIGH);
+	pchip->enable_gpio =
+		devm_gpiod_get_optional(&client->dev, "enable", GPIOD_OUT_HIGH);
 	if (IS_ERR(pchip->enable_gpio))
 		return PTR_ERR(pchip->enable_gpio);
 
@@ -595,16 +587,15 @@ static void lm3630a_remove(struct i2c_client *client)
 	}
 }
 
-static const struct i2c_device_id lm3630a_id[] = {
-	{ LM3630A_NAME },
-	{}
-};
+static const struct i2c_device_id lm3630a_id[] = { { LM3630A_NAME }, {} };
 
 MODULE_DEVICE_TABLE(i2c, lm3630a_id);
 
 static const struct of_device_id lm3630a_match_table[] = {
-	{ .compatible = "ti,lm3630a", },
-	{ },
+	{
+		.compatible = "ti,lm3630a",
+	},
+	{},
 };
 
 MODULE_DEVICE_TABLE(of, lm3630a_match_table);
-- 
2.49.0


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ