hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/drm_edid.c
....@@ -5948,8 +5948,6 @@
59485948 static u8 drm_mode_cea_vic(const struct drm_connector *connector,
59495949 const struct drm_display_mode *mode)
59505950 {
5951
- u8 vic;
5952
-
59535951 /*
59545952 * HDMI spec says if a mode is found in HDMI 1.4b 4K modes
59555953 * we should send its VIC in vendor infoframes, else send the
....@@ -5959,13 +5957,18 @@
59595957 if (drm_mode_hdmi_vic(connector, mode))
59605958 return 0;
59615959
5962
- vic = drm_match_cea_mode(mode);
5960
+ return drm_match_cea_mode(mode);
5961
+}
59635962
5964
- /*
5965
- * HDMI 1.4 VIC range: 1 <= VIC <= 64 (CEA-861-D) but
5966
- * HDMI 2.0 VIC range: 1 <= VIC <= 107 (CEA-861-F). So we
5967
- * have to make sure we dont break HDMI 1.4 sinks.
5968
- */
5963
+/*
5964
+ * Avoid sending VICs defined in HDMI 2.0 in AVI infoframes to sinks that
5965
+ * conform to HDMI 1.4.
5966
+ *
5967
+ * HDMI 1.4 (CTA-861-D) VIC range: [1..64]
5968
+ * HDMI 2.0 (CTA-861-F) VIC range: [1..107]
5969
+ */
5970
+static u8 vic_for_avi_infoframe(const struct drm_connector *connector, u8 vic)
5971
+{
59695972 if (!is_hdmi2_sink(connector) && vic > 64)
59705973 return 0;
59715974
....@@ -6041,7 +6044,7 @@
60416044 picture_aspect = HDMI_PICTURE_ASPECT_NONE;
60426045 }
60436046
6044
- frame->video_code = vic;
6047
+ frame->video_code = vic_for_avi_infoframe(connector, vic);
60456048 frame->picture_aspect = picture_aspect;
60466049 frame->active_aspect = HDMI_ACTIVE_ASPECT_PICTURE;
60476050 frame->scan_mode = HDMI_SCAN_MODE_UNDERSCAN;