Whenever the minimum brightness is reported as 0 there are chances we maybe sometimes end up with blank screen. This confuses the user into thinking the display is acting weird. This occurs in eDP 1.4b when we use proprietary INTEL AUX HDR DPCD registers to mainupate brightness via luminance values. Make sure if minimum luminance range is 0 we program it to 10% of max luminance range.
Signed-off-by: Suraj Kandpal <[email protected]> --- .../gpu/drm/i915/display/intel_dp_aux_backlight.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c index 8f86b368612e..cf53759c2860 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c @@ -178,6 +178,7 @@ intel_dp_aux_hdr_get_backlight(struct intel_connector *connector, enum pipe pipe struct intel_dp *intel_dp = enc_to_intel_dp(connector->encoder); u8 tmp; u8 buf[2] = {}; + u32 level; if (drm_dp_dpcd_readb(&intel_dp->aux, INTEL_EDP_HDR_GETSET_CTRL_PARAMS, &tmp) != 1) { drm_err(display->drm, @@ -205,7 +206,10 @@ intel_dp_aux_hdr_get_backlight(struct intel_connector *connector, enum pipe pipe return 0; } - return (buf[1] << 8 | buf[0]); + level = (buf[1] << 8 | buf[0]); + if (!level) + return panel->backlight.min; + return level; } static void @@ -427,10 +431,13 @@ intel_dp_aux_hdr_setup_backlight(struct intel_connector *connector, enum pipe pi if (luminance_range->max_luminance) { panel->backlight.max = luminance_range->max_luminance; - panel->backlight.min = luminance_range->min_luminance; + if (luminance_range->min_luminance) + panel->backlight.min = luminance_range->min_luminance; + else + panel->backlight.min = (luminance_range->max_luminance * 10) / 100; } else { panel->backlight.max = 512; - panel->backlight.min = 0; + panel->backlight.min = 51; } intel_dp_aux_write_panel_luminance_override(connector); -- 2.34.1
