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 <kgu...@codeaurora.org>

Reviewed-by: Daniel Thompson <daniel.thomp...@linaro.org>


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
> 
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to