[PATCH 24/27] edid-decode: check Max TMDS Rates
Hans Verkuil
hverkuil at xs4all.nl
Thu Aug 31 11:41:17 UTC 2017
From: Hans Verkuil <hans.verkuil at cisco.com>
The max TMDS rate in the HDMI VSDB is 340 MHz and the max TMDS
rate in the HDMI Forum VSDB is 0 or in the range 341-600 MHz.
Check for this.
Signed-off-by: Hans Verkuil <hans.verkuil at cisco.com>
---
edid-decode.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/edid-decode.c b/edid-decode.c
index 5a5fb5bd..f106ce5e 100644
--- a/edid-decode.c
+++ b/edid-decode.c
@@ -77,6 +77,8 @@ 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 nonconformant_hdmi_vsdb_tmds_rate = 0;
+static int nonconformant_hf_vsdb_tmds_rate = 0;
static int min_hor_freq_hz = 0xfffffff;
static int max_hor_freq_hz = 0;
@@ -1171,8 +1173,11 @@ cea_hdmi_block(unsigned char *x)
printf(" DVI_Dual\n");
}
- if (length > 6)
+ if (length > 6) {
printf(" Maximum TMDS clock: %dMHz\n", x[7] * 5);
+ if (x[7] * 5 > 340)
+ nonconformant_hdmi_vsdb_tmds_rate = 1;
+ }
/* XXX the walk here is really ugly, and needs to be length-checked */
if (length > 7) {
@@ -1328,8 +1333,13 @@ cea_hf_block(unsigned char *x)
{
printf(" (HDMI Forum)\n");
printf(" Version: %u\n", x[4]);
- if (x[5])
- printf(" Maximum TMDS Character Rate: %uMHz\n", x[5] * 5);
+ if (x[5]) {
+ unsigned rate = x[5] * 5;
+
+ printf(" Maximum TMDS Character Rate: %uMHz\n", rate);
+ if ((rate && rate <= 340) || rate > 600)
+ nonconformant_hf_vsdb_tmds_rate = 1;
+ }
if (x[6] & 0x80)
printf(" SCDC Present\n");
if (x[6] & 0x40)
@@ -2404,6 +2414,8 @@ int main(int argc, char **argv)
if (claims_one_point_three) {
if (nonconformant_digital_display ||
nonconformant_hf_vsdb_position ||
+ nonconformant_hdmi_vsdb_tmds_rate ||
+ nonconformant_hf_vsdb_tmds_rate ||
nonconformant_srgb_chromaticity ||
nonconformant_cea861_640x480 ||
!has_valid_string_termination ||
@@ -2425,6 +2437,10 @@ int main(int argc, char **argv)
"\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 (nonconformant_hdmi_vsdb_tmds_rate)
+ printf("\tHDMI VSDB Max TMDS rate is > 340\n");
+ if (nonconformant_hf_vsdb_tmds_rate)
+ printf("\tHDMI Forum VSDB Max TMDS rate is > 0 and <= 340 or > 600\n");
if (!has_name_descriptor)
printf("\tMissing name descriptor\n");
else if (!name_descriptor_terminated)
--
2.14.1
More information about the xorg-devel
mailing list