]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: Only read ACPI backlight caps once
authorMario Limonciello <mario.limonciello@amd.com>
Thu, 29 May 2025 16:33:44 +0000 (11:33 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 6 Jul 2025 09:04:26 +0000 (11:04 +0200)
commit ffcaed1d7ecef31198000dfbbea791f30f7ca437 upstream.

[WHY]
Backlight caps are read already in amdgpu_dm_update_backlight_caps().
They may be updated by update_connector_ext_caps(). Reading again when
registering backlight device may cause wrong values to be used.

[HOW]
Use backlight caps already registered to the dm.

Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Roman Li <roman.li@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 148144f6d2f14b02eaaa39b86bbe023cbff350bd)
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 389748c420b028386cdf726531c7cadcd649ca8c..e61166a8230b6eafb0e2c8b43366e81518a1059e 100644 (file)
@@ -4832,7 +4832,7 @@ amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector)
        struct drm_device *drm = aconnector->base.dev;
        struct amdgpu_display_manager *dm = &drm_to_adev(drm)->dm;
        struct backlight_properties props = { 0 };
-       struct amdgpu_dm_backlight_caps caps = { 0 };
+       struct amdgpu_dm_backlight_caps *caps;
        char bl_name[16];
        int min, max;
 
@@ -4846,20 +4846,20 @@ amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector)
                return;
        }
 
-       amdgpu_acpi_get_backlight_caps(&caps);
-       if (caps.caps_valid && get_brightness_range(&caps, &min, &max)) {
+       caps = &dm->backlight_caps[aconnector->bl_idx];
+       if (get_brightness_range(caps, &min, &max)) {
                if (power_supply_is_system_supplied() > 0)
-                       props.brightness = (max - min) * DIV_ROUND_CLOSEST(caps.ac_level, 100);
+                       props.brightness = (max - min) * DIV_ROUND_CLOSEST(caps->ac_level, 100);
                else
-                       props.brightness = (max - min) * DIV_ROUND_CLOSEST(caps.dc_level, 100);
+                       props.brightness = (max - min) * DIV_ROUND_CLOSEST(caps->dc_level, 100);
                /* min is zero, so max needs to be adjusted */
                props.max_brightness = max - min;
                drm_dbg(drm, "Backlight caps: min: %d, max: %d, ac %d, dc %d\n", min, max,
-                       caps.ac_level, caps.dc_level);
+                       caps->ac_level, caps->dc_level);
        } else
                props.brightness = AMDGPU_MAX_BL_LEVEL;
 
-       if (caps.data_points && !(amdgpu_dc_debug_mask & DC_DISABLE_CUSTOM_BRIGHTNESS_CURVE))
+       if (caps->data_points && !(amdgpu_dc_debug_mask & DC_DISABLE_CUSTOM_BRIGHTNESS_CURVE))
                drm_info(drm, "Using custom brightness curve\n");
        props.max_brightness = AMDGPU_MAX_BL_LEVEL;
        props.type = BACKLIGHT_RAW;