From: Alex Hung <[email protected]> [WHAT] Add a KUnit case covering the successful path of amdgpu_dm_register_backlight_device(). The test uses the standard DRM KUnit device helpers to register a native backlight device, verifies the calculated backlight properties and cached brightness, and unregisters the device through KUnit cleanup to avoid leaking a class device across cases.
Assisted-by: Copilot:GPT-5.6-Terra Reviewed-by: Bhawanpreet Lakha <[email protected]> Signed-off-by: Alex Hung <[email protected]> Signed-off-by: Fangzhi Zuo <[email protected]> Tested-by: Dan Wheeler <[email protected]> --- .../tests/amdgpu_dm_backlight_test.c | 52 +++++++++++++++++++ 1 file changed, 52 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 618fd5142da0..7ca17f803f9d 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 @@ -326,6 +326,11 @@ static int dm_test_get_backlight_level_error(const struct dc_link *link) return DC_ERROR_UNEXPECTED; } +static void dm_test_unregister_backlight_device(void *data) +{ + backlight_device_unregister(data); +} + static bool dm_test_get_backlight_level_nits(struct dc_link *link, uint32_t *avg, uint32_t *peak) @@ -463,6 +468,52 @@ static void dm_test_register_backlight_device_negative_index(struct kunit *test) KUNIT_EXPECT_NULL(test, adev->dm.backlight_dev[0]); } +/** + * dm_test_register_backlight_device_success - Test native backlight registration + * @test: The KUnit test context + * + * A native backlight device must be registered with the calculated + * properties, and its initial readback must retain the initial brightness. + */ +static void dm_test_register_backlight_device_success(struct kunit *test) +{ + struct amdgpu_device *adev = dm_kunit_alloc_adev(test); + struct amdgpu_dm_connector *aconnector; + struct amdgpu_dm_backlight_caps *caps; + struct dc_link *link = dm_kunit_alloc_link(test); + struct drm_minor *primary; + unsigned int max; + + setup_test_link_service(test, link); + link->dc->link_srv->edp_get_backlight_level = dm_test_get_backlight_level_error; + primary = kunit_kzalloc(test, sizeof(*primary), GFP_KERNEL); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, primary); + adev->ddev.primary = primary; + adev->dm.backlight_link[0] = link; + + aconnector = dm_kunit_alloc_connector(test, adev, link); + aconnector->bl_idx = 0; + aconnector->base.kdev = adev->ddev.dev; + caps = &adev->dm.backlight_caps[0]; + caps->min_input_signal = AMDGPU_DM_DEFAULT_MIN_BACKLIGHT; + caps->max_input_signal = AMDGPU_DM_DEFAULT_MAX_BACKLIGHT; + caps->ac_level = 50; + caps->dc_level = 25; + max = 0x101 * AMDGPU_DM_DEFAULT_MAX_BACKLIGHT; + + amdgpu_dm_register_backlight_device(aconnector); + + KUNIT_ASSERT_NOT_NULL(test, adev->dm.backlight_dev[0]); + KUNIT_EXPECT_EQ(test, adev->dm.backlight_dev[0]->props.max_brightness, max); + KUNIT_EXPECT_EQ(test, adev->dm.backlight_dev[0]->props.brightness, + DIV_ROUND_CLOSEST(max * caps->ac_level, 100)); + KUNIT_EXPECT_EQ(test, adev->dm.brightness[0], + adev->dm.backlight_dev[0]->props.brightness); + KUNIT_ASSERT_EQ(test, kunit_add_action_or_reset(test, + dm_test_unregister_backlight_device, + adev->dm.backlight_dev[0]), 0); +} + static struct drm_connector *setup_panel_power_savings_connector(struct kunit *test, struct device **device_out, struct dm_connector_state **state_out) @@ -1861,6 +1912,7 @@ static struct kunit_case dm_backlight_test_cases[] = { KUNIT_CASE(dm_test_backlight_get_brightness_uses_device_index), /* amdgpu_dm_register_backlight_device */ KUNIT_CASE(dm_test_register_backlight_device_negative_index), + KUNIT_CASE(dm_test_register_backlight_device_success), /* panel_power_savings_show / store */ KUNIT_CASE(dm_test_panel_power_savings_show_maps_disable_to_zero), KUNIT_CASE(dm_test_panel_power_savings_show_reports_level), -- 2.53.0
