Re: [REQUEST] Add support for Intel DPST (Display Power Saving Technology)

2024-04-16 Thread Jani Nikula
On Tue, 16 Apr 2024, José Relvas  wrote:
> One more question. Some documentation refers to 
> "OPST (OLED power saving technology)". It's my understanding that this
> uses the same hardware blocks and APIs as DPST - only the algorithm
> in software is different. Userspace would need a way to distinguish
> OLED panels from LCD panels so it can use the right algorithm. Is
> there a reliable way of doing this? 
> On my Thinkpad P1 gen 6, the OLED exposes a standard intel_backlight,
> which actually controls the PWM. Afaik, there's no other way of
> telling OLED and LCD apart in userspace.

The intel_backlight interface can actually control the brightness of the
OLED panel using the DPCD interface, not only backlight PWM. It depends
on the panel. See intel_dp_aux_backlight.c. (And yes, backlight can be a
misnomer here, since OLED does not have a backlight.)

I don't actually know the details of OPST, but some OLED panels I've
worked with in the past have CABC, or content adaptive brightness
control, where all of it is handled internally in the panel. You just
tune the aggressiveness or some other mode.

BR,
Jani.



-- 
Jani Nikula, Intel


Re: [REQUEST] Add support for Intel DPST (Display Power Saving Technology)

2024-04-16 Thread José Relvas
On Tue, Apr 16, 2024 at 11:00:12AM +0300, Jani Nikula wrote:
> On Fri, 05 Apr 2024, José Relvas  wrote:
> > The best approach here would probably be to expose a similar attribute to 
> > amdgpu's 
> > "panel_power_savings", with a scale that controls the feature's 
> > aggressiveness,
> > then update userspace tools, including power-profiles-daemon, to set the 
> > value
> > based on the intended energy scheme.
> 
> I don't really know what panel_power_savings does or how it works, but
> clearly it's not how this particular thing works on Intel
> hardware. There isn't a trivial knob you could adjust.

I've investigated this further. AMD's marketing name for it
is "Vari-Bright" and, on Windows, can be controlled through their gfx
control panel, with a 4-level slider. Internally, it seems to be called
"Adaptive Backlight Modulation" (ABM). It increases the brightness of the
image to account for a lower backlight level.

I had a cursory look at the amdgpu driver, but I'm not sure if the algorithm
is there, or if its handled in firmware.

> Where you have to add an API for reading the image histogram, add an API
> to set the image enhancement parameters, and how that function works is
> userspace policy that needs to be implemented in userspace.

Hmm... this could be handled by a daemon. Said daemon could hook into
PPD's state to check if it should be trying to save power.

-

One more question. Some documentation refers to 
"OPST (OLED power saving technology)". It's my understanding that this
uses the same hardware blocks and APIs as DPST - only the algorithm
in software is different. Userspace would need a way to distinguish
OLED panels from LCD panels so it can use the right algorithm. Is
there a reliable way of doing this? 
On my Thinkpad P1 gen 6, the OLED exposes a standard intel_backlight,
which actually controls the PWM. Afaik, there's no other way of
telling OLED and LCD apart in userspace.

José Relvas


Re: [REQUEST] Add support for Intel DPST (Display Power Saving Technology)

2024-04-16 Thread Jani Nikula
On Fri, 05 Apr 2024, José Relvas  wrote:
> The best approach here would probably be to expose a similar attribute to 
> amdgpu's 
> "panel_power_savings", with a scale that controls the feature's 
> aggressiveness,
> then update userspace tools, including power-profiles-daemon, to set the value
> based on the intended energy scheme.

I don't really know what panel_power_savings does or how it works, but
clearly it's not how this particular thing works on Intel
hardware. There isn't a trivial knob you could adjust.

Basically the goal is to reduce display brightness (and thus power
consumption) based on display content with the high level idea of:

reduced brightness, image enhancement params = fn(brightness, histogram)

Where you have to add an API for reading the image histogram, add an API
to set the image enhancement parameters, and how that function works is
userspace policy that needs to be implemented in userspace.


BR,
Jani.


-- 
Jani Nikula, Intel