[PATCH v2 04/11] video: backlight-pwm: make power-supply and enable-gpio optional

Johannes Schneider <[email protected]>
Newsgroups org.infradead.lists.barebox
Message-ID <[email protected]>
From: Thomas Haemmerle <[email protected]>

Boards often omit power-supply (rail is always-on) or use enable-gpios
without a discrete supply.  The driver returned -ENODEV when either was
missing, blocking display init.

Switch to regulator_get_optional() so a missing power-supply property
surfaces as -ENODEV (instead of a silent NULL the IS_ERR check never
catches), and handle that case by leaving ->power = NULL.
regulator_enable() / regulator_disable() are already NULL-safe, no
extra guards needed at the call sites.

While here, fix the GPIO descriptor name: gpiod_get_optional() appends
"-gpios" itself, so the previous "enable-gpios" looked for a non-existent
"enable-gpios-gpios" property and never resolved the enable GPIO.  Use
"enable" with GPIOD_ASIS so the boot-time pin state is preserved.

Use dev_errp_probe() for the PWM lookup so the underlying error and
deferred-probe path are propagated correctly; drop an unused 'ret' in
of_backlight_find().

Fixes: 4c7238df6866 ("video: backlight-pwm: switch to gpiod functions")
Signed-off-by: Thomas Haemmerle <[email protected]>
---
 drivers/video/backlight-pwm.c | 16 ++++++++--------
 drivers/video/backlight.c     |  2 +-
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/video/backlight-pwm.c b/drivers/video/backlight-pwm.c
index d3c81114e0..14fad55637 100644
--- a/drivers/video/backlight-pwm.c
+++ b/drivers/video/backlight-pwm.c
@@ -148,7 +148,7 @@ static int pwm_backlight_parse_dt(struct device *dev,
 		pwm_backlight->backlight.brightness_max = pwm_backlight->scale;
 	}
 
-	pwm_backlight->enable_gpio = gpiod_get_optional(dev, "enable-gpios", 0);
+	pwm_backlight->enable_gpio = gpiod_get_optional(dev, "enable", GPIOD_ASIS);
 
 	return 0;
 }
@@ -160,10 +160,8 @@ static int backlight_pwm_of_probe(struct device *dev)
 	struct pwm_device *pwm;
 
 	pwm = of_pwm_request(dev->of_node, NULL);
-	if (IS_ERR(pwm)) {
-		dev_err(dev, "Cannot find PWM device\n");
-		return PTR_ERR(pwm);
-	}
+	if (IS_ERR(pwm))
+		return dev_errp_probe(dev, pwm, "Cannot find PWM device\n");
 
 	pwm_backlight = xzalloc(sizeof(*pwm_backlight));
 	pwm_backlight->pwm = pwm;
@@ -173,10 +171,12 @@ static int backlight_pwm_of_probe(struct device *dev)
 	if (ret)
 		return ret;
 
-	pwm_backlight->power = regulator_get(dev, "power");
+	pwm_backlight->power = regulator_get_optional(dev, "power");
 	if (IS_ERR(pwm_backlight->power)) {
-		dev_err(dev, "Cannot find regulator\n");
-		return PTR_ERR(pwm_backlight->power);
+		if (PTR_ERR(pwm_backlight->power) != -ENODEV)
+			return dev_errp_probe(dev, pwm_backlight->power,
+					      "power supply\n");
+		pwm_backlight->power = NULL;
 	}
 
 	pwm_backlight->backlight.slew_time_ms = 100;
diff --git a/drivers/video/backlight.c b/drivers/video/backlight.c
index 6d8146ee5a..066742fe28 100644
--- a/drivers/video/backlight.c
+++ b/drivers/video/backlight.c
@@ -95,7 +95,7 @@ struct backlight_device *of_backlight_find(struct device_node *node)
 {
 	struct backlight_device *bl;
 
-	of_device_ensure_probed(node);
+	(void)of_device_ensure_probed(node);
 
 	class_for_each_container_of_device(&backlight_class, bl, dev)
 		if (bl->node == node)
-- 
2.43.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.