drm/amd/display: fix calculation for the pwl backlight curve
authorAnthony Koo <Anthony.Koo@amd.com>
Sat, 16 Jan 2021 02:45:43 +0000 (21:45 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 2 Feb 2021 17:09:46 +0000 (12:09 -0500)
[Why]
The PWL backlight curve is used by the firmware to convert between
brightness and linear PWM value.
Driver has a backlight LUT, but the firmware holds a PWL curve and
interpolates between points.

The calculations are incorrect leading to slightly off backlight values
being programmed.

[How]
Fix the PWL backlight curve threshold/offset calculations

Signed-off-by: Anthony Koo <Anthony.Koo@amd.com>
Reviewed-by: Josip Pavic <Josip.Pavic@amd.com>
Acked-by: Anson Jacob <Anson.Jacob@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/modules/power/power_helpers.c

index 3d4c66933f518863c58b7c977a0463c9de3085a8..6270ecbd24389b8f47f684aa2142e7e312cb3585 100644 (file)
@@ -266,7 +266,7 @@ static void fill_backlight_transform_table_v_2_2(struct dmcu_iram_parameters par
         * format U4.10.
         */
        for (i = 1; i+1 < num_entries; i++) {
-               lut_index = (params.backlight_lut_array_size - 1) * i / (num_entries - 1);
+               lut_index = DIV_ROUNDUP((i * params.backlight_lut_array_size), num_entries);
                ASSERT(lut_index < params.backlight_lut_array_size);
 
                table->backlight_thresholds[i] = (big_endian) ?