[RFC v1 3/7] drm/i915: Add Support for Multi Segment Gamma Mode

Uma Shankar uma.shankar at intel.com
Tue Mar 19 07:17:19 UTC 2019


Multi Segment Gamma Mode is added in Gen11+ platforms.
Added a property interface to enable that.

Signed-off-by: Uma Shankar <uma.shankar at intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h    |  1 +
 drivers/gpu/drm/i915/intel_color.c | 23 +++++++++++++++++++++++
 include/uapi/drm/i915_drm.h        | 14 ++++++++++++++
 3 files changed, 38 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 02231ae..f20d418 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1736,6 +1736,7 @@ struct drm_i915_private {
 	struct drm_property *force_audio_property;
 
 	struct drm_property *gamma_mode_property;
+	struct drm_property *multi_segment_gamma_mode_property;
 
 	/* hda/i915 audio component */
 	struct i915_audio_component *audio_component;
diff --git a/drivers/gpu/drm/i915/intel_color.c b/drivers/gpu/drm/i915/intel_color.c
index 9d43d19..399d63d 100644
--- a/drivers/gpu/drm/i915/intel_color.c
+++ b/drivers/gpu/drm/i915/intel_color.c
@@ -149,6 +149,26 @@ static bool crtc_state_is_legacy_gamma(const struct intel_crtc_state *crtc_state
 	drm_object_attach_property(&crtc->base.base, prop, 0);
 }
 
+void
+intel_attach_multi_segment_gamma_mode_property(struct intel_crtc *crtc)
+{
+	struct drm_device *dev = crtc->base.dev;
+	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct drm_property *prop;
+
+	prop = dev_priv->multi_segment_gamma_mode_property;
+	if (!prop) {
+		prop = drm_property_create(dev, DRM_MODE_PROP_BLOB,
+					   "Multi-segment Gamma", 0);
+		if (!prop)
+			return;
+
+		dev_priv->multi_segment_gamma_mode_property = prop;
+	}
+
+	drm_object_attach_property(&crtc->base.base, prop, 0);
+}
+
 /*
  * When using limited range, multiply the matrix given by userspace by
  * the matrix that we would use for the limited range.
@@ -953,4 +973,7 @@ void intel_color_init(struct intel_crtc *crtc)
 					   INTEL_INFO(dev_priv)->color.gamma_lut_size);
 
 	intel_attach_gamma_mode_property(crtc);
+
+	if (INTEL_GEN(dev_priv) >= 11)
+		intel_attach_multi_segment_gamma_mode_property(crtc);
 }
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
index aa2d4c7..8f1974e 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
@@ -1842,6 +1842,20 @@ struct drm_i915_query_topology_info {
 	__u8 data[];
 };
 
+/*
+ * Structure for muti segmented gamma lut
+ */
+struct multi_segment_gamma_lut {
+	/* Number of Lut Segments */
+	__u8 segment_cnt;
+	/* Precison of LUT entries in bits */
+	__u8 precision_bits;
+	/* Pointer having number of LUT elements in each segment */
+	__u32 *segment_lut_cnt_ptr;
+	/* Pointer to store exact lut values for each segment */
+	__u32 *segment_lut_ptr;
+};
+
 #if defined(__cplusplus)
 }
 #endif
-- 
1.9.1



More information about the Intel-gfx-trybot mailing list