[PATCH v2 20/30] video: backlight: fix pwm's duty cycle calculation

Dario Binacchi dariobin at libero.it
Sun Sep 6 14:11:50 CEST 2020


For levels equal to the maximum value, the duty cycle must be equal to
the period.

Signed-off-by: Dario Binacchi <dariobin at libero.it>
Reviewed-by: Simon Glass <sjg at chromium.org>
---

(no changes since v1)

 drivers/video/pwm_backlight.c |  2 +-
 test/dm/panel.c               | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/video/pwm_backlight.c b/drivers/video/pwm_backlight.c
index 468a5703bd..199ccc030f 100644
--- a/drivers/video/pwm_backlight.c
+++ b/drivers/video/pwm_backlight.c
@@ -63,7 +63,7 @@ static int set_pwm(struct pwm_backlight_priv *priv)
 	int ret;
 
 	duty_cycle = priv->period_ns * (priv->cur_level - priv->min_level) /
-		(priv->max_level - priv->min_level + 1);
+		(priv->max_level - priv->min_level);
 	ret = pwm_set_config(priv->pwm, priv->channel, priv->period_ns,
 			     duty_cycle);
 	if (ret)
diff --git a/test/dm/panel.c b/test/dm/panel.c
index a840fb4951..49f5ac7169 100644
--- a/test/dm/panel.c
+++ b/test/dm/panel.c
@@ -40,7 +40,7 @@ static int dm_test_panel(struct unit_test_state *uts)
 	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
 					   &enable, &polarity));
 	ut_asserteq(1000, period_ns);
-	ut_asserteq(170 * 1000 / 256, duty_ns);
+	ut_asserteq(170 * 1000 / 255, duty_ns);
 	ut_asserteq(true, enable);
 	ut_asserteq(false, polarity);
 	ut_asserteq(1, sandbox_gpio_get_value(gpio, 1));
@@ -49,29 +49,29 @@ static int dm_test_panel(struct unit_test_state *uts)
 	ut_assertok(panel_set_backlight(dev, 40));
 	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
 					   &enable, &polarity));
-	ut_asserteq(64 * 1000 / 256, duty_ns);
+	ut_asserteq(64 * 1000 / 255, duty_ns);
 
 	ut_assertok(panel_set_backlight(dev, BACKLIGHT_MAX));
 	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
 					   &enable, &polarity));
-	ut_asserteq(255 * 1000 / 256, duty_ns);
+	ut_asserteq(255 * 1000 / 255, duty_ns);
 
 	ut_assertok(panel_set_backlight(dev, BACKLIGHT_MIN));
 	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
 					   &enable, &polarity));
-	ut_asserteq(0 * 1000 / 256, duty_ns);
+	ut_asserteq(0 * 1000 / 255, duty_ns);
 	ut_asserteq(1, sandbox_gpio_get_value(gpio, 1));
 
 	ut_assertok(panel_set_backlight(dev, BACKLIGHT_DEFAULT));
 	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
 					   &enable, &polarity));
 	ut_asserteq(true, enable);
-	ut_asserteq(170 * 1000 / 256, duty_ns);
+	ut_asserteq(170 * 1000 / 255, duty_ns);
 
 	ut_assertok(panel_set_backlight(dev, BACKLIGHT_OFF));
 	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
 					   &enable, &polarity));
-	ut_asserteq(0 * 1000 / 256, duty_ns);
+	ut_asserteq(0 * 1000 / 255, duty_ns);
 	ut_asserteq(0, sandbox_gpio_get_value(gpio, 1));
 	ut_asserteq(false, regulator_get_enable(reg));
 
-- 
2.17.1



More information about the U-Boot mailing list