lkml.org 
[lkml]   [2022]   [Jun]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 096/106] drm/amd/display: Cap OLED brightness per max frame-average luminance
    Date
    From: Roman Li <roman.li@amd.com>

    commit 4fd17f2ac0aa4e48823ac2ede5b050fb70300bf4 upstream.

    [Why]
    For OLED eDP the Display Manager uses max_cll value as a limit
    for brightness control.
    max_cll defines the content light luminance for individual pixel.
    Whereas max_fall defines frame-average level luminance.
    The user may not observe the difference in brightness in between
    max_fall and max_cll.
    That negatively impacts the user experience.

    [How]
    Use max_fall value instead of max_cll as a limit for brightness control.

    Reviewed-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
    Signed-off-by: Roman Li <roman.li@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
    +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
    @@ -2417,7 +2417,7 @@ static struct drm_mode_config_helper_fun

    static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector)
    {
    - u32 max_cll, min_cll, max, min, q, r;
    + u32 max_avg, min_cll, max, min, q, r;
    struct amdgpu_dm_backlight_caps *caps;
    struct amdgpu_display_manager *dm;
    struct drm_connector *conn_base;
    @@ -2447,7 +2447,7 @@ static void update_connector_ext_caps(st
    caps = &dm->backlight_caps[i];
    caps->ext_caps = &aconnector->dc_link->dpcd_sink_ext_caps;
    caps->aux_support = false;
    - max_cll = conn_base->hdr_sink_metadata.hdmi_type1.max_cll;
    + max_avg = conn_base->hdr_sink_metadata.hdmi_type1.max_fall;
    min_cll = conn_base->hdr_sink_metadata.hdmi_type1.min_cll;

    if (caps->ext_caps->bits.oled == 1 /*||
    @@ -2475,8 +2475,8 @@ static void update_connector_ext_caps(st
    * The results of the above expressions can be verified at
    * pre_computed_values.
    */
    - q = max_cll >> 5;
    - r = max_cll % 32;
    + q = max_avg >> 5;
    + r = max_avg % 32;
    max = (1 << q) * pre_computed_values[r];

    // min luminance: maxLum * (CV/255)^2 / 100

    \
     
     \ /
      Last update: 2022-06-20 15:27    [W:4.105 / U:23.996 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site