Re: [PATCH v4 1/1] platform/x86: asus-wmi: add support for ASUS screenpad

From: Barnabás Pőcze
Date: Thu Jul 13 2023 - 11:58:07 EST


Hi


2023. július 12., szerda 20:44 keltezéssel, Hans de Goede <hdegoede@xxxxxxxxxx> írta:

> Hi,
>
> On 7/12/23 03:07, Barnabás Pőcze wrote:
> > Hi
> >
> >
> > 2023. július 11., kedd 11:42 keltezéssel, Hans de Goede <hdegoede@xxxxxxxxxx> írta:
> >
> >> [...]
> >>>>
> >>>> If settings below 60 are no good, then the correct way to handle
> >>>> this is to limit the range to 0 - (255-60) and add / substract
> >>>> 60 when setting / getting the brightness.
> >>>>
> >>>> E.g. do something like this:
> >>>>
> >>>> #define SCREENPAD_MIN_BRIGHTNESS 60
> >>>> #define SCREENPAD_MAX_BRIGHTNESS 255
> >>>>
> >>>> props.max_brightness = SCREENPAD_MAX_BRIGHTNESS -
> >>>> SCREENPAD_MIN_BRIGHTNESS;
> >>>>
> >>>> And in update_screenpad_bl_status() do:
> >>>>
> >>>> ctrl_param = bd->props.brightness + SCREENPAD_MIN_BRIGHTNESS;
> >>>>
> >>>> And when reading the brightness substract SCREENPAD_MIN_BRIGHTNESS,
> >>>> clamping to a minimum value of 0.
> >>>>
> >>>> This avoids a dead-zone in the brightness range between 0-60 .
> >>>
> >>> Hi Hans, I think this is the wrong thing to do.
> >>>
> >>> The initial point of that first `brightness = 60;` is only to set it to
> >>> an acceptable brightness on boot. We don't want to prevent the user
> >>> from going below that brightness at all - this is just to ensure the
> >>> screen is visible on boot if the brightness was under that value, and
> >>> it is usually only under that value if it was set to off before
> >>> shutdown/reboot.
> >>>
> >>> It's not to try and put the range between 60-255, it's just to make the
> >>> screen visible on boot if it was off previously. The folks who have
> >>> tested this have found that this is the desired behaviour they expect.
> >>
> >> I see.
> >>
> >> So if I understand things correctly then 60 is a good default,
> >> but the screen can go darker and still be usable.
> >>
> >> But 1 leads to an unusable screen, so we still need
> >> a SCREENPAD_MIN_BRIGHTNESS to avoid the screen being able
> >> to go so dark that it is no longer usable and then still
> >> move the range a bit, but just not by 60, but by some
> >> other number (something in the 10-30 range I guess?)
> >>
> >> Combined with adding a:
> >>
> >> #define SCREENPAD_DEFAULT_BRIGHTNESS 60
> >>
> >> And at boot when the read back brightness <
> >> SCREENPAD_MIN_BRIGHTNESS set it to SCREENPAD_DEFAULT_BRIGHTNESS.
> >>
> >> We really want to avoid users to be able to set an unusable
> >> low brightness level. As mentioned in the new panel brightness
> >> API proposal:
> >>
> >> https://lore.kernel.org/dri-devel/b61d3eeb-6213-afac-2e70-7b9791c86d2e@xxxxxxxxxx/
> >>
> >> "3. The meaning of 0 is not clearly defined, it can be either off,
> >> or minimum brightness at which the display is still readable
> >> (in a low light environment)"
> >>
> >> and the plan going forward is to:
> >>
> >> "Unlike the /sys/class/backlight/foo/brightness this brightness property
> >> has a clear definition for the value 0. The kernel must ensure that 0
> >> means minimum brightness (so 0 should _never_ turn the backlight off).
> >> If necessary the kernel must enforce a minimum value by adding
> >> an offset to the value seen in the property to ensure this behavior."
> >>
> >> So I really want to see this new backlight driver implement the
> >> new planned behavior for 0 from the start, with 0 meaning minimum
> >> *usable* brightness.
> >>
> >> Regards,
> >>
> >> Hans
> >
> >
> > Sorry for hijacking this thread, but then how can I turn backlight off?
>
> Documentation/ABI/stable/sysfs-class-backlight
>
> What: /sys/class/backlight/<backlight>/bl_power
> Date: April 2005
> KernelVersion: 2.6.12
> Contact: Richard Purdie <rpurdie@xxxxxxxxx>
> Description:
> Control BACKLIGHT power, values are FB_BLANK_* from fb.h
>
> - FB_BLANK_UNBLANK (0) : power on.
> - FB_BLANK_POWERDOWN (4) : power off
>
> Although it is better to actually disable video output on the connector,
> this leads to much bigger power savings. Under X, this can typically be
> done by hitting the lock-screen option, e.g. "Windows-logo-key + L" under
> GNOME.

Super+L locks the screen for me on GNOME, which is decidedly *not* what I want
to achieve. I just want to disable the backlight on the laptop panel without
any other changes whatsoever. Writing 4 to /sys/class/backlight/<backlight>/bl_power
does essentially what I want.


>
> On the console you can do:
>
> echo 1 > /sys/class/graphics/fb0/blank
>
> To really put the panel in low power mode.

I never doubted it could still be done. I guess what I wanted to say is "convenience".
Using the brightness slider / hotkeys is very convenient, much more convenient than
messing with getting the right permissions to be able to write to
/sys/class/backlight/<backlight>/bl_power or /sys/class/graphics/fb0/blank.


>
>
>
> > I quite liked how I was able to turn my laptop display (almost) completely off
> > with the brightness hotkeys / brightness slider in gnome-shell, and I was quite
> > annoyed when this was changed in gnome-settings-daemon and forced the minimum
> > brightness to be 1% of max_brightness.
>
> Right, there are 2 problems with this:
>
> 1. Using brightness control to disable the backlight is not reliabl. Many
> backlight control methods only go to some low setting not to completely off.
> This differs from model laptop to model laptop. Also e.g. amdgpu and radeonhd
> have always ensured that brightness never completely turns of the backlight.
>
> The plan going forward is to try and consistently have 0 mean minimum
> backlight and not backlight off, instead of the current some models 0 = off,
> some models 0 is works fine in a not too brightly lit room.

That is good to know, I did not realize that was the case thanks to my intel_backlight
bias...


>
> 2. Users sometimes turn of the backlight through e.g. the GNOME system menu
> slider and then have no way to turn it back on (on devices without (working)
> brightness hotkeys (they cannot use the slider since they can no longer see it)
> This scenario is a real problem which used to result in quite a few bug reports.

Of course I understand why that change was made in e.g. gnome-settings-daemon.
However, the same way gnome-tweaks has a switch for enabling volume levels greater
than 100%, there could be a switch for enabling the full brightness scale.


>
> > Also, "minimum brightness at which the display is still readable" is not really
> > well-defined
>
> True, as mentioned above the minimum might only be good enough to
> e.g. read text in a somewhat low lit room, but typically it at
> least leaves things visible enough to allow a user to change
> the brightness to a better setting.
>
> What we don't want is brightness settings so low that the backlight is
> essentially off (does not even show any light in a fully dark room).
>
> > so it can (will) happen that the minimum brightness values don't match,
> > so it is theoretically possible that I cannot set both my laptop panel and external
> > monitor to the same desired brightness level. Or am I missing something?
>
> This already is the case, some monitors may not go as low (or high) as you want,
> some laptops also already don't go as low as you want.

Fair point, but restricting the range decreases the chances even more.


>
> Expecting to be able to match monitor and laptop panel brightness at both
> ends of the brightness range simply is not realistic.
> [...]


In conclusion, I appreciate your answer, there were some things I did not know.
I suppose, after all, it might indeed not be a wise idea to shoehorn turning off
backlight into brightness control.


Regards,
Barnabás Pőcze