[PATCH 05/27] edid-decode: verify 640x480p60 is defined for CEA-861

Hans Verkuil hverkuil at xs4all.nl
Thu Aug 31 11:40:58 UTC 2017


From: Hans Verkuil <hans.verkuil at cisco.com>

Support for this format is required by the CEA-861 spec.

Signed-off-by: Hans Verkuil <hans.verkuil at cisco.com>
---
 edid-decode.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/edid-decode.c b/edid-decode.c
index e40a33ff..693e29d8 100644
--- a/edid-decode.c
+++ b/edid-decode.c
@@ -65,6 +65,8 @@ static int has_valid_range_descriptor = 1;
 static int has_valid_max_dotclock = 1;
 static int has_valid_string_termination = 1;
 static int has_cea861 = 0;
+static int has_640x480p60_est_timing = 0;
+static int has_cea861_vic_1 = 0;
 static int manufacturer_name_well_formed = 0;
 static int seen_non_detailed_descriptor = 0;
 
@@ -72,6 +74,7 @@ static int warning_excessive_dotclock_correction = 0;
 static int warning_zero_preferred_refresh = 0;
 static int nonconformant_hf_vsdb_position = 0;
 static int nonconformant_srgb_chromaticity = 0;
+static int nonconformant_cea861_640x480 = 0;
 
 static int conformant = 1;
 
@@ -803,6 +806,8 @@ cea_svd(unsigned char *x, int n)
 	    mode = "Unknown mode";
 
 	printf("    VIC %3d %s %s\n", vic, mode, native ? "(native)" : "");
+	if (vic == 1)
+		has_cea861_vic_1 = 1;
     }
 }
 
@@ -1347,6 +1352,7 @@ parse_cea(unsigned char *x)
 
     has_valid_cea_checksum = do_checksum(x, EDID_PAGE_SIZE);
     has_cea861 = 1;
+    nonconformant_cea861_640x480 = !has_cea861_vic_1 && !has_640x480p60_est_timing;
 
     return ret;
 }
@@ -2087,6 +2093,7 @@ int main(int argc, char **argv)
 	       established_timings[i].ratio_w, established_timings[i].ratio_h);
       }
     }
+    has_640x480p60_est_timing = edid[0x23] & 0x20;
 
     printf("Standard timings supported:\n");
     for (i = 0; i < 8; i++) {
@@ -2153,6 +2160,7 @@ int main(int argc, char **argv)
 	if (nonconformant_digital_display ||
 	    nonconformant_hf_vsdb_position ||
 	    nonconformant_srgb_chromaticity ||
+	    nonconformant_cea861_640x480 ||
 	    !has_valid_string_termination ||
 	    !has_valid_descriptor_pad ||
 	    !has_name_descriptor ||
@@ -2167,6 +2175,9 @@ int main(int argc, char **argv)
 	if (nonconformant_digital_display)
 	    printf("\tDigital display field contains garbage: %x\n",
 		   nonconformant_digital_display);
+	if (nonconformant_cea861_640x480)
+	    printf("\tRequired 640x480p60 timings are missing in the established timings\n"
+		   "\tand/or in the SVD list (VIC 1)\n");
 	if (nonconformant_hf_vsdb_position)
 	    printf("\tHDMI Forum VSDB did not immediately follow the HDMI VSDB\n");
 	if (!has_name_descriptor)
-- 
2.14.1



More information about the xorg-devel mailing list