On Wed, 25 Feb 2026, "Kandpal, Suraj" <[email protected]> wrote:
>> Subject: Re: [PATCH v3 1/8] drm/i915/backlight: Use default/max brightness
>> for
>> VESA AUX backlight init
>>
>> On Tue, 24 Feb 2026, Suraj Kandpal <[email protected]> wrote:
>> > If the brightness fetched from VBT/previous state is 0 on backlight
>> > initialization, then set the brightness to a default/max value.
>> > Whenever the minimum brightness is reported as 0 there are chances we
>> > 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 using
>> > PANEL_LUMINANCE_OVERRIDE mode to mainpulate brightness via luminance
>> > values.
>> >
>> > Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15671
>> > Signed-off-by: Suraj Kandpal <[email protected]>
>> > Reviewed-by: Arun R Murthy <[email protected]>
>> > ---
>> > v1 -> v2:
>> > - Let users set brightness to 0, make it so that it's just not done by
>> > default (Arun)
>> >
>> > v2 -> v3:
>> > -Update commit header and message (Arun)
>> >
>> > drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c | 4 ++++
>> > 1 file changed, 4 insertions(+)
>> >
>> > 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..c40ce310ad97 100644
>> > --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
>> > +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
>> > @@ -564,6 +564,8 @@ static int intel_dp_aux_vesa_setup_backlight(struct
>> intel_connector *connector,
>> > }
>> > panel->backlight.level =
>> intel_dp_aux_vesa_get_backlight(connector, 0);
>> > panel->backlight.enabled = panel->backlight.level != 0;
>> > + if (!panel->backlight.level)
>> > + panel->backlight.level = panel->backlight.max;
>>
>> How does this help when .enabled is still based on level != 0 above?
>>
>
> Well we keep the backlight.enabled as false if we read a 0 back from the DPCD
> or the current level state is 0.
> This is to maintain the policy that if during setup we get 0 as backlight
> value eDP backlight is currently disabled
> (which means __intel_backlight_enable needs be called). We then change the
> current level to max so that when
> backlight enable is called after setup from intel_backlight_update, we enable
> backlight with max level so that we
> do not end up with a blank screen. This is also where we set
> backlight.enabled = true.
> This is to tackle different eDP behavior where, some preserve the last
> brightness value programmed in them (in that case
> users want the same brightness to continue) while others don't and just 0 it
> out instead of having some default value (in that
> case we keep backlight.enabled = false later to be made true during the
> __intel_backlight_enable call).
> We face these scenarios in some compositors during the pass key phase where
> the compositor is still totally not doing everything and does not send
> us any explicit brightness value to set thinking eDP would have some basic
> default value of it's own . We end up getting a 0 from DPCD and we enable and
> set the backlight enable with 0 value which anyways later causes us to call
> backlight disable.
> In this case during authentication in some compositors like Fedora there are
> cases where we do not get a explicitly backlight value till the user has to
> blindly enter their
> Passkey, after which the compositor sends us some sane value which we then
> program.
There's a long history of problems with the PWM backlight unexpectedly
going from 0 to max.
BR,
Jani.
>
> Regards,
> Suraj Kandpal
>
>> > drm_dbg_kms(display->drm,
>> > "[CONNECTOR:%d:%s] AUX VESA Nits backlight level
>> is controlled through DPCD\n",
>> > connector->base.base.id, connector->base.name);
>> @@ -573,6
>> > +575,8 @@ static int intel_dp_aux_vesa_setup_backlight(struct
>> intel_connector *connector,
>> > if (current_mode ==
>> DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD) {
>> > panel->backlight.level = current_level;
>> > panel->backlight.enabled = panel->backlight.level != 0;
>> > + if (!panel->backlight.level)
>> > + panel->backlight.level = panel->backlight.max;
>>
>> Ditto.
>>
>> > } else {
>> > panel->backlight.level = panel->backlight.max;
>> > panel->backlight.enabled = false;
>>
>> --
>> Jani Nikula, Intel
--
Jani Nikula, Intel