Re: Brightness 100% when connect or disconnect charger

From: Emmanuel Vadot <manu_at_bidouilliste.com>
Date: Fri, 10 Nov 2023 11:10:53 UTC
On Thu, 9 Nov 2023 09:19:31 +0100
Emmanuel Vadot <manu@bidouilliste.com> wrote:

> On Wed, 8 Nov 2023 21:57:21 +0200
> "Dr. Amr Osman" <dr3mro@gmail.com> wrote:
> 
> > Hello,
> > I have installed freeBSD 14rc4 on Lenovo Thinkpad x270 and xfce desktop and
> > when I
> > 1) connect the charger
> > 2) disconnect the charger
> > 3) resume from suspend
> > The LCD brightness is 100% which is really disturbing specially when I am
> > in dark room
> 
>  I don't have the issue on my Thinkpad X390 with suspend/resume but I
> do have it with the charger.
>  I'm pretty sure that it's a hardware thing and we can't do anything
> about it without having some framework for sensors that can handle
> power supply connection/disconnection and events.
> 
> > hw.acpi.video.lcd0.economy: 20
> > hw.acpi.video.lcd0.fullpower: 30
> > I have loaded acpi_video and acpi_ibm
> > and if I tried to adjust brightness it goes suddenly from 100 to 20 if I
> > press fn +f5/f6
> 
>  You shouldn't need to load acpi_video on modern laptop, backlight(9)
> and backlight(8) is enought (if you have drm loaded).
> 
> > What can I do to fix this issue?

 So I had a better look at I was only ~50% right :)
 There is some harware thing that happens, when some external events
happens (docking, plugging charger, suspend/resume etc ...) the
gpu firmware (or the IP not sure about which) generates some interrupts
and the i915 driver get some messages via some mailbox. We seem to get
a set backlight message for those events, it's happening
https://github.com/freebsd/drm-kmod/blob/dce1b3ba0d1ff8ccbbbec09d74480a3a0de346e4/drivers/gpu/drm/i915/display/intel_opregion.c#L420
 There is a few things that I still don't understand :
 - Why do we get a message to set the backlight at 100% for any of
those events ?
- Linux checks the backlight type and if it's "native" they discard
this call. Still unsure what "native" really means, looking at some
code it seems that if acpi_video is used it's not considered as a
native backlight unless there is a quirk for the computer or if in the
ACPI table it's says that it's a windows 8 laptop or some chromebook.
- Modifying the above function to always returns 0 (so faking that we
have a "native" backlight) obviously don't change the backlight value,
but I'm unsure if this is the correct hack or if there will be some
problems with it.

 So it will be interesting for people who have this problem to know if
modifying the code to always do a return 0; at the beginning fixes
everything. I'd also like to know if the keyboard keys to modify the
backlight still works correctly after this (mine don't do a thing and
never did, one day I should have a look at how to use them).

 Cheers,

-- 
Emmanuel Vadot <manu@bidouilliste.com> <manu@freebsd.org>