drm/amd/display: add dc_fixpt_from_s3132 helper
authorJoshua Ashton <joshua@froggi.es>
Thu, 16 Nov 2023 19:58:01 +0000 (18:58 -0100)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 13 Dec 2023 21:08:01 +0000 (16:08 -0500)
Detach value translation from CTM to reuse it for programming HDR
multiplier property.

Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Joshua Ashton <joshua@froggi.es>
Signed-off-by: Melissa Wen <mwen@igalia.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
drivers/gpu/drm/amd/display/include/fixed31_32.h

index 8fc715f..c160dbe 100644 (file)
@@ -405,7 +405,6 @@ static void __drm_lut_to_dc_gamma(const struct drm_color_lut *lut,
 static void __drm_ctm_to_dc_matrix(const struct drm_color_ctm *ctm,
                                   struct fixed31_32 *matrix)
 {
-       int64_t val;
        int i;
 
        /*
@@ -424,12 +423,7 @@ static void __drm_ctm_to_dc_matrix(const struct drm_color_ctm *ctm,
                }
 
                /* gamut_remap_matrix[i] = ctm[i - floor(i/4)] */
-               val = ctm->matrix[i - (i / 4)];
-               /* If negative, convert to 2's complement. */
-               if (val & (1ULL << 63))
-                       val = -(val & ~(1ULL << 63));
-
-               matrix[i].value = val;
+               matrix[i] = dc_fixpt_from_s3132(ctm->matrix[i - (i / 4)]);
        }
 }
 
index d4cf7ea..84da1dd 100644 (file)
@@ -69,6 +69,18 @@ static const struct fixed31_32 dc_fixpt_epsilon = { 1LL };
 static const struct fixed31_32 dc_fixpt_half = { 0x80000000LL };
 static const struct fixed31_32 dc_fixpt_one = { 0x100000000LL };
 
+static inline struct fixed31_32 dc_fixpt_from_s3132(__u64 x)
+{
+       struct fixed31_32 val;
+
+       /* If negative, convert to 2's complement. */
+       if (x & (1ULL << 63))
+               x = -(x & ~(1ULL << 63));
+
+       val.value = x;
+       return val;
+}
+
 /*
  * @brief
  * Initialization routines