static u8 drm_mode_cea_vic(const struct drm_connector *connector,
                           const struct drm_display_mode *mode)
 {
-       u8 vic;
-
        /*
         * HDMI spec says if a mode is found in HDMI 1.4b 4K modes
         * we should send its VIC in vendor infoframes, else send the
        if (drm_mode_hdmi_vic(connector, mode))
                return 0;
 
-       vic = drm_match_cea_mode(mode);
+       return drm_match_cea_mode(mode);
+}
 
-       /*
-        * HDMI 1.4 VIC range: 1 <= VIC <= 64 (CEA-861-D) but
-        * HDMI 2.0 VIC range: 1 <= VIC <= 107 (CEA-861-F). So we
-        * have to make sure we dont break HDMI 1.4 sinks.
-        */
+/*
+ * Avoid sending VICs defined in HDMI 2.0 in AVI infoframes to sinks that
+ * conform to HDMI 1.4.
+ *
+ * HDMI 1.4 (CTA-861-D) VIC range: [1..64]
+ * HDMI 2.0 (CTA-861-F) VIC range: [1..107]
+ */
+static u8 vic_for_avi_infoframe(const struct drm_connector *connector, u8 vic)
+{
        if (!is_hdmi2_sink(connector) && vic > 64)
                return 0;
 
                picture_aspect = HDMI_PICTURE_ASPECT_NONE;
        }
 
-       frame->video_code = vic;
+       frame->video_code = vic_for_avi_infoframe(connector, vic);
        frame->picture_aspect = picture_aspect;
        frame->active_aspect = HDMI_ACTIVE_ASPECT_PICTURE;
        frame->scan_mode = HDMI_SCAN_MODE_UNDERSCAN;