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
