diff mbox series

[10/11] edid-decode: add warnings to VESA VSDB

Message ID 20210914121129.51451-11-joevt@shaw.ca
State New
Headers show
Series [01/11] edid-decode: add more example EDIDs | expand

Commit Message

Joe van Tunen Sept. 14, 2021, 12:11 p.m. UTC
Add warnings for VESA vendor specific datablock (bits that should be zero and reserved values).

Signed-off-by: Joe van Tunen <joevt@shaw.ca>
---
 parse-displayid-block.cpp | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)
diff mbox series

Patch

diff --git a/parse-displayid-block.cpp b/parse-displayid-block.cpp
index 8f4e366..5c81294 100644
--- a/parse-displayid-block.cpp
+++ b/parse-displayid-block.cpp
@@ -1461,22 +1461,37 @@  void edid_state::parse_displayid_vesa(const unsigned char *x)
 	unsigned len = x[2];
 	x += 6;
 	printf("    Data Structure Type: ");
-	switch (x[0] & 0x07) {
-	case 0x00: printf("eDP\n"); break;
-	case 0x01: printf("DP\n"); break;
-	default: printf("Reserved\n"); break;
+	switch (x[0] & 7) {
+	case 0: printf("eDP\n"); break;
+	case 1: printf("DP\n"); break;
+	default: printf("Reserved (%d)\n", x[0] & 7); break;
 	}
+
+	if ((x[0] >> 3) & 15)
+		warn("Reserved bits 6:3 (%d) are not 0.\n", (x[0] >> 3) & 15);
+
 	printf("    Default Colorspace and EOTF Handling: %s\n",
 	       (x[0] & 0x80) ? "Native as specified in the Display Parameters DB" : "sRGB");
+
 	printf("    Number of Pixels in Hor Pix Cnt Overlapping an Adjacent Panel: %u\n",
 	       x[1] & 0xf);
+	if ((x[1] & 0xf) > 8)
+		warn("Number of Pixels in Hor Pix Cnt Overlapping an Adjacent Panel exceeds 8.\n");
+
+	if ((x[1] >> 4) & 1)
+		warn("Reserved bit 4 is not 0.\n");
+
 	printf("    Multi-SST Operation: ");
-	switch ((x[1] >> 5) & 0x03) {
-	case 0x00: printf("Not Supported\n"); break;
-	case 0x01: printf("Two Streams (number of links shall be 2 or 4)\n"); break;
-	case 0x02: printf("Four Streams (number of links shall be 4)\n"); break;
-	case 0x03: printf("Reserved\n"); break;
+	switch ((x[1] >> 5) & 3) {
+	case 0: printf("Not Supported\n"); break;
+	case 1: printf("Two Streams (number of links shall be 2 or 4)\n"); break;
+	case 2: printf("Four Streams (number of links shall be 4)\n"); break;
+	case 3: printf("Reserved\n"); warn("Invalid option for Multi-SST Operation.\n"); break;
 	}
+
+	if ((x[1] >> 7) & 1)
+		warn("Reserved bit 7 is not 0.\n");
+
 	if (len >= 7) {
 		double bpp = (x[2] & 0x3f) + (x[3] & 0x0f) / 16.0;
 		printf("    Pass through timing's target DSC bits per pixel: %.4f\n", bpp);