[Intel-gfx] [v4 08/12] drm/i915: Write HDR infoframe and send to panel
Uma Shankar
uma.shankar at intel.com
Tue Jan 8 09:11:23 UTC 2019
Enable writing of HDR metadata infoframe to panel.
The data will be provid by usersapace compositors, based
on blending policies and passsed to driver through a blob
property.
v2: Rebase
v3: Fixed a warning message
v4: Addressed Shashank's review comments
Signed-off-by: Uma Shankar <uma.shankar at intel.com>
---
drivers/gpu/drm/i915/intel_hdmi.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 4adda61..8f2be2b 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -475,6 +475,30 @@ static void intel_write_infoframe(struct intel_encoder *encoder,
frame->any.type, buffer, len);
}
+/* Set Dynamic Range and Mastering Infoframe */
+static void intel_hdmi_set_drm_infoframe(struct intel_encoder *encoder,
+ const struct intel_crtc_state
+ *crtc_state,
+ const struct drm_connector_state
+ *conn_state)
+{
+ union hdmi_infoframe frame;
+ struct hdr_static_metadata *hdr_metadata;
+ int ret;
+
+ hdr_metadata = (struct hdr_static_metadata *)
+ conn_state->hdr_output_metadata_blob_ptr->data;
+
+ ret = drm_hdmi_infoframe_set_hdr_metadata(&frame.drm, hdr_metadata);
+ if (ret < 0) {
+ DRM_ERROR("couldn't set HDR metadata in infoframe\n");
+ return;
+ }
+
+ /* Todo: Need to extend support for LSPCON devices as well */
+ intel_write_infoframe(encoder, crtc_state, &frame);
+}
+
static void intel_hdmi_set_avi_infoframe(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state,
const struct drm_connector_state *conn_state)
@@ -883,6 +907,10 @@ static void hsw_set_infoframes(struct intel_encoder *encoder,
intel_hdmi_set_avi_infoframe(encoder, crtc_state, conn_state);
intel_hdmi_set_spd_infoframe(encoder, crtc_state);
intel_hdmi_set_hdmi_infoframe(encoder, crtc_state, conn_state);
+
+ /* Set Dynamic Range and Mastering Infoframe if supported and changed */
+ if (conn_state->hdr_metadata_changed)
+ intel_hdmi_set_drm_infoframe(encoder, crtc_state, conn_state);
}
void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable)
--
1.9.1
More information about the Intel-gfx
mailing list