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 >