Hello Philipp,
On Thu, Jun 08, 2023 at 04:11:14PM +0200, Philipp Zabel wrote:
The initial PWM state returned by pwm_init_state() has a duty cycle
of 0 ns.
This is only true for drivers without a .get_state() callback, isn't it?
quoted hunk ↗ jump to hunk
To avoid backlight flicker when taking over an enabled
display from the bootloader, skip the initial pwm_apply_state()
and leave the PWM be until backlight_update_state() will apply the
state with the desired brightness.
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
---
With a PWM driver that allows to inherit PWM state from the bootloader,
postponing the initial pwm_apply_state() with 0 ns duty cycle allows to
set the desired duty cycle before the PWM is set, avoiding a short flicker
if the backlight was previously enabled and will be enabled again.
---
drivers/video/backlight/pwm_bl.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index fce412234d10..47a917038f58 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -531,12 +531,10 @@ static int pwm_backlight_probe(struct platform_device *pdev)
if (!state.period && (data->pwm_period_ns > 0))
state.period = data->pwm_period_ns;
- ret = pwm_apply_state(pb->pwm, &state);
- if (ret) {
- dev_err(&pdev->dev, "failed to apply initial PWM state: %d\n",
- ret);
- goto err_alloc;
- }
+ /*
+ * No need to apply initial state, except in the error path.
Why do you want to modify the PWM in the error path? I would have
expected not touching it at all in .probe() is fine?!
+ * State will be applied by backlight_update_status() on success.
+ */
memset(&props, 0, sizeof(struct backlight_properties));
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | https://www.pengutronix.de/ |