diff --git a/msm/sde/sde_connector.c b/msm/sde/sde_connector.c index 80f469cc6f..f935b8d25d 100644 --- a/msm/sde/sde_connector.c +++ b/msm/sde/sde_connector.c @@ -535,21 +535,27 @@ static int _sde_connector_update_bl_scale(struct sde_connector *c_conn) bl_config = &dsi_display->panel->bl_config; - if (c_conn->bl_scale > MAX_BL_SCALE_LEVEL) - bl_config->bl_scale = MAX_BL_SCALE_LEVEL; - else - bl_config->bl_scale = c_conn->bl_scale; + if (dsi_display->panel->bl_config.bl_update == + BL_UPDATE_DELAY_UNTIL_FIRST_FRAME && + !c_conn->allow_bl_update) { + c_conn->unset_bl_level = bl_config->bl_level; + return 0; + } - if (c_conn->bl_scale_sv > MAX_SV_BL_SCALE_LEVEL) - bl_config->bl_scale_sv = MAX_SV_BL_SCALE_LEVEL; - else - bl_config->bl_scale_sv = c_conn->bl_scale_sv; + if (c_conn->unset_bl_level) + bl_config->bl_level = c_conn->unset_bl_level; + + bl_config->bl_scale = c_conn->bl_scale > MAX_BL_SCALE_LEVEL ? + MAX_BL_SCALE_LEVEL : c_conn->bl_scale; + bl_config->bl_scale_sv = c_conn->bl_scale_sv > MAX_SV_BL_SCALE_LEVEL ? + MAX_SV_BL_SCALE_LEVEL : c_conn->bl_scale_sv; SDE_DEBUG("bl_scale = %u, bl_scale_sv = %u, bl_level = %u\n", bl_config->bl_scale, bl_config->bl_scale_sv, bl_config->bl_level); rc = c_conn->ops.set_backlight(&c_conn->base, dsi_display, bl_config->bl_level); + c_conn->unset_bl_level = 0; return rc; }