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

Reply via email to