Le 20/12/2024 à 05:33, Alex Hung a écrit :
From: Harry Wentland <harry.wentl...@amd.com>

CTM values are defined as signed-magnitude values. Add
a helper that converts from CTM signed-magnitude fixed
point value to the twos-complement value used by
drm_fixed.

Signed-off-by: Harry Wentland <harry.wentl...@amd.com>

Reviewed-by: Louis Chauvet <louis.chau...@bootlin.com>

---
  include/drm/drm_fixed.h | 18 ++++++++++++++++++
  1 file changed, 18 insertions(+)

diff --git a/include/drm/drm_fixed.h b/include/drm/drm_fixed.h
index 1922188f00e8..0b44f2f294ce 100644
--- a/include/drm/drm_fixed.h
+++ b/include/drm/drm_fixed.h
@@ -78,6 +78,24 @@ static inline u32 dfixed_div(fixed20_12 A, fixed20_12 B)
  #define DRM_FIXED_EPSILON     1LL
  #define DRM_FIXED_ALMOST_ONE  (DRM_FIXED_ONE - DRM_FIXED_EPSILON)
+/**
+ * @drm_sm2fixp
+ *
+ * Convert a 1.31.32 signed-magnitude fixed point to 32.32
+ * 2s-complement fixed point
+ *
+ * @return s64 2s-complement fixed point
+ */
+static inline s64 drm_sm2fixp(__u64 a)
+{
+       if ((a & (1LL << 63))) {
+               return -(a & 0x7fffffffffffffffll);
+       } else {
+               return a;
+       }
+
+}
+
  static inline s64 drm_int2fixp(int a)
  {
        return ((s64)a) << DRM_FIXED_POINT;

--
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


Reply via email to