AMD-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH RESEND 1/2] drm/amd/display: Use linear backlight curve in power module
@ 2026-09-16 19:11 Matthew Schwartz
  2026-09-16 19:11 ` [PATCH RESEND 2/2] drm/amd/display: Keep backlight precision in millipercent Matthew Schwartz
  2026-09-29  1:35 ` [PATCH RESEND 1/2] drm/amd/display: Use linear backlight curve in power module Ray Wu
  0 siblings, 2 replies; 4+ messages in thread
From: Matthew Schwartz @ 2026-09-16 19:11 UTC (permalink / raw)
  To: Harry Wentland, Leo Li, Alex Deucher, Ray Wu
  Cc: Mario Limonciello, amd-gfx, dri-devel, Matthew Schwartz

amdgpu_dm already applies the ATIF custom brightness curve in
convert_custom_brightness() before handing the level to the power
module. The power module then builds its own percent to PWM LUT from
the same ATIF data in initialize_backlight_caps() and applies the curve
a second time. On the Lenovo Legion Go S this maps the bottom 40% of the
brightness range to under 12% PWM, where the panel no longer visibly
changes.

Tell the power module to use its linear curve so the PWM is a straight
rescale of the level DM computed, matching the behavior before the power
module took over backlight programming.

Fixes: 3c108046e1d6 ("drm/amd/display: Add power module on Linux")
Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index ca795cda8084..63acefc0acfb 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -455,7 +455,7 @@ STATIC_IFN_KUNIT int amdgpu_dm_init_power_module(struct amdgpu_display_manager *
 			!(amdgpu_dc_feature_mask & DC_DISABLE_FRACTIONAL_PWM_MASK);
 		init_data[i].use_custom_backlight_caps = false;
 		init_data[i].custom_backlight_caps_config_no = 0;
-		init_data[i].use_linear_backlight_curve = false;
+		init_data[i].use_linear_backlight_curve = true;
 		init_data[i].def_varibright_enable = 0;
 		init_data[i].varibright_level = 0;
 		/*
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH RESEND 2/2] drm/amd/display: Keep backlight precision in millipercent
  2026-09-16 19:11 [PATCH RESEND 1/2] drm/amd/display: Use linear backlight curve in power module Matthew Schwartz
@ 2026-09-16 19:11 ` Matthew Schwartz
  2026-09-29  1:37   ` Ray Wu
  2026-09-29  1:35 ` [PATCH RESEND 1/2] drm/amd/display: Use linear backlight curve in power module Ray Wu
  1 sibling, 1 reply; 4+ messages in thread
From: Matthew Schwartz @ 2026-09-16 19:11 UTC (permalink / raw)
  To: Harry Wentland, Leo Li, Alex Deucher, Ray Wu
  Cc: Mario Limonciello, amd-gfx, dri-devel, Matthew Schwartz

The power module takes the backlight level in millipercent, but DM
rounds the 16-bit level to a whole percent before multiplying by 1000,
collapsing the range to 101 steps. It also divides the absolute level,
which already includes the panel minimum, by the min to max span, so
panels with a nonzero minimum PWM overshoot the top of the range.

Scale the offset from the minimum to millipercent directly so the full
resolution reaches the power module and the minimum is only added once.

Fixes: 3c108046e1d6 ("drm/amd/display: Add power module on Linux")
Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
index 45e1732a5b04..079277d47b3f 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
@@ -326,7 +326,8 @@ void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
 	} else {
 		/* power module uses millipercent */
 		get_brightness_range(caps, &min, &max);
-		brightness = DIV_ROUND_CLOSEST(brightness * 100, (max - min)) * 1000;
+		brightness = DIV_ROUND_CLOSEST_ULL((u64)(brightness - min) * 100000,
+						   max - min);
 		rc = mod_power_set_backlight_percent(dm->power_module, stream,
 						     brightness, 0, false);
 	}
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH RESEND 1/2] drm/amd/display: Use linear backlight curve in power module
  2026-09-16 19:11 [PATCH RESEND 1/2] drm/amd/display: Use linear backlight curve in power module Matthew Schwartz
  2026-09-16 19:11 ` [PATCH RESEND 2/2] drm/amd/display: Keep backlight precision in millipercent Matthew Schwartz
@ 2026-09-29  1:35 ` Ray Wu
  1 sibling, 0 replies; 4+ messages in thread
From: Ray Wu @ 2026-09-29  1:35 UTC (permalink / raw)
  To: Matthew Schwartz, Wentland, Harry, Li, Sun peng (Leo),
	Deucher, Alexander
  Cc: Limonciello, Mario, amd-gfx@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org

Hi Mathew,

We have a similar change has already been merged into asdn DC 3.2.400 
release.
     commit: drm/amd/display: map PWM brightness through custom 
backlight curve

Could you give it a try? If you still see any other issues, please feel 
free to send an updated patch.
Thanks!

On 9/17/2026 3:11 AM, Matthew Schwartz wrote:
> amdgpu_dm already applies the ATIF custom brightness curve in
> convert_custom_brightness() before handing the level to the power
> module. The power module then builds its own percent to PWM LUT from
> the same ATIF data in initialize_backlight_caps() and applies the curve
> a second time. On the Lenovo Legion Go S this maps the bottom 40% of the
> brightness range to under 12% PWM, where the panel no longer visibly
> changes.
>
> Tell the power module to use its linear curve so the PWM is a straight
> rescale of the level DM computed, matching the behavior before the power
> module took over backlight programming.
>
> Fixes: 3c108046e1d6 ("drm/amd/display: Add power module on Linux")
> Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
> ---
>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index ca795cda8084..63acefc0acfb 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -455,7 +455,7 @@ STATIC_IFN_KUNIT int amdgpu_dm_init_power_module(struct amdgpu_display_manager *
>   			!(amdgpu_dc_feature_mask & DC_DISABLE_FRACTIONAL_PWM_MASK);
>   		init_data[i].use_custom_backlight_caps = false;
>   		init_data[i].custom_backlight_caps_config_no = 0;
> -		init_data[i].use_linear_backlight_curve = false;
> +		init_data[i].use_linear_backlight_curve = true;
>   		init_data[i].def_varibright_enable = 0;
>   		init_data[i].varibright_level = 0;
>   		/*

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH RESEND 2/2] drm/amd/display: Keep backlight precision in millipercent
  2026-09-16 19:11 ` [PATCH RESEND 2/2] drm/amd/display: Keep backlight precision in millipercent Matthew Schwartz
@ 2026-09-29  1:37   ` Ray Wu
  0 siblings, 0 replies; 4+ messages in thread
From: Ray Wu @ 2026-09-29  1:37 UTC (permalink / raw)
  To: Matthew Schwartz, Wentland, Harry, Li, Sun peng (Leo),
	Deucher, Alexander
  Cc: Limonciello, Mario, amd-gfx@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org

Hi Mathew,

Same as your other patch, a similar change has already been merged into 
asdn DC 3.2.400 release.
     commit: drm/amd/display: map PWM brightness through custom 
backlight curve

Please give it a try, and if you still see any other issues, feel free 
to send an updated patch.

Thanks,
Ray

On 9/17/2026 3:11 AM, Matthew Schwartz wrote:
> The power module takes the backlight level in millipercent, but DM
> rounds the 16-bit level to a whole percent before multiplying by 1000,
> collapsing the range to 101 steps. It also divides the absolute level,
> which already includes the panel minimum, by the min to max span, so
> panels with a nonzero minimum PWM overshoot the top of the range.
>
> Scale the offset from the minimum to millipercent directly so the full
> resolution reaches the power module and the minimum is only added once.
>
> Fixes: 3c108046e1d6 ("drm/amd/display: Add power module on Linux")
> Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
> ---
>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
> index 45e1732a5b04..079277d47b3f 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
> @@ -326,7 +326,8 @@ void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
>   	} else {
>   		/* power module uses millipercent */
>   		get_brightness_range(caps, &min, &max);
> -		brightness = DIV_ROUND_CLOSEST(brightness * 100, (max - min)) * 1000;
> +		brightness = DIV_ROUND_CLOSEST_ULL((u64)(brightness - min) * 100000,
> +						   max - min);
>   		rc = mod_power_set_backlight_percent(dm->power_module, stream,
>   						     brightness, 0, false);
>   	}

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-09-29  1:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-16 19:11 [PATCH RESEND 1/2] drm/amd/display: Use linear backlight curve in power module Matthew Schwartz
2026-09-16 19:11 ` [PATCH RESEND 2/2] drm/amd/display: Keep backlight precision in millipercent Matthew Schwartz
2026-09-29  1:37   ` Ray Wu
2026-09-29  1:35 ` [PATCH RESEND 1/2] drm/amd/display: Use linear backlight curve in power module Ray Wu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox