From: Uma Shankar <uma.shan...@intel.com>

Enable Colorspace as BT2020 if driving HDR content.Sending Colorimetry
data for HDR using AVI infoframe. LSPCON firmware expects this and though
SOC drives DP, for HDMI panel AVI infoframe is sent to the LSPCON device
which transfers the same to HDMI sink.

Signed-off-by: Uma Shankar <uma.shan...@intel.com>
---
 drivers/gpu/drm/i915/display/intel_lspcon.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.c 
b/drivers/gpu/drm/i915/display/intel_lspcon.c
index 4d8027493f2c..5cede4f07f22 100644
--- a/drivers/gpu/drm/i915/display/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/display/intel_lspcon.c
@@ -506,6 +506,11 @@ void lspcon_read_infoframe(struct intel_encoder *encoder,
        /* FIXME implement this */
 }
 
+/* HDMI HDR Colorspace Spec Definitions */
+#define NORMAL_COLORIMETRY_MASK                0x3
+#define EXTENDED_COLORIMETRY_MASK      0x7
+#define HDMI_COLORIMETRY_BT2020_YCC    ((3 << 0) | (6 << 2) | (0 << 5))
+
 void lspcon_set_infoframes(struct intel_encoder *encoder,
                           bool enable,
                           const struct intel_crtc_state *crtc_state,
@@ -550,6 +555,19 @@ void lspcon_set_infoframes(struct intel_encoder *encoder,
                                           HDMI_QUANTIZATION_RANGE_LIMITED :
                                           HDMI_QUANTIZATION_RANGE_FULL);
 
+       /*
+        * Set BT2020 colorspace if driving HDR data
+        * ToDo: Make this generic and expose all colorspaces for lspcon
+        */
+       if (lspcon->active && conn_state->hdr_metadata_changed) {
+               frame.avi.colorimetry =
+                               HDMI_COLORIMETRY_BT2020_YCC &
+                               NORMAL_COLORIMETRY_MASK;
+               frame.avi.extended_colorimetry =
+                               (HDMI_COLORIMETRY_BT2020_YCC >> 2) &
+                                EXTENDED_COLORIMETRY_MASK;
+       }
+
        ret = hdmi_infoframe_pack(&frame, buf, sizeof(buf));
        if (ret < 0) {
                DRM_ERROR("Failed to pack AVI IF\n");
-- 
2.26.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to