drm/vc4: hdmi: Signal the proper colorimetry info in the infoframe
[linux-2.6-microblaze.git] / drivers / gpu / drm / vc4 / vc4_hdmi.c
index a1b18fe..c27b287 100644 (file)
@@ -226,7 +226,8 @@ static int vc4_hdmi_connector_atomic_check(struct drm_connector *connector,
        if (!crtc)
                return 0;
 
-       if (!drm_connector_atomic_hdr_metadata_equal(old_state, new_state)) {
+       if (old_state->colorspace != new_state->colorspace ||
+           !drm_connector_atomic_hdr_metadata_equal(old_state, new_state)) {
                struct drm_crtc_state *crtc_state;
 
                crtc_state = drm_atomic_get_crtc_state(state, crtc);
@@ -316,6 +317,11 @@ static int vc4_hdmi_connector_init(struct drm_device *dev,
        if (ret)
                return ret;
 
+       ret = drm_mode_create_hdmi_colorspace_property(connector);
+       if (ret)
+               return ret;
+
+       drm_connector_attach_colorspace_property(connector);
        drm_connector_attach_tv_margin_properties(connector);
        drm_connector_attach_max_bpc_property(connector, 8, 12);
 
@@ -424,7 +430,7 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder)
                                           vc4_encoder->limited_rgb_range ?
                                           HDMI_QUANTIZATION_RANGE_LIMITED :
                                           HDMI_QUANTIZATION_RANGE_FULL);
-
+       drm_hdmi_avi_infoframe_colorspace(&frame.avi, cstate);
        drm_hdmi_avi_infoframe_bars(&frame.avi, cstate);
 
        vc4_hdmi_write_infoframe(encoder, &frame);