Unverified Commit 76a262d2 authored by Maxime Ripard's avatar Maxime Ripard
Browse files

drm/vc4: hdmi: Signal the proper colorimetry info in the infoframe



Our driver while supporting HDR didn't send the proper colorimetry info
in the AVI infoframe.

Let's add the property needed so that the userspace can let us know what
the colorspace is supposed to be.

Reviewed-by: default avatarJernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20210430094451.2145002-5-maxime@cerno.tech
parent 21f79128
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -226,7 +226,8 @@ static int vc4_hdmi_connector_atomic_check(struct drm_connector *connector,
	if (!crtc)
	if (!crtc)
		return 0;
		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;
		struct drm_crtc_state *crtc_state;


		crtc_state = drm_atomic_get_crtc_state(state, crtc);
		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)
	if (ret)
		return 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_tv_margin_properties(connector);
	drm_connector_attach_max_bpc_property(connector, 8, 12);
	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 ?
					   vc4_encoder->limited_rgb_range ?
					   HDMI_QUANTIZATION_RANGE_LIMITED :
					   HDMI_QUANTIZATION_RANGE_LIMITED :
					   HDMI_QUANTIZATION_RANGE_FULL);
					   HDMI_QUANTIZATION_RANGE_FULL);

	drm_hdmi_avi_infoframe_colorspace(&frame.avi, cstate);
	drm_hdmi_avi_infoframe_bars(&frame.avi, cstate);
	drm_hdmi_avi_infoframe_bars(&frame.avi, cstate);


	vc4_hdmi_write_infoframe(encoder, &frame);
	vc4_hdmi_write_infoframe(encoder, &frame);