mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-28 08:44:29 -04:00
drm/amd/display: Fix backlight max_brightness to match exported range
[Why] FWTS autobrightness fails on eDP panels because actual_brightness can read higher than the advertised max_brightness (e.g. 63576 vs 62451). The conversion helpers expose the firmware PWM range to userspace as [0..max]. But max_brightness is advertised as (max - min), which is smaller. So reading the level can return a value above max_brightness. This regressed in commit4b61b8a390("drm/amd/display: Add debugging message for brightness caps"), which changed max_brightness to (max - min) and undid commit8dbd72cb79("drm/amd/display: Export full brightness range to userspace"). [How] Advertise max_brightness as max, and scale the initial AC/DC brightness against max too. Update the KUnit expectations to match. Fixes:4b61b8a390("drm/amd/display: Add debugging message for brightness caps") Reviewed-by: Alex Hung <alex.hung@amd.com> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Signed-off-by: George Zhang <george.zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
72b9404802
commit
bd9e2b5b04
@@ -407,12 +407,12 @@ void amdgpu_dm_backlight_fill_props(const struct amdgpu_dm_backlight_caps *caps,
|
||||
|
||||
if (get_brightness_range(caps, &min, &max)) {
|
||||
if (is_system_supplied)
|
||||
props->brightness = DIV_ROUND_CLOSEST((max - min) * caps->ac_level,
|
||||
props->brightness = DIV_ROUND_CLOSEST(max * caps->ac_level,
|
||||
100);
|
||||
else
|
||||
props->brightness = DIV_ROUND_CLOSEST((max - min) * caps->dc_level,
|
||||
props->brightness = DIV_ROUND_CLOSEST(max * caps->dc_level,
|
||||
100);
|
||||
props->max_brightness = max - min;
|
||||
props->max_brightness = max;
|
||||
} else {
|
||||
props->brightness = MAX_BACKLIGHT_LEVEL;
|
||||
props->max_brightness = MAX_BACKLIGHT_LEVEL;
|
||||
|
||||
@@ -799,8 +799,8 @@ static void dm_test_backlight_fill_props_ac_linear(struct kunit *test)
|
||||
amdgpu_dm_backlight_fill_props(&caps, true, false, &props);
|
||||
|
||||
KUNIT_EXPECT_EQ(test, props.brightness,
|
||||
DIV_ROUND_CLOSEST((max - min) * caps.ac_level, 100));
|
||||
KUNIT_EXPECT_EQ(test, props.max_brightness, max - min);
|
||||
DIV_ROUND_CLOSEST(max * caps.ac_level, 100));
|
||||
KUNIT_EXPECT_EQ(test, props.max_brightness, max);
|
||||
KUNIT_EXPECT_EQ(test, props.scale, BACKLIGHT_SCALE_LINEAR);
|
||||
KUNIT_EXPECT_EQ(test, props.type, BACKLIGHT_RAW);
|
||||
}
|
||||
@@ -825,8 +825,8 @@ static void dm_test_backlight_fill_props_dc_nonlinear(struct kunit *test)
|
||||
amdgpu_dm_backlight_fill_props(&caps, false, true, &props);
|
||||
|
||||
KUNIT_EXPECT_EQ(test, props.brightness,
|
||||
DIV_ROUND_CLOSEST((max - min) * caps.dc_level, 100));
|
||||
KUNIT_EXPECT_EQ(test, props.max_brightness, max - min);
|
||||
DIV_ROUND_CLOSEST(max * caps.dc_level, 100));
|
||||
KUNIT_EXPECT_EQ(test, props.max_brightness, max);
|
||||
KUNIT_EXPECT_EQ(test, props.scale, BACKLIGHT_SCALE_NON_LINEAR);
|
||||
KUNIT_EXPECT_EQ(test, props.type, BACKLIGHT_RAW);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user