[Why]
If the DC API fails to return actual brightness when backlight control
API requests it, then the wrong value may be returned.

[How]
Change return type of amdgpu_dm_backlight_get_level() to an integer
and pass an error code up to the caller.

Signed-off-by: Mario Limonciello (AMD) <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

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 d99617c9bbb9..de9b29ad6cab 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -5427,7 +5427,7 @@ static int amdgpu_dm_backlight_update_status(struct 
backlight_device *bd)
        return 0;
 }
 
-static u32 amdgpu_dm_backlight_get_level(struct amdgpu_display_manager *dm,
+static int amdgpu_dm_backlight_get_level(struct amdgpu_display_manager *dm,
                                         int bl_idx)
 {
        int ret;
@@ -5441,14 +5441,14 @@ static u32 amdgpu_dm_backlight_get_level(struct 
amdgpu_display_manager *dm,
                u32 avg, peak;
 
                if (!dc_link_get_backlight_level_nits(link, &avg, &peak))
-                       return dm->brightness[bl_idx];
+                       return -EINVAL;
                return convert_brightness_to_user(&caps, avg);
        }
 
        ret = dc_link_get_backlight_level(link);
 
        if (ret == DC_ERROR_UNEXPECTED)
-               return dm->brightness[bl_idx];
+               return -EINVAL;
 
        return convert_brightness_to_user(&caps, ret);
 }
@@ -5456,7 +5456,7 @@ static u32 amdgpu_dm_backlight_get_level(struct 
amdgpu_display_manager *dm,
 static int amdgpu_dm_backlight_get_brightness(struct backlight_device *bd)
 {
        struct amdgpu_display_manager *dm = bl_get_data(bd);
-       int i;
+       int i, ret;
 
        for (i = 0; i < dm->num_of_edps; i++) {
                if (bd == dm->backlight_dev[i])
@@ -5464,7 +5464,12 @@ static int amdgpu_dm_backlight_get_brightness(struct 
backlight_device *bd)
        }
        if (i >= AMDGPU_DM_MAX_NUM_EDP)
                i = 0;
-       return amdgpu_dm_backlight_get_level(dm, i);
+
+       ret = amdgpu_dm_backlight_get_level(dm, i);
+       if (ret < 0)
+               return dm->brightness[i];
+
+       return ret;
 }
 
 static const struct backlight_ops amdgpu_dm_backlight_ops = {
-- 
2.54.0

Reply via email to