The current code tries to read the brightness value via
dc_link_get_backlight_level() no matter whether it's controlled via
aux or not, and this results in a bogus value returned.
Fix it to read the current value via
dc_link_get_backlight_level_nits() for the aux.

BugLink: https://bugzilla.opensuse.org/show_bug.cgi?id=1180749
BugLink: https://gitlab.freedesktop.org/drm/amd/-/issues/1438
Signed-off-by: Takashi Iwai <ti...@suse.de>
---
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c   | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

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 c6da89df055d..fb62886ae013 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -3140,6 +3140,16 @@ static int set_backlight_via_aux(struct dc_link *link, 
uint32_t brightness)
        return rc ? 0 : 1;
 }
 
+static int get_backlight_via_aux(struct dc_link *link)
+{
+       uint32_t avg, peak;
+
+       if (!link ||
+           !dc_link_get_backlight_level_nits(link, &avg, &peak))
+               return DC_ERROR_UNEXPECTED;
+       return avg;
+}
+
 static int get_brightness_range(const struct amdgpu_dm_backlight_caps *caps,
                                unsigned *min, unsigned *max)
 {
@@ -3212,8 +3222,13 @@ static int amdgpu_dm_backlight_update_status(struct 
backlight_device *bd)
 static int amdgpu_dm_backlight_get_brightness(struct backlight_device *bd)
 {
        struct amdgpu_display_manager *dm = bl_get_data(bd);
-       int ret = dc_link_get_backlight_level(dm->backlight_link);
+       struct dc_link *link = (struct dc_link *)dm->backlight_link;
+       int ret;
 
+       if (dm->backlight_caps.aux_support)
+               ret = get_backlight_via_aux(link);
+       else
+               ret = dc_link_get_backlight_level(link);
        if (ret == DC_ERROR_UNEXPECTED)
                return bd->props.brightness;
        return convert_brightness_to_user(&dm->backlight_caps, ret);
-- 
2.26.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to