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