This adds colorspace information to HDMI AVI infoframe.
A helper function is added to program the same.

v2: Moved this to drm core instead of i915 driver.

Signed-off-by: Uma Shankar <uma.shan...@intel.com>
---
 drivers/gpu/drm/drm_connector.c |  2 +-
 drivers/gpu/drm/drm_edid.c      | 28 ++++++++++++++++++++++++++++
 include/drm/drm_edid.h          |  6 ++++++
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 86b368bf..086085d 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -862,7 +862,7 @@ int drm_display_info_set_bus_formats(struct 
drm_display_info *info,
        { DRM_MODE_COLORIMETRY_XVYCC_709, "XVYCC_709" },
        /* Colorimetry based on IEC 61966-2-5 */
        { DRM_MODE_COLORIMETRY_OPRGB, "opRGB" },
-       { DRM_MODE_COLORIMETRY_DCI_P3, "DCI-P3" },
+       { DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65, "DCI-P3_RGB_D65" },
        /* DP MSA Colorimetry */
        { DRM_MODE_DP_COLORIMETRY_YCBCR_ITU_601, "YCBCR_ITU_601" },
        { DRM_MODE_DP_COLORIMETRY_YCBCR_ITU_709, "YCBCR_ITU_709" },
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 990b190..1fc0978 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -4925,6 +4925,34 @@ static bool is_hdmi2_sink(struct drm_connector 
*connector)
 EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode);
 
 /**
+ * drm_hdmi_avi_infoframe_colorspace() - fill the HDMI AVI infoframe
+ *                                       colorspace information
+ * @frame: HDMI AVI infoframe
+ * @conn_state: connector state
+ */
+void
+drm_hdmi_avi_infoframe_colorspace(struct hdmi_avi_infoframe *frame,
+                                 const struct drm_connector_state *conn_state)
+{
+       if (conn_state->colorspace == DRM_MODE_COLORIMETRY_DEFAULT) {
+               /* Set No Data as default for HDMI */
+               frame->colorimetry = DRM_MODE_COLORIMETRY_NO_DATA;
+       } else if (conn_state->colorspace < DRM_MODE_COLORIMETRY_XVYCC_601) {
+               frame->colorimetry = conn_state->colorspace;
+       } else {
+               frame->colorimetry = HDMI_COLORIMETRY_EXTENDED;
+               /*
+                * Starting from extended list where COLORIMETRY_XV_YCC_601
+                * is the first extended mode and its value is 0 as per HDMI
+                * specification.
+                * ToDO: Extend to support ACE formats defined in CTA 861.G
+                */
+               frame->extended_colorimetry = conn_state->colorspace -
+                                               DRM_MODE_COLORIMETRY_XVYCC_601;
+       }
+}
+
+/**
  * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI infoframe
  *                                        quantization range information
  * @frame: HDMI AVI infoframe
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
index 8dc1a08..9d3b5b9 100644
--- a/include/drm/drm_edid.h
+++ b/include/drm/drm_edid.h
@@ -331,6 +331,7 @@ struct cea_sad {
 
 struct drm_encoder;
 struct drm_connector;
+struct drm_connector_state;
 struct drm_display_mode;
 
 int drm_edid_to_sad(struct edid *edid, struct cea_sad **sads);
@@ -358,6 +359,11 @@ int drm_av_sync_delay(struct drm_connector *connector,
 drm_hdmi_vendor_infoframe_from_display_mode(struct hdmi_vendor_infoframe 
*frame,
                                            struct drm_connector *connector,
                                            const struct drm_display_mode 
*mode);
+
+void
+drm_hdmi_avi_infoframe_colorspace(struct hdmi_avi_infoframe *frame,
+                                 const struct drm_connector_state *conn_state);
+
 void
 drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame,
                                   struct drm_connector *connector,
-- 
1.9.1

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

Reply via email to