All of lore.kernel.org
 help / color / mirror / Atom feed
From: Uma Shankar <uma.shankar@intel.com>
To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Cc: ville.syrjala@intel.com, maarten.lankhorst@intel.com
Subject: [v13 3/4] drm: Add colorspace info to AVI Infoframe
Date: Wed,  6 Feb 2019 03:34:43 +0530	[thread overview]
Message-ID: <1549404284-18355-4-git-send-email-uma.shankar@intel.com> (raw)
In-Reply-To: <1549404284-18355-1-git-send-email-uma.shankar@intel.com>

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.

v3: Exported the helper function.

v4: Added separate HDMI specific macro as per CTA spec.
This is separate from user exposed enum values. This is
as per Ville's suggestion.

Signed-off-by: Uma Shankar <uma.shankar@intel.com>
---
 drivers/gpu/drm/drm_edid.c  | 57 +++++++++++++++++++++++++++++++++++++++++++++
 include/drm/drm_connector.h | 20 ++++++++++++++++
 include/drm/drm_edid.h      |  6 +++++
 3 files changed, 83 insertions(+)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 990b190..7062e37 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -4925,6 +4925,63 @@ 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)
+{
+	u32 colorimetry_val = conn_state->colorspace &
+				FULL_COLORIMETRY_MASK;
+
+	switch (colorimetry_val) {
+	case DRM_MODE_COLORIMETRY_NO_DATA:
+		colorimetry_val = HDMI_COLORIMETRY_NO_DATA;
+		break;
+	case HDMI_COLORIMETRY_SMPTE_170M:
+		colorimetry_val = HDMI_COLORIMETRY_SMPTE_170M;
+		break;
+	case DRM_MODE_COLORIMETRY_BT709:
+		colorimetry_val = HDMI_COLORIMETRY_BT709;
+		break;
+	case DRM_MODE_COLORIMETRY_XVYCC_601:
+		colorimetry_val = HDMI_COLORIMETRY_XVYCC_601;
+		break;
+	case DRM_MODE_COLORIMETRY_XVYCC_709:
+		colorimetry_val = HDMI_COLORIMETRY_XVYCC_709;
+		break;
+	case DRM_MODE_COLORIMETRY_SYCC_601:
+		colorimetry_val = HDMI_COLORIMETRY_SYCC_601;
+		break;
+	case DRM_MODE_COLORIMETRY_OPYCC_601:
+		colorimetry_val = HDMI_COLORIMETRY_OPYCC_601;
+		break;
+	case DRM_MODE_COLORIMETRY_OPRGB:
+		colorimetry_val = HDMI_COLORIMETRY_OPRGB;
+		break;
+	case DRM_MODE_COLORIMETRY_BT2020_RGB:
+	case DRM_MODE_COLORIMETRY_BT2020_YCC:
+		colorimetry_val = HDMI_COLORIMETRY_BT2020_RGB;
+		break;
+	case DRM_MODE_COLORIMETRY_BT2020_CYCC:
+		colorimetry_val = HDMI_COLORIMETRY_BT2020_CYCC;
+		break;
+	default:
+		/* ToDo: DCI-P3 will be handled as part of ACE enabling */
+		colorimetry_val = HDMI_COLORIMETRY_NO_DATA;
+		break;
+	}
+
+	frame->colorimetry = colorimetry_val & NORMAL_COLORIMETRY_MASK;
+	frame->extended_colorimetry = (colorimetry_val >> 2) &
+					EXTENDED_COLORIMETRY_MASK;
+}
+EXPORT_SYMBOL(drm_hdmi_avi_infoframe_colorspace);
+
+/**
  * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI infoframe
  *                                        quantization range information
  * @frame: HDMI AVI infoframe
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 37d4dda..7b8062c 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -288,6 +288,26 @@ enum drm_panel_orientation {
 #define DRM_MODE_DP_COLORIMETRY_RGB_WIDE_GAMUT		16
 #define DRM_MODE_DP_COLORIMETRY_SCRGB			17
 
+/* HDMI Colorspace Spec Definitions */
+#define FULL_COLORIMETRY_MASK				0x1FF
+#define NORMAL_COLORIMETRY_MASK				0x3
+#define EXTENDED_COLORIMETRY_MASK			0x7
+#define EXTENDED_ACE_COLORIMETRY_MASK			0xF
+
+#define HDMI_COLORIMETRY_NO_DATA			0x0
+#define HDMI_COLORIMETRY_SMPTE_170M			0x1
+#define HDMI_COLORIMETRY_BT709				0x2
+#define HDMI_COLORIMETRY_XVYCC_601			0x3
+#define HDMI_COLORIMETRY_XVYCC_709			0x7
+#define HDMI_COLORIMETRY_SYCC_601			0xB
+#define HDMI_COLORIMETRY_OPYCC_601			0xF
+#define HDMI_COLORIMETRY_OPRGB				0x13
+#define HDMI_COLORIMETRY_BT2020_CYCC			0x17
+#define HDMI_COLORIMETRY_BT2020_RGB			0x1C
+#define HDMI_COLORIMETRY_BT2020_YCC			0x1C
+#define HDMI_COLORIMETRY_DCI_P3_RGB_D65			0x1F
+#define HDMI_COLORIMETRY_DCI_P3_RGB_THEATER		0x3F
+
 /**
  * struct drm_display_info - runtime data about the connected sink
  *
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

  parent reply	other threads:[~2019-02-05 22:04 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-05 22:04 [v13 0/4] Add Colorspace connector property interface Uma Shankar
2019-02-05 22:04 ` [v13 1/4] drm: Add HDMI colorspace property Uma Shankar
2019-02-05 22:04 ` [v13 2/4] drm: Add DP " Uma Shankar
2019-02-05 22:04 ` Uma Shankar [this message]
2019-02-05 22:04 ` [v13 4/4] drm/i915: Attach colorspace property and enable modeset Uma Shankar
2019-02-05 23:21 ` ✓ Fi.CI.BAT: success for Add Colorspace connector property interface (rev13) Patchwork
2019-02-06  5:39 ` ✓ Fi.CI.IGT: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1549404284-18355-4-git-send-email-uma.shankar@intel.com \
    --to=uma.shankar@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=maarten.lankhorst@intel.com \
    --cc=ville.syrjala@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.