]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: Don't change brightness for disabled connectors
authorMario Limonciello (AMD) <superm1@kernel.org>
Mon, 3 Nov 2025 22:02:11 +0000 (16:02 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 6 Dec 2025 21:27:39 +0000 (06:27 +0900)
commit 81f4d4ba509522596143fd5d7dc2fc3495296b0a upstream.

[WHY]
When a laptop lid is closed the connector is disabled but userspace
can still try to change brightness.  This doesn't work because the
panel is turned off. It will eventually time out, but there is a lot
of stutter along the way.

[How]
Iterate all connectors to check whether the matching one for the backlight
index is enabled.

Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4675
Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Ray Wu <ray.wu@amd.com>
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit f6eeab30323d1174a4cc022e769d248fe8241304)
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 f06c918f5a33a9955b36ac3bfab461b5f1cb305b..b259439a320507679516ab2b7eb0d317be2b459e 100644 (file)
@@ -4898,6 +4898,21 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
        struct dc_link *link;
        u32 brightness;
        bool rc, reallow_idle = false;
+       struct drm_connector *connector;
+
+       list_for_each_entry(connector, &dm->ddev->mode_config.connector_list, head) {
+               struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+
+               if (aconnector->bl_idx != bl_idx)
+                       continue;
+
+               /* if connector is off, save the brightness for next time it's on */
+               if (!aconnector->base.encoder) {
+                       dm->brightness[bl_idx] = user_brightness;
+                       dm->actual_brightness[bl_idx] = 0;
+                       return;
+               }
+       }
 
        amdgpu_dm_update_backlight_caps(dm, bl_idx);
        caps = &dm->backlight_caps[bl_idx];