drm/i915: panel: Honor the VBT PWM min setting for devs with an external PWM controller
authorHans de Goede <hdegoede@redhat.com>
Thu, 3 Sep 2020 11:23:36 +0000 (13:23 +0200)
committerHans de Goede <hdegoede@redhat.com>
Sun, 6 Sep 2020 13:53:24 +0000 (15:53 +0200)
So far for devices using an external PWM controller (devices using
pwm_setup_backlight()), we have been hardcoding the minimum allowed
PWM level to 0. But several of these devices specify a non 0 minimum
setting in their VBT.

Change pwm_setup_backlight() to use get_backlight_min_vbt() to get
the minimum level.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200903112337.4113-17-hdegoede@redhat.com
drivers/gpu/drm/i915/display/intel_panel.c

index d54dd26bd066510f9e9beccad22f52643c52c200..1e98d2dab0edba4341a6b6b3a50f0d551c32f72e 100644 (file)
@@ -1925,8 +1925,8 @@ static int pwm_setup_backlight(struct intel_connector *connector,
         */
        pwm_apply_args(panel->backlight.pwm);
 
-       panel->backlight.min = 0; /* 0% */
        panel->backlight.max = 100; /* 100% */
+       panel->backlight.min = get_backlight_min_vbt(connector);
        level = intel_panel_compute_brightness(connector, 100);
        ns = DIV_ROUND_UP(level * panel->backlight.pwm_period_ns, 100);
 
@@ -1941,8 +1941,9 @@ static int pwm_setup_backlight(struct intel_connector *connector,
 
        level = DIV_ROUND_UP(pwm_get_duty_cycle(panel->backlight.pwm) * 100,
                             panel->backlight.pwm_period_ns);
-       panel->backlight.level =
-               intel_panel_compute_brightness(connector, level);
+       level = intel_panel_compute_brightness(connector, level);
+       panel->backlight.level = clamp(level, panel->backlight.min,
+                                      panel->backlight.max);
        panel->backlight.enabled = panel->backlight.level != 0;
 
        drm_info(&dev_priv->drm, "Using %s PWM for LCD backlight control\n",