Re: [PATCH V2 1/2] backlight: qcom-wled: Fix FSC update issue for WLED5

From: Daniel Thompson
Date: Fri Feb 26 2021 - 12:10:13 EST


On Fri, Feb 26, 2021 at 05:42:23PM +0530, Kiran Gunda wrote:
> Currently, for WLED5, the FSC (Full scale current) setting is not
> updated properly due to driver toggling the wrong register after
> an FSC update.
>
> On WLED5 we should only toggle the MOD_SYNC bit after a brightness
> update. For an FSC update we need to toggle the SYNC bits instead.
>
> Fix it by adopting the common wled3_sync_toggle() for WLED5 and
> introducing new code to the brightness update path to compensate.
>
> Signed-off-by: Kiran Gunda <kgunda@xxxxxxxxxxxxxx>

Reviewed-by: Daniel Thompson <daniel.thompson@xxxxxxxxxx>


Daniel.

> ---
> drivers/video/backlight/qcom-wled.c | 25 +++++++++++++++++++------
> 1 file changed, 19 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/video/backlight/qcom-wled.c b/drivers/video/backlight/qcom-wled.c
> index 3bc7800..aef52b9 100644
> --- a/drivers/video/backlight/qcom-wled.c
> +++ b/drivers/video/backlight/qcom-wled.c
> @@ -348,7 +348,7 @@ static int wled3_sync_toggle(struct wled *wled)
> return rc;
> }
>
> -static int wled5_sync_toggle(struct wled *wled)
> +static int wled5_mod_sync_toggle(struct wled *wled)
> {
> int rc;
> u8 val;
> @@ -445,10 +445,23 @@ static int wled_update_status(struct backlight_device *bl)
> goto unlock_mutex;
> }
>
> - rc = wled->wled_sync_toggle(wled);
> - if (rc < 0) {
> - dev_err(wled->dev, "wled sync failed rc:%d\n", rc);
> - goto unlock_mutex;
> + if (wled->version < 5) {
> + rc = wled->wled_sync_toggle(wled);
> + if (rc < 0) {
> + dev_err(wled->dev, "wled sync failed rc:%d\n", rc);
> + goto unlock_mutex;
> + }
> + } else {
> + /*
> + * For WLED5 toggling the MOD_SYNC_BIT updates the
> + * brightness
> + */
> + rc = wled5_mod_sync_toggle(wled);
> + if (rc < 0) {
> + dev_err(wled->dev, "wled mod sync failed rc:%d\n",
> + rc);
> + goto unlock_mutex;
> + }
> }
> }
>
> @@ -1459,7 +1472,7 @@ static int wled_configure(struct wled *wled)
> size = ARRAY_SIZE(wled5_opts);
> *cfg = wled5_config_defaults;
> wled->wled_set_brightness = wled5_set_brightness;
> - wled->wled_sync_toggle = wled5_sync_toggle;
> + wled->wled_sync_toggle = wled3_sync_toggle;
> wled->wled_cabc_config = wled5_cabc_config;
> wled->wled_ovp_delay = wled5_ovp_delay;
> wled->wled_auto_detection_required =
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>