Re: [PATCH] drm/amd/display: Scale custom brightness curve from full range

Mario Limonciello <[email protected]>
Newsgroups org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel,org.kernel.vger.stable
Message-ID <[email protected]>

On 8/13/26 12:09, Akhmed Zhitaev wrote:
> Custom brightness curves use an 8-bit input signal.  After exporting the
> full PWM range to userspace, the curve normalizer still divides requests
> by the physical PWM span.  On panels with a nonzero minimum PWM level,
> this can produce a curve input greater than 255 and send an invalid
> backlight level to DC.
> 
> Scale the userspace [0..max] range to the curve's [0..255] range
> instead.  This retains the full advertised range and keeps the reverse
> readback conversion unchanged.
> 
> Fixes: 8dbd72cb7900 ("drm/amd/display: Export full brightness range to userspace")
> Cc: [email protected]
> Signed-off-by: Akhmed Zhitaev <[email protected]>
> ---
>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 ++++----
>   1 file changed, 4 insertions(+), 4 deletions(-)
> 
> 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 40d82a3ee..533c69f0b 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -5131,10 +5131,10 @@ static int get_brightness_range(const struct amdgpu_dm_backlight_caps *caps,
>   	return 1;
>   }
>   
> -/* Rescale from [min..max] to [0..AMDGPU_MAX_BL_LEVEL] */
> -static inline u32 scale_input_to_fw(int min, int max, u64 input)
> +/* Rescale userspace [0..max] to the firmware curve's [0..255]. */
> +static inline u32 scale_input_to_fw(int max, u64 input)
>   {
> -	return DIV_ROUND_CLOSEST_ULL(input * AMDGPU_MAX_BL_LEVEL, max - min);
> +	return DIV_ROUND_CLOSEST_ULL(input * AMDGPU_MAX_BL_LEVEL, max);
>   }
>   
>   /* Rescale from [0..AMDGPU_MAX_BL_LEVEL] to [min..max] */
> @@ -5147,7 +5147,7 @@ static void convert_custom_brightness(const struct amdgpu_dm_backlight_caps *cap
>   				      unsigned int min, unsigned int max,
>   				      uint32_t *user_brightness)
>   {
> -	u32 brightness = scale_input_to_fw(min, max, *user_brightness);
> +	u32 brightness = scale_input_to_fw(max, *user_brightness);
>   	u8 lower_signal, upper_signal, upper_lum, lower_lum, lum;
>   	int left, right;
>   

Is this still needed with

"drm/amd/display: Fix backlight max_brightness to match exported range"

https://github.com/torvalds/linux/commit/f1b5d8f9cc54ae8a2567ac126867ae488e1bf625
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.