From: Enric Balletbo i Serra <enric.balletbo@collabora.com>
To: Heiko Stuebner <heiko@sntech.de>,
lee.jones@linaro.org, daniel.thompson@linaro.org,
jingoohan1@gmail.com
Cc: linux-pwm@vger.kernel.org, thierry.reding@gmail.com,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH] backlight: pwm_bl: re-add driver internal enabled tracking
Date: Fri, 9 Nov 2018 11:15:18 +0100 [thread overview]
Message-ID: <3f7df9d3-9293-2bdd-73c8-d4ad01801ab0@collabora.com> (raw)
In-Reply-To: <20181109094857.27079-1-heiko@sntech.de>
Hi Heiko,
Many thanks to catch and dig into this, I did more tests but I was not able to
reproduce the issue with my nfs environment. Anyway the patch looks good to me
and fixes the issue for you, so
On 9/11/18 10:48, Heiko Stuebner wrote:
> Commit e6bcca0890b9 ("backlight: pwm_bl: Switch to using "atomic" PWM API")
> removed the driver internal enabled tracking in favor of simply checking
> the pwm state.
>
> This can lead to issues as all of gpio-, regulator- and pwm-state are used
> to determine the initial state and the bootloader or kernel can leave them
> in an inconsistent state at boot.
>
> In my case on rk3399-kevin, the pwm backlight is build as module and the
> kernel disables the supply regulator as unused while keeping the pwm running
> thus pwm_bl calling pwm_backlight_power_off() during probe and creating an
> unmatched regulator-disable call, as it never got enabled from the pwm-bl
> before.
>
> To prevent these consistency issues, reintroduce the driver-internal
> tracking of the enabled state.
>
> Fixes: e6bcca0890b9 ("backlight: pwm_bl: Switch to using "atomic" PWM API")
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> drivers/video/backlight/pwm_bl.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
> index 678b27063198..bcd08b41765d 100644
> --- a/drivers/video/backlight/pwm_bl.c
> +++ b/drivers/video/backlight/pwm_bl.c
> @@ -30,6 +30,7 @@ struct pwm_bl_data {
> struct device *dev;
> unsigned int lth_brightness;
> unsigned int *levels;
> + bool enabled;
> struct regulator *power_supply;
> struct gpio_desc *enable_gpio;
> unsigned int scale;
> @@ -50,7 +51,7 @@ static void pwm_backlight_power_on(struct pwm_bl_data *pb)
> int err;
>
> pwm_get_state(pb->pwm, &state);
> - if (state.enabled)
> + if (pb->enabled)
> return;
>
> err = regulator_enable(pb->power_supply);
> @@ -65,6 +66,8 @@ static void pwm_backlight_power_on(struct pwm_bl_data *pb)
>
> if (pb->enable_gpio)
> gpiod_set_value_cansleep(pb->enable_gpio, 1);
> +
> + pb->enabled = true;
> }
>
> static void pwm_backlight_power_off(struct pwm_bl_data *pb)
> @@ -72,7 +75,7 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb)
> struct pwm_state state;
>
> pwm_get_state(pb->pwm, &state);
> - if (!state.enabled)
> + if (!pb->enabled)
> return;
>
> if (pb->enable_gpio)
> @@ -86,6 +89,7 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb)
> pwm_apply_state(pb->pwm, &state);
>
> regulator_disable(pb->power_supply);
> + pb->enabled = false;
> }
>
> static int compute_duty_cycle(struct pwm_bl_data *pb, int brightness)
> @@ -483,6 +487,7 @@ static int pwm_backlight_probe(struct platform_device *pdev)
> pb->check_fb = data->check_fb;
> pb->exit = data->exit;
> pb->dev = &pdev->dev;
> + pb->enabled = false;
> pb->post_pwm_on_delay = data->post_pwm_on_delay;
> pb->pwm_off_delay = data->pwm_off_delay;
>
>
Reviewed-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2018-11-09 10:15 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-09 9:48 [PATCH] backlight: pwm_bl: re-add driver internal enabled tracking Heiko Stuebner
2018-11-09 10:15 ` Enric Balletbo i Serra [this message]
2018-11-14 9:11 ` Uwe Kleine-König
2018-11-14 12:35 ` Thierry Reding
2018-11-16 10:22 ` Daniel Thompson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3f7df9d3-9293-2bdd-73c8-d4ad01801ab0@collabora.com \
--to=enric.balletbo@collabora.com \
--cc=daniel.thompson@linaro.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=heiko@sntech.de \
--cc=jingoohan1@gmail.com \
--cc=lee.jones@linaro.org \
--cc=linux-pwm@vger.kernel.org \
--cc=thierry.reding@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox