From: Hans Verkuil <hans.verk...@cisco.com>

Show correct EDID version in a string. Also turn the monitor range
check into a warning for EDID 1.4 (an 1.4 Errata says that explicitly
mentioned timings supersede the monitor range definition).

Signed-off-by: Hans Verkuil <hans.verk...@cisco.com>
---
 edid-decode.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/edid-decode.c b/edid-decode.c
index 815e26ab..7aaeacee 100644
--- a/edid-decode.c
+++ b/edid-decode.c
@@ -40,6 +40,7 @@ enum {
     EDID_PAGE_SIZE = 128u
 };
 
+static int edid_minor = 0;
 static int claims_one_point_oh = 0;
 static int claims_one_point_two = 0;
 static int claims_one_point_three = 0;
@@ -2359,6 +2360,7 @@ int main(int argc, char **argv)
            printf("Claims > 1.4, assuming 1.4 conformance\n");
            edid[0x13] = 4;
        }
+       edid_minor = edid[0x13];
        switch (edid[0x13]) {
        case 4:
            claims_one_point_four = 1;
@@ -2611,10 +2613,10 @@ int main(int argc, char **argv)
            !has_name_descriptor ||
            !name_descriptor_terminated ||
            !has_preferred_timing ||
-           !has_range_descriptor)
+           (!claims_one_point_four && !has_range_descriptor))
            conformant = 0;
        if (!conformant)
-           printf("EDID block does NOT conform to EDID 1.3!\n");
+           printf("EDID block does NOT conform to EDID 1.%d!\n", edid_minor);
        if (nonconformant_srgb_chromaticity)
            printf("\tsRGB is signaled, but the chromaticities do not match\n");
        if (nonconformant_digital_display)
@@ -2667,7 +2669,14 @@ int main(int argc, char **argv)
         min_hor_freq_hz < mon_min_hor_freq_hz ||
         max_hor_freq_hz > mon_max_hor_freq_hz ||
         max_pixclk_khz > mon_max_pixclk_khz)) {
-           conformant = 0;
+           /*
+            * EDID 1.4 states (in an Errata) that explicitly defined
+            * timings supersede the monitor range definition.
+            */
+           if (!claims_one_point_four)
+                   conformant = 0;
+           else
+                   printf("Warning: ");
            printf("One or more of the timings is out of range of the Monitor 
Ranges:\n");
            printf("  Vertical Freq: %d - %d Hz\n", min_vert_freq_hz, 
max_vert_freq_hz);
            printf("  Horizontal Freq: %d - %d Hz\n", min_hor_freq_hz, 
max_hor_freq_hz);
-- 
2.14.1

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to