Merge tag 'for-5.18/write-streams-2022-03-18' of git://git.kernel.dk/linux-block
[linux-block.git] / drivers / gpu / drm / drm_edid.c
index 561f53831e2915e69a0734d29444c5870cdfe099..cc7bd58369dfef7224c4350dc0b66129c7798fb0 100644 (file)
@@ -4859,7 +4859,8 @@ bool drm_detect_monitor_audio(struct edid *edid)
        if (!edid_ext)
                goto end;
 
-       has_audio = ((edid_ext[3] & EDID_BASIC_AUDIO) != 0);
+       has_audio = (edid_ext[0] == CEA_EXT &&
+                   (edid_ext[3] & EDID_BASIC_AUDIO) != 0);
 
        if (has_audio) {
                DRM_DEBUG_KMS("Monitor has basic audio support\n");
@@ -5187,10 +5188,14 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
 
        /* The existence of a CEA block should imply RGB support */
        info->color_formats = DRM_COLOR_FORMAT_RGB444;
-       if (edid_ext[3] & EDID_CEA_YCRCB444)
-               info->color_formats |= DRM_COLOR_FORMAT_YCBCR444;
-       if (edid_ext[3] & EDID_CEA_YCRCB422)
-               info->color_formats |= DRM_COLOR_FORMAT_YCBCR422;
+
+       /* CTA DisplayID Data Block does not have byte #3 */
+       if (edid_ext[0] == CEA_EXT) {
+               if (edid_ext[3] & EDID_CEA_YCRCB444)
+                       info->color_formats |= DRM_COLOR_FORMAT_YCBCR444;
+               if (edid_ext[3] & EDID_CEA_YCRCB422)
+                       info->color_formats |= DRM_COLOR_FORMAT_YCBCR422;
+       }
 
        if (cea_db_offsets(edid_ext, &start, &end))
                return;