summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--edid-decode.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/edid-decode.c b/edid-decode.c
index 815e26a..7aaeace 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);