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.5 when
we are PANEL_LUMINANCE_OVERRIDE mode to mainpulate brightness via luminance
values. Make sure if minimum luminance range is 0 we program
it to 10% of max luminance range.

Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15671
Signed-off-by: Suraj Kandpal <[email protected]>
---
 .../gpu/drm/i915/display/intel_dp_aux_backlight.c  | 14 +++++++++++---
 1 file changed, 11 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 eb05ef4bd9f6..f1811beee25f 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
@@ -456,7 +456,11 @@ static u32 intel_dp_aux_vesa_get_backlight(struct 
intel_connector *connector, en
                }
 
                val |= buf[0] | buf[1] << 8 | buf[2] << 16;
-               return val / 1000;
+               val = val / 1000;
+               if (!val)
+                       return panel->backlight.min;
+
+               return val;
        }
 
        return connector->panel.backlight.level;
@@ -557,10 +561,14 @@ static int intel_dp_aux_vesa_setup_backlight(struct 
intel_connector *connector,
        if (panel->backlight.edp.vesa.info.luminance_set) {
                if (luminance_range->max_luminance) {
                        panel->backlight.max = 
panel->backlight.edp.vesa.info.max;
-                       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;
                }
                panel->backlight.level = 
intel_dp_aux_vesa_get_backlight(connector, 0);
                panel->backlight.enabled = panel->backlight.level != 0;
-- 
2.34.1

Reply via email to