Convert the AMD display driver to the DRM backlight infrastructure so
brightness can be controlled through the connector LUMINANCE property.
Link the registered backlight_device to the eDP connector and unlink it
on teardown; the DRM core owns the embedded backlight state and its
property, so no explicit allocation or failure handling is needed.

Signed-off-by: Mario Limonciello (AMD) <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c           | 5 +++--
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c | 4 ++++
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c | 2 ++
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index ec483276d7538..e87d1e5be58fe 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -5054,6 +5054,9 @@ static void amdgpu_dm_atomic_commit_tail(struct 
drm_atomic_commit *state)
                if (!acrtc || drm_atomic_crtc_needs_modeset(new_crtc_state))
                        continue;
 
+               drm_connector_update_privacy_screen(new_con_state);
+               drm_atomic_helper_connector_apply_luminance(new_con_state);
+
                dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
                dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);
 
@@ -5133,8 +5136,6 @@ static void amdgpu_dm_atomic_commit_tail(struct 
drm_atomic_commit *state)
                                            &stream_update);
                mutex_unlock(&dm->dc_lock);
                kfree(dummy_updates);
-
-               drm_connector_update_privacy_screen(new_con_state);
        }
 
        /**
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
index fb2aaf0178c2b..a60d0b0480f57 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
@@ -40,6 +40,7 @@
 
 #include <linux/backlight.h>
 #include <linux/power_supply.h>
+#include <drm/drm_backlight.h>
 #include <drm/drm_edid.h>
 #include <drm/drm_utils.h>
 
@@ -496,6 +497,9 @@ amdgpu_dm_register_backlight_device(struct 
amdgpu_dm_connector *aconnector)
                        dm->actual_brightness[aconnector->bl_idx] = 
real_brightness;
                        dm->brightness[aconnector->bl_idx] = real_brightness;
                }
+               /* Link the registered backlight device to the DRM connector. */
+               drm_backlight_link(&aconnector->base, 
dm->backlight_dev[aconnector->bl_idx]);
+
                drm_dbg_driver(drm, "DM: Registered Backlight device: %s\n", 
bl_name);
        }
 }
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
index c8a1ab8c3b169..fe4ab55f5130f 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
@@ -58,6 +58,7 @@
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_uapi.h>
 #include <drm/drm_atomic_helper.h>
+#include <drm/drm_backlight.h>
 #include <drm/drm_edid.h>
 #include <drm/drm_eld.h>
 #include <drm/drm_fixed.h>
@@ -1911,6 +1912,7 @@ STATIC_IFN_KUNIT void amdgpu_dm_connector_destroy(struct 
drm_connector *connecto
        }
 
        if (aconnector->bl_idx != -1) {
+               drm_backlight_link(&aconnector->base, NULL);
                
backlight_device_unregister(dm->backlight_dev[aconnector->bl_idx]);
                dm->backlight_dev[aconnector->bl_idx] = NULL;
        }
-- 
2.43.0

Reply via email to