summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDerek Lai <Derek.Lai@amd.com>2025-10-31 10:58:52 +0800
committerAlex Deucher <alexander.deucher@amd.com>2025-12-08 13:56:36 -0500
commit08f133e932cccd9a039bde367fe436594220bde3 (patch)
tree4d26c6eb289d300ab369ffd5023fd3a0aeff5ed5 /drivers/gpu
parent201648dc812bdadbecf650ea11efa1b3fcee35e2 (diff)
drm/amd/display: Write default Vesa Aux backlight control in dmub
[WHY] Some OLED panels require driver to write Aux BL before link training or turning on backlight; otherwise monitor brightness will change. [HOW] Write the default Vesa Aux backlight control in dmub. Reviewed-by: Wenjing Liu <wenjing.liu@amd.com> Signed-off-by: Derek Lai <Derek.Lai@amd.com> Signed-off-by: Alex Hung <alex.hung@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/display/dc/link/link_detection.c2
-rw-r--r--drivers/gpu/drm/amd/display/dc/link/link_dpms.c4
-rw-r--r--drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c2
-rw-r--r--drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c26
-rw-r--r--drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h2
5 files changed, 28 insertions, 8 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_detection.c b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
index 6d31f4967f1a..9746bb2f6c3b 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
@@ -989,7 +989,7 @@ static bool detect_link_and_local_sink(struct dc_link *link,
(link->dpcd_sink_ext_caps.bits.oled == 1)) {
dpcd_set_source_specific_data(link);
msleep(post_oui_delay);
- set_default_brightness_aux(link);
+ set_default_brightness(link);
}
return true;
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
index 6ae134147617..31ce52734edd 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c
@@ -2115,7 +2115,7 @@ static enum dc_status enable_link_dp(struct dc_state *state,
skip_video_pattern = false;
if (stream->sink_patches.oled_optimize_display_on)
- set_default_brightness_aux(link);
+ set_default_brightness(link);
if (perform_link_training_with_retries(link_settings,
skip_video_pattern,
@@ -2141,7 +2141,7 @@ static enum dc_status enable_link_dp(struct dc_state *state,
link->dpcd_sink_ext_caps.bits.sdr_aux_backlight_control == 1 ||
link->dpcd_sink_ext_caps.bits.hdr_aux_backlight_control == 1) {
if (!stream->sink_patches.oled_optimize_display_on) {
- set_default_brightness_aux(link);
+ set_default_brightness(link);
if (link->dpcd_sink_ext_caps.bits.oled == 1)
msleep(bl_oled_enable_delay);
edp_backlight_enable_aux(link, true);
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
index ad90a0106938..3884851e2a9e 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
@@ -2167,7 +2167,7 @@ void detect_edp_sink_caps(struct dc_link *link)
link->dpcd_caps.set_power_state_capable_edp =
(general_edp_cap & DP_EDP_SET_POWER_CAP) ? true : false;
- set_default_brightness_aux(link);
+ set_default_brightness(link);
core_link_read_dpcd(link, DP_EDP_DPCD_REV,
&link->dpcd_caps.edp_rev,
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
index 99741c1334ca..0b05ee9f6ea1 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
@@ -50,6 +50,11 @@ static const uint8_t DP_VGA_LVDS_CONVERTER_ID_2[] = "sivarT";
/* Nutmeg */
static const uint8_t DP_VGA_LVDS_CONVERTER_ID_3[] = "dnomlA";
+static const unsigned int pwr_default_min_brightness_millinits = 1000;
+static const unsigned int pwr_default_sdr_brightness_millinits = 270000;
+static const unsigned int pwr_default_min_backlight_pwm = 0xC0C;
+static const unsigned int pwr_default_max_backlight_pwm = 0xFFFF;
+
void dp_set_panel_mode(struct dc_link *link, enum dp_panel_mode panel_mode)
{
union dpcd_edp_config edp_config_set;
@@ -309,7 +314,7 @@ static bool read_default_bl_aux(struct dc_link *link, uint32_t *backlight_millin
return true;
}
-bool set_default_brightness_aux(struct dc_link *link)
+bool set_default_brightness(struct dc_link *link)
{
uint32_t default_backlight;
@@ -320,8 +325,23 @@ bool set_default_brightness_aux(struct dc_link *link)
if (default_backlight < 1000 || default_backlight > 5000000)
default_backlight = 150000;
- return edp_set_backlight_level_nits(link, true,
- default_backlight, 0);
+ if (link->backlight_control_type == BACKLIGHT_CONTROL_VESA_AUX &&
+ link->dc->caps.dmub_caps.aux_backlight_support) {
+ struct set_backlight_level_params backlight_level_params = { 0 };
+
+ backlight_level_params.aux_inst = link->ddc->ddc_pin->hw_info.ddc_channel;
+ backlight_level_params.control_type = BACKLIGHT_CONTROL_VESA_AUX;
+ backlight_level_params.backlight_pwm_u16_16 = default_backlight;
+ backlight_level_params.transition_time_in_ms = 0;
+ // filled in the driver BL default values
+ backlight_level_params.min_luminance = pwr_default_min_brightness_millinits;
+ backlight_level_params.max_luminance = pwr_default_sdr_brightness_millinits;
+ backlight_level_params.min_backlight_pwm = pwr_default_min_backlight_pwm;
+ backlight_level_params.max_backlight_pwm = pwr_default_max_backlight_pwm;
+ return edp_set_backlight_level(link, &backlight_level_params);
+ } else
+ return edp_set_backlight_level_nits(link, true,
+ default_backlight, 0);
}
return false;
}
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
index 360129732109..fd63b5d0f948 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h
@@ -29,7 +29,7 @@
enum dp_panel_mode dp_get_panel_mode(struct dc_link *link);
void dp_set_panel_mode(struct dc_link *link, enum dp_panel_mode panel_mode);
-bool set_default_brightness_aux(struct dc_link *link);
+bool set_default_brightness(struct dc_link *link);
bool is_smartmux_suported(struct dc_link *link);
void edp_panel_backlight_power_on(struct dc_link *link, bool wait_for_hpd);
int edp_get_backlight_level(const struct dc_link *link);