FAILED: patch "[PATCH] drm/amd/display: Get backlight from PWM if DMCU is not" failed to apply to 5.15-stable tree
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 9e0d55ae545f4a8f4c00339ad97ee2ef9e8e06ff Mon Sep 17 00:00:00 2001
From: Harry Wentland <[email protected]>
Date: Mon, 16 Aug 2021 15:57:12 -0400
Subject: [PATCH] drm/amd/display: Get backlight from PWM if DMCU is not
initialized
On Carrizo/Stoney systems we set backlight through panel_cntl, i.e. directly via the PWM registers, if DMCU is not initialized. We always read it back through ABM registers which leads to a mismatch and forces atomic_commit to program the backlight each time.
Instead make sure we use the same logic for backlight readback, i.e. read it from panel_cntl if DMCU is not initialized.
We also need to remove some extraneous and incorrect calculations at the end of dce_get_16_bit_backlight_from_pwm.
drivers/gpu/drm/amd/display/dc/core/dc_link.c +12 -4
@@ -2752,13 +2752,21 @@ static struct abm *get_abm_from_stream_res(const struct dc_link *link)int dc_link_get_backlight_level (const struct dc_link *link) { -struct abm *abm =get_abm_from_stream_res (link); +struct panel_cntl *panel_cntl = link->panel_cntl; +struct dc *dc = link->ctx->dc; +struct dmcu *dmcu = dc->res_pool->dmcu; +bool fw_set_brightness = true; -if (abm ==NULL || abm->funcs->get_current_backlight ==NULL ) -return DC_ERROR_UNEXPECTED ; +if (dmcu) + fw_set_brightness = dmcu->funcs->is_dmcu_initialized (dmcu); -return (int ) abm->funcs->get_current_backlight (abm); +if (!fw_set_brightness && panel_cntl->funcs->get_current_backlight) +return panel_cntl->funcs->get_current_backlight (panel_cntl); +else if (abm !=NULL && abm->funcs->get_current_backlight !=NULL ) +return (int ) abm->funcs->get_current_backlight (abm); +else +return DC_ERROR_UNEXPECTED ; }int dc_link_get_target_backlight_pwm (const struct dc_link *link)
drivers/gpu/drm/amd/display/dc/dce/dce_panel_cntl.c +0 -10
@@ -49,7 +49,6 @@static unsigned int dce_get_16_bit_backlight_from_pwm (struct panel_cntl *panel_cntl) {uint64_t current_backlight; -uint32_t round_result;uint32_t bl_period, bl_int_count;uint32_t bl_pwm, fractional_duty_cycle_en;uint32_t bl_period_mask, bl_pwm_mask;
@@ -84,15 +83,6 @@ static unsigned int dce_get_16_bit_backlight_from_pwm(struct panel_cntl *panel_c current_backlight =div_u64 (current_backlight, bl_period); current_backlight = (current_backlight +1 ) >>1 ; - current_backlight = (uint64_t )(current_backlight) * bl_period; - - round_result = (uint32_t )(current_backlight &0xFFFFFFFF ); - - round_result = (round_result >> (bl_int_count-1 )) &1 ; - - current_backlight >>= bl_int_count; - current_backlight += round_result; -return (uint32_t )(current_backlight); }