Check that convert_brightness_from_user() adds the minimum once with a
custom curve: a request for 0 gives user_min on the AUX and the PWM
range, and half the AUX range matches a value worked out by hand

Signed-off-by: Hugo Sales <[email protected]>
---
KUnit on UML with PROVE_LOCKING: amdgpu_dm_backlight passes 74 of 74.
Without patch 1 the new test fails with 1998, 131999 and 6023
---
 .../amdgpu_dm/tests/amdgpu_dm_backlight_test.c     | 40 ++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git 
a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_backlight_test.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_backlight_test.c
index f1a558516cd8b..3d00cde8c77bc 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_backlight_test.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_backlight_test.c
@@ -1383,6 +1383,45 @@ static void dm_test_brightness_from_user_midrange(struct 
kunit *test)
        KUNIT_EXPECT_LE(test, result, max);
 }
 
+/**
+ * dm_test_brightness_from_user_curve_min - Test Custom curve adds the minimum 
once
+ * @test: The KUnit test context
+ *
+ * On the AUX range of 1..512 nits with points (50, 20%) and (200, 80%), a
+ * request for 0 must give the 1000 millinit minimum, where adding the
+ * minimum twice gave 1998. Half the scale is signal 128, luminance 51%,
+ * so 51 * 128 / 101 = 65 of 255, which is 1000 + 511000 * 65 / 255 =
+ * 131255. A request for 0 on the PWM range with min_input_signal 12 must
+ * give 12 * 0x101
+ */
+static void dm_test_brightness_from_user_curve_min(struct kunit *test)
+{
+       struct amdgpu_dm_backlight_caps caps = {};
+       uint saved_mask = amdgpu_dm_get_dc_debug_mask();
+
+       amdgpu_dm_set_dc_debug_mask(amdgpu_dm_get_dc_debug_mask() &
+                                   ~DC_DISABLE_CUSTOM_BRIGHTNESS_CURVE);
+
+       caps.aux_support = true;
+       caps.aux_min_input_signal = 1;
+       caps.aux_max_input_signal = 512;
+       caps.min_input_signal = 12;
+       caps.max_input_signal = AMDGPU_DM_DEFAULT_MAX_BACKLIGHT;
+       caps.data_points = 2;
+       caps.luminance_data[0].input_signal = 50;
+       caps.luminance_data[0].luminance = 20;
+       caps.luminance_data[1].input_signal = 200;
+       caps.luminance_data[1].luminance = 80;
+
+       KUNIT_EXPECT_EQ(test, convert_brightness_from_user(&caps, 0), 1000U);
+       KUNIT_EXPECT_EQ(test, convert_brightness_from_user(&caps, 256000), 
131255U);
+
+       caps.aux_support = false;
+       KUNIT_EXPECT_EQ(test, convert_brightness_from_user(&caps, 0), 12U * 
0x101);
+
+       amdgpu_dm_set_dc_debug_mask(saved_mask);
+}
+
 /**
  * dm_test_brightness_from_user_with_curve - Test Brightness from user with 
custom curve active
  * @test: The KUnit test context
@@ -1976,6 +2015,7 @@ static struct kunit_case dm_backlight_test_cases[] = {
        KUNIT_CASE(dm_test_brightness_to_user_above_max),
        KUNIT_CASE(dm_test_brightness_from_user_midrange),
        KUNIT_CASE(dm_test_brightness_from_user_with_curve),
+       KUNIT_CASE(dm_test_brightness_from_user_curve_min),
        KUNIT_CASE(dm_test_brightness_range_zero_signals),
        /* amdgpu_dm_backlight_fill_props */
        KUNIT_CASE(dm_test_backlight_fill_props_ac_linear),

-- 
2.56.0

Reply via email to