]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/display: turn off eDP lcdvdd and backlight if not required
authorCharlene Liu <Charlene.Liu@amd.com>
Wed, 26 Mar 2025 09:11:35 +0000 (17:11 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 7 Apr 2025 22:01:08 +0000 (18:01 -0400)
[why]
A+N configuration, eDP on A-APU is off, extended display active.
Resume from s4, eDP's backlight is still on.

[how]
Turn off inactive eDP backlight and lcdvdd.

Reviewed-by: Charlene Liu <charlene.liu@amd.com>
Reviewed-by: Aric Cyr <aric.cyr@amd.com>
Signed-off-by: Charlene Liu <Charlene.Liu@amd.com>
Signed-off-by: Jing Zhou <Jing.Zhou@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>
drivers/gpu/drm/amd/display/dc/core/dc.c
drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c

index 636999fcaebb7d129b2a59a489cf85e9e65433a0..66e23507eb825cfc75d1c7b23d06dc0f28bab14e 100644 (file)
@@ -6298,10 +6298,10 @@ void dc_query_current_properties(struct dc *dc, struct dc_current_properties *pr
 void dc_set_edp_power(const struct dc *dc, struct dc_link *edp_link,
                                 bool powerOn)
 {
-       if (edp_link->connector_signal != SIGNAL_TYPE_EDP)
+       if (!edp_link || !edp_link->dc || !edp_link->dc->link_srv)
                return;
 
-       if (edp_link->skip_implict_edp_power_control == false)
+       if (edp_link->connector_signal != SIGNAL_TYPE_EDP)
                return;
 
        edp_link->dc->link_srv->edp_set_panel_power(edp_link, powerOn);
index da74c2b5854f3abdedba41235dd5ee713d7c5117..f50c4dbc7553ccf101d69db51187bac30c6cd81c 100644 (file)
@@ -393,6 +393,7 @@ void edp_set_panel_power(struct dc_link *link, bool powerOn)
 
                // 3. Rx power on
                dpcd_write_rx_power_ctrl(link, true);
+               DC_LOG_BACKLIGHT("eDP power and backlight: Power on");
        } else {
                // 3. Rx power off
                dpcd_write_rx_power_ctrl(link, false);
@@ -404,6 +405,7 @@ void edp_set_panel_power(struct dc_link *link, bool powerOn)
                // 1. panel VDD off
                if (!link->dc->config.edp_no_power_sequencing)
                        link->dc->hwss.edp_power_control(link, false);
+               DC_LOG_BACKLIGHT("eDP power and backlight: Power off");
        }
 }