xref: /aosp_15_r20/external/edid-decode/parse-vtb-ext-block.cpp (revision 193032a37cc83cffc1526215991f3c21671f4245)
1*193032a3SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
2*193032a3SAndroid Build Coastguard Worker /*
3*193032a3SAndroid Build Coastguard Worker  * Copyright 2019-2020 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
4*193032a3SAndroid Build Coastguard Worker  *
5*193032a3SAndroid Build Coastguard Worker  * Author: Hans Verkuil <[email protected]>
6*193032a3SAndroid Build Coastguard Worker  */
7*193032a3SAndroid Build Coastguard Worker 
8*193032a3SAndroid Build Coastguard Worker #include "edid-decode.h"
9*193032a3SAndroid Build Coastguard Worker 
parse_vtb_ext_block(const unsigned char * x)10*193032a3SAndroid Build Coastguard Worker void edid_state::parse_vtb_ext_block(const unsigned char *x)
11*193032a3SAndroid Build Coastguard Worker {
12*193032a3SAndroid Build Coastguard Worker 	printf("  Version: %u\n", x[1]);
13*193032a3SAndroid Build Coastguard Worker 	if (x[1] != 1)
14*193032a3SAndroid Build Coastguard Worker 		fail("Invalid version %u.\n", x[1]);
15*193032a3SAndroid Build Coastguard Worker 
16*193032a3SAndroid Build Coastguard Worker 	unsigned num_dtd = x[2];
17*193032a3SAndroid Build Coastguard Worker 	unsigned num_cvt = x[3];
18*193032a3SAndroid Build Coastguard Worker 	unsigned num_st = x[4];
19*193032a3SAndroid Build Coastguard Worker 
20*193032a3SAndroid Build Coastguard Worker 	x += 5;
21*193032a3SAndroid Build Coastguard Worker 	if (num_dtd) {
22*193032a3SAndroid Build Coastguard Worker 		printf("  Detailed Timing Descriptors:\n");
23*193032a3SAndroid Build Coastguard Worker 		for (unsigned i = 0; i < num_dtd; i++, x += 18)
24*193032a3SAndroid Build Coastguard Worker 			detailed_timings("    ", x, false);
25*193032a3SAndroid Build Coastguard Worker 	}
26*193032a3SAndroid Build Coastguard Worker 	if (num_cvt) {
27*193032a3SAndroid Build Coastguard Worker 		printf("  Coordinated Video Timings:\n");
28*193032a3SAndroid Build Coastguard Worker 		for (unsigned i = 0; i < num_cvt; i++, x += 3)
29*193032a3SAndroid Build Coastguard Worker 			detailed_cvt_descriptor("    ", x, false);
30*193032a3SAndroid Build Coastguard Worker 	}
31*193032a3SAndroid Build Coastguard Worker 	if (num_st) {
32*193032a3SAndroid Build Coastguard Worker 		// Note: the VTB-EXT standard has a mistake in the example EDID
33*193032a3SAndroid Build Coastguard Worker 		// that it provides: there the refresh rate (bits 5-0 of the
34*193032a3SAndroid Build Coastguard Worker 		// second byte) is set to 60 for 60 Hz, but this should be 0
35*193032a3SAndroid Build Coastguard Worker 		// since the actual refresh rate is the value + 60.
36*193032a3SAndroid Build Coastguard Worker 		//
37*193032a3SAndroid Build Coastguard Worker 		// The documentation itself is correct, though.
38*193032a3SAndroid Build Coastguard Worker 		printf("  Standard Timings:\n");
39*193032a3SAndroid Build Coastguard Worker 		for (unsigned i = 0; i < num_st; i++, x += 2)
40*193032a3SAndroid Build Coastguard Worker 			print_standard_timing("    ", x[0], x[1], true);
41*193032a3SAndroid Build Coastguard Worker 	}
42*193032a3SAndroid Build Coastguard Worker }
43