[Intel-gfx] [PATCH 3/4] drm/edid: Fix HDMI VIC handling

Shankar, Uma uma.shankar at intel.com
Fri Oct 18 16:02:34 UTC 2019



>-----Original Message-----
>From: Intel-gfx <intel-gfx-bounces at lists.freedesktop.org> On Behalf Of Ville Syrjala
>Sent: Friday, October 4, 2019 7:49 PM
>To: dri-devel at lists.freedesktop.org
>Cc: intel-gfx at lists.freedesktop.org; Wayne Lin <waynelin at amd.com>
>Subject: [Intel-gfx] [PATCH 3/4] drm/edid: Fix HDMI VIC handling
>
>From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
>Extract drm_mode_hdmi_vic() to correctly calculate the final HDMI VIC for us.
>Currently this is being done a bit differently between the AVI and HDMI infoframes.
>Let's get both to agree on this.
>
>We need to allow the case where a mode is both 3D and has a HDMI VIC. Currently
>we'll just refuse to generate the HDMI infoframe when we really should be setting
>HDMI VIC to 0 and instead enabling 3D stereo signalling.
>
>If the sink doesn't even support the HDMI infoframe we should not be picking the
>HDMI VIC in favor of the CEA VIC, because then we'll end up not sending either VIC in
>the end.

Looks good to me.
Reviewed-by: Uma Shankar <uma.shankar at intel.com>

>Cc: Wayne Lin <waynelin at amd.com>
>Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
>---
> drivers/gpu/drm/drm_edid.c | 37 +++++++++++++++++++++----------------
> 1 file changed, 21 insertions(+), 16 deletions(-)
>
>diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index
>495b7fb4d9ef..c7f9f7ca75a2 100644
>--- a/drivers/gpu/drm/drm_edid.c
>+++ b/drivers/gpu/drm/drm_edid.c
>@@ -5160,11 +5160,25 @@ drm_hdmi_infoframe_set_hdr_metadata(struct
>hdmi_drm_infoframe *frame,  }
>EXPORT_SYMBOL(drm_hdmi_infoframe_set_hdr_metadata);
>
>+static u8 drm_mode_hdmi_vic(struct drm_connector *connector,
>+			    const struct drm_display_mode *mode) {
>+	bool has_hdmi_infoframe = connector ?
>+		connector->display_info.has_hdmi_infoframe : false;
>+
>+	if (!has_hdmi_infoframe)
>+		return 0;
>+
>+	/* No HDMI VIC when signalling 3D video format */
>+	if (mode->flags & DRM_MODE_FLAG_3D_MASK)
>+		return 0;
>+
>+	return drm_match_hdmi_mode(mode);
>+}
>+
> static u8 drm_mode_cea_vic(struct drm_connector *connector,
> 			   const struct drm_display_mode *mode)  {
>-	u8 vendor_if_vic = drm_match_hdmi_mode(mode);
>-	bool is_s3d = mode->flags & DRM_MODE_FLAG_3D_MASK;
> 	u8 vic;
>
> 	/*
>@@ -5173,7 +5187,7 @@ static u8 drm_mode_cea_vic(struct drm_connector
>*connector,
> 	 * VIC in AVI infoframes. Lets check if this mode is present in
> 	 * HDMI 1.4b 4K modes
> 	 */
>-	if (drm_valid_hdmi_vic(vendor_if_vic) && !is_s3d)
>+	if (drm_mode_hdmi_vic(connector, mode))
> 		return 0;
>
> 	vic = drm_match_cea_mode(mode);
>@@ -5433,8 +5447,6 @@ drm_hdmi_vendor_infoframe_from_display_mode(struct
>hdmi_vendor_infoframe *frame,
> 	bool has_hdmi_infoframe = connector ?
> 		connector->display_info.has_hdmi_infoframe : false;
> 	int err;
>-	u32 s3d_flags;
>-	u8 vic;
>
> 	if (!frame || !mode)
> 		return -EINVAL;
>@@ -5442,8 +5454,9 @@ drm_hdmi_vendor_infoframe_from_display_mode(struct
>hdmi_vendor_infoframe *frame,
> 	if (!has_hdmi_infoframe)
> 		return -EINVAL;
>
>-	vic = drm_match_hdmi_mode(mode);
>-	s3d_flags = mode->flags & DRM_MODE_FLAG_3D_MASK;
>+	err = hdmi_vendor_infoframe_init(frame);
>+	if (err < 0)
>+		return err;
>
> 	/*
> 	 * Even if it's not absolutely necessary to send the infoframe @@ -5454,15
>+5467,7 @@ drm_hdmi_vendor_infoframe_from_display_mode(struct
>hdmi_vendor_infoframe *frame,
> 	 * mode if the source simply stops sending the infoframe when
> 	 * it wants to switch from 3D to 2D.
> 	 */
>-
>-	if (vic && s3d_flags)
>-		return -EINVAL;
>-
>-	err = hdmi_vendor_infoframe_init(frame);
>-	if (err < 0)
>-		return err;
>-
>-	frame->vic = vic;
>+	frame->vic = drm_mode_hdmi_vic(connector, mode);
> 	frame->s3d_struct = s3d_structure_from_display_mode(mode);
>
> 	return 0;
>--
>2.21.0
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx at lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx


More information about the dri-devel mailing list