1 // Copyright 2018 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "lib/edid/timings.h"
6 
7 namespace edid {
8 namespace internal {
9 
10 #define TIMING_PARAMS(pf, ha, hf, hs, hb, va, vf, vs, vb, hp, vp, i, avb, dclk, vr) \
11     { \
12         .pixel_freq_10khz = pf, \
13         .horizontal_addressable = ha, \
14         .horizontal_front_porch = hf, \
15         .horizontal_sync_pulse = hs, \
16         .horizontal_blanking = hb, \
17         .vertical_addressable = va, \
18         .vertical_front_porch = vf, \
19         .vertical_sync_pulse = vs, \
20         .vertical_blanking = vb, \
21         .flags = (hp ? timing_params::kPositiveHsync : 0) \
22                 | (vp ? timing_params::kPositiveVsync : 0) \
23                 | (i ? timing_params::kInterlaced : 0) \
24                 | (avb ? timing_params::kAlternatingVblank : 0) \
25                 | (dclk ? timing_params::kDoubleClocked : 0), \
26         .vertical_refresh_e2 = vr, \
27     }
28 
29 // Timings taken from DMT v1.11
30 // TODO: Handle reduced blanking
31 const timing_params_t dmt_timings_arr[] = {
32     TIMING_PARAMS(3150, 640, 32, 64, 192, 350, 32, 3, 95, 1, 0, 0, 0, 0, 8508), /* 01h */
33     TIMING_PARAMS(3150, 640, 32, 64, 192, 400, 1, 3, 45, 0, 1, 0, 0, 0, 8508), /* 02h */
34     TIMING_PARAMS(3550, 720, 36, 72, 216, 400, 1, 3, 46, 0, 1, 0, 0, 0, 8504), /* 03h */
35     TIMING_PARAMS(3550, 720, 36, 72, 216, 400, 1, 3, 46, 0, 1, 0, 0, 0, 8504), /* 03h */
36     TIMING_PARAMS(2518, 640, 8, 96, 144, 480, 2, 2, 29, 0, 0, 0, 0, 0, 5994), /* 04h */
37     TIMING_PARAMS(2518, 640, 8, 96, 144, 480, 2, 2, 29, 0, 0, 0, 0, 0, 5994), /* 04h */
38     TIMING_PARAMS(3150, 640, 16, 40, 176, 480, 1, 3, 24, 0, 0, 0, 0, 0, 7281), /* 05h */
39     TIMING_PARAMS(3150, 640, 16, 40, 176, 480, 1, 3, 24, 0, 0, 0, 0, 0, 7281), /* 05h */
40     TIMING_PARAMS(3150, 640, 16, 64, 200, 480, 1, 3, 20, 0, 0, 0, 0, 0, 7500), /* 06h */
41     TIMING_PARAMS(3150, 640, 16, 64, 200, 480, 1, 3, 20, 0, 0, 0, 0, 0, 7500), /* 06h */
42     TIMING_PARAMS(3600, 640, 56, 56, 192, 480, 1, 3, 29, 0, 0, 0, 0, 0, 8501), /* 07h */
43     TIMING_PARAMS(3600, 640, 56, 56, 192, 480, 1, 3, 29, 0, 0, 0, 0, 0, 8501), /* 07h */
44     TIMING_PARAMS(3600, 800, 24, 72, 224, 600, 1, 2, 25, 1, 1, 0, 0, 0, 5625), /* 08h */
45     TIMING_PARAMS(3600, 800, 24, 72, 224, 600, 1, 2, 25, 1, 1, 0, 0, 0, 5625), /* 08h */
46     TIMING_PARAMS(4000, 800, 40, 128, 256, 600, 1, 4, 28, 1, 1, 0, 0, 0, 6032), /* 09h */
47     TIMING_PARAMS(4000, 800, 40, 128, 256, 600, 1, 4, 28, 1, 1, 0, 0, 0, 6032), /* 09h */
48     TIMING_PARAMS(5000, 800, 56, 120, 240, 600, 37, 6, 66, 1, 1, 0, 0, 0, 7219), /* 0Ah */
49     TIMING_PARAMS(5000, 800, 56, 120, 240, 600, 37, 6, 66, 1, 1, 0, 0, 0, 7219), /* 0Ah */
50     TIMING_PARAMS(4950, 800, 16, 80, 256, 600, 1, 3, 25, 1, 1, 0, 0, 0, 7500), /* 0Bh */
51     TIMING_PARAMS(4950, 800, 16, 80, 256, 600, 1, 3, 25, 1, 1, 0, 0, 0, 7500), /* 0Bh */
52     TIMING_PARAMS(5625, 800, 32, 64, 248, 600, 1, 3, 31, 1, 1, 0, 0, 0, 8506), /* 0Ch */
53     TIMING_PARAMS(5625, 800, 32, 64, 248, 600, 1, 3, 31, 1, 1, 0, 0, 0, 8506), /* 0Ch */
54     TIMING_PARAMS(7325, 800, 48, 32, 160, 600, 3, 4, 36, 1, 0, 0, 0, 0, 11997), /* 0Dh */
55     TIMING_PARAMS(7325, 800, 48, 32, 160, 600, 3, 4, 36, 1, 0, 0, 0, 0, 11997), /* 0Dh */
56     TIMING_PARAMS(3375, 848, 16, 112, 240, 480, 6, 8, 37, 1, 1, 0, 0, 0, 6000), /* 0Eh */
57     TIMING_PARAMS(3375, 848, 16, 112, 240, 480, 6, 8, 37, 1, 1, 0, 0, 0, 6000), /* 0Eh */
58     TIMING_PARAMS(4490, 1024, 8, 176, 240, 768, 0, 4, 24, 1, 1, 1, 0, 0, 8696), /* 0Fh */
59     TIMING_PARAMS(4490, 1024, 8, 176, 240, 768, 0, 4, 24, 1, 1, 1, 0, 0, 8696), /* 0Fh */
60     TIMING_PARAMS(6500, 1024, 24, 136, 320, 768, 3, 6, 38, 0, 0, 0, 0, 0, 6000), /* 10h */
61     TIMING_PARAMS(6500, 1024, 24, 136, 320, 768, 3, 6, 38, 0, 0, 0, 0, 0, 6000), /* 10h */
62     TIMING_PARAMS(7500, 1024, 24, 136, 304, 768, 3, 6, 38, 0, 0, 0, 0, 0, 7006), /* 11h */
63     TIMING_PARAMS(7500, 1024, 24, 136, 304, 768, 3, 6, 38, 0, 0, 0, 0, 0, 7006), /* 11h */
64     TIMING_PARAMS(7875, 1024, 16, 96, 288, 768, 1, 3, 32, 1, 1, 0, 0, 0, 7503), /* 12h */
65     TIMING_PARAMS(7875, 1024, 16, 96, 288, 768, 1, 3, 32, 1, 1, 0, 0, 0, 7503), /* 12h */
66     TIMING_PARAMS(9450, 1024, 48, 96, 352, 768, 1, 3, 40, 1, 1, 0, 0, 0, 8500), /* 13h */
67     TIMING_PARAMS(9450, 1024, 48, 96, 352, 768, 1, 3, 40, 1, 1, 0, 0, 0, 8500), /* 13h */
68     TIMING_PARAMS(11550, 1024, 48, 32, 160, 768, 3, 4, 45, 1, 0, 0, 0, 0, 11999), /* 14h */
69     TIMING_PARAMS(11550, 1024, 48, 32, 160, 768, 3, 4, 45, 1, 0, 0, 0, 0, 11999), /* 14h */
70     TIMING_PARAMS(10800, 1152, 64, 128, 448, 864, 1, 3, 36, 1, 1, 0, 0, 0, 7500), /* 15h */
71     TIMING_PARAMS(10800, 1152, 64, 128, 448, 864, 1, 3, 36, 1, 1, 0, 0, 0, 7500), /* 15h */
72     TIMING_PARAMS(6825, 1280, 48, 32, 160, 768, 3, 7, 22, 1, 0, 0, 0, 0, 5999), /* 16h */
73     TIMING_PARAMS(6825, 1280, 48, 32, 160, 768, 3, 7, 22, 1, 0, 0, 0, 0, 5999), /* 16h */
74     TIMING_PARAMS(7950, 1280, 64, 128, 384, 768, 3, 7, 30, 0, 1, 0, 0, 0, 5987), /* 17h */
75     TIMING_PARAMS(7950, 1280, 64, 128, 384, 768, 3, 7, 30, 0, 1, 0, 0, 0, 5987), /* 17h */
76     TIMING_PARAMS(10225, 1280, 80, 128, 416, 768, 3, 7, 37, 0, 1, 0, 0, 0, 7489), /* 18h */
77     TIMING_PARAMS(10225, 1280, 80, 128, 416, 768, 3, 7, 37, 0, 1, 0, 0, 0, 7489), /* 18h */
78     TIMING_PARAMS(11750, 1280, 80, 136, 432, 768, 3, 7, 41, 0, 1, 0, 0, 0, 8484), /* 19h */
79     TIMING_PARAMS(11750, 1280, 80, 136, 432, 768, 3, 7, 41, 0, 1, 0, 0, 0, 8484), /* 19h */
80     TIMING_PARAMS(14025, 1280, 48, 32, 160, 768, 3, 7, 45, 1, 0, 0, 0, 0, 11980), /* 1Ah */
81     TIMING_PARAMS(14025, 1280, 48, 32, 160, 768, 3, 7, 45, 1, 0, 0, 0, 0, 11980), /* 1Ah */
82     TIMING_PARAMS(7100, 1280, 48, 32, 160, 800, 3, 6, 23, 1, 0, 0, 0, 0, 5991), /* 1Bh */
83     TIMING_PARAMS(7100, 1280, 48, 32, 160, 800, 3, 6, 23, 1, 0, 0, 0, 0, 5991), /* 1Bh */
84     TIMING_PARAMS(8350, 1280, 72, 128, 400, 800, 3, 6, 31, 0, 1, 0, 0, 0, 5981), /* 1Ch */
85     TIMING_PARAMS(8350, 1280, 72, 128, 400, 800, 3, 6, 31, 0, 1, 0, 0, 0, 5981), /* 1Ch */
86     TIMING_PARAMS(10650, 1280, 80, 128, 416, 800, 3, 6, 38, 0, 1, 0, 0, 0, 7493), /* 1Dh */
87     TIMING_PARAMS(10650, 1280, 80, 128, 416, 800, 3, 6, 38, 0, 1, 0, 0, 0, 7493), /* 1Dh */
88     TIMING_PARAMS(12250, 1280, 80, 136, 432, 800, 3, 6, 43, 0, 1, 0, 0, 0, 8488), /* 1Eh */
89     TIMING_PARAMS(12250, 1280, 80, 136, 432, 800, 3, 6, 43, 0, 1, 0, 0, 0, 8488), /* 1Eh */
90     TIMING_PARAMS(14625, 1280, 48, 32, 160, 800, 3, 6, 47, 1, 0, 0, 0, 0, 11991), /* 1Fh */
91     TIMING_PARAMS(14625, 1280, 48, 32, 160, 800, 3, 6, 47, 1, 0, 0, 0, 0, 11991), /* 1Fh */
92     TIMING_PARAMS(10800, 1280, 96, 112, 520, 960, 1, 3, 40, 1, 1, 0, 0, 0, 6000), /* 20h */
93     TIMING_PARAMS(10800, 1280, 96, 112, 520, 960, 1, 3, 40, 1, 1, 0, 0, 0, 6000), /* 20h */
94     TIMING_PARAMS(14850, 1280, 64, 160, 448, 960, 1, 3, 51, 1, 1, 0, 0, 0, 8500), /* 21h */
95     TIMING_PARAMS(14850, 1280, 64, 160, 448, 960, 1, 3, 51, 1, 1, 0, 0, 0, 8500), /* 21h */
96     TIMING_PARAMS(17550, 1280, 48, 32, 160, 960, 3, 4, 57, 1, 0, 0, 0, 0, 11984), /* 22h */
97     TIMING_PARAMS(17550, 1280, 48, 32, 160, 960, 3, 4, 57, 1, 0, 0, 0, 0, 11984), /* 22h */
98     TIMING_PARAMS(10800, 1280, 48, 112, 408, 1024, 1, 3, 42, 1, 1, 0, 0, 0, 6002), /* 23h */
99     TIMING_PARAMS(10800, 1280, 48, 112, 408, 1024, 1, 3, 42, 1, 1, 0, 0, 0, 6002), /* 23h */
100     TIMING_PARAMS(13500, 1280, 16, 144, 408, 1024, 1, 3, 42, 1, 1, 0, 0, 0, 7503), /* 24h */
101     TIMING_PARAMS(13500, 1280, 16, 144, 408, 1024, 1, 3, 42, 1, 1, 0, 0, 0, 7503), /* 24h */
102     TIMING_PARAMS(15750, 1280, 64, 160, 448, 1024, 1, 3, 48, 1, 1, 0, 0, 0, 8502), /* 25h */
103     TIMING_PARAMS(15750, 1280, 64, 160, 448, 1024, 1, 3, 48, 1, 1, 0, 0, 0, 8502), /* 25h */
104     TIMING_PARAMS(18725, 1280, 48, 32, 160, 1024, 3, 7, 60, 1, 0, 0, 0, 0, 11996), /* 26h */
105     TIMING_PARAMS(18725, 1280, 48, 32, 160, 1024, 3, 7, 60, 1, 0, 0, 0, 0, 11996), /* 26h */
106     TIMING_PARAMS(8550, 1360, 64, 112, 432, 768, 3, 6, 27, 1, 1, 0, 0, 0, 6002), /* 27h */
107     TIMING_PARAMS(8550, 1360, 64, 112, 432, 768, 3, 6, 27, 1, 1, 0, 0, 0, 6002), /* 27h */
108     TIMING_PARAMS(14825, 1360, 48, 32, 160, 768, 3, 5, 45, 1, 0, 0, 0, 0, 11997), /* 28h */
109     TIMING_PARAMS(14825, 1360, 48, 32, 160, 768, 3, 5, 45, 1, 0, 0, 0, 0, 11997), /* 28h */
110     TIMING_PARAMS(10100, 1400, 48, 32, 160, 1050, 3, 4, 30, 1, 0, 0, 0, 0, 5995), /* 29h */
111     TIMING_PARAMS(10100, 1400, 48, 32, 160, 1050, 3, 4, 30, 1, 0, 0, 0, 0, 5995), /* 29h */
112     TIMING_PARAMS(12175, 1400, 88, 144, 464, 1050, 3, 4, 39, 0, 1, 0, 0, 0, 5998), /* 2Ah */
113     TIMING_PARAMS(12175, 1400, 88, 144, 464, 1050, 3, 4, 39, 0, 1, 0, 0, 0, 5998), /* 2Ah */
114     TIMING_PARAMS(15600, 1400, 104, 144, 496, 1050, 3, 4, 49, 0, 1, 0, 0, 0, 7487), /* 2Bh */
115     TIMING_PARAMS(15600, 1400, 104, 144, 496, 1050, 3, 4, 49, 0, 1, 0, 0, 0, 7487), /* 2Bh */
116     TIMING_PARAMS(17950, 1400, 104, 152, 512, 1050, 3, 4, 55, 0, 1, 0, 0, 0, 8496), /* 2Ch */
117     TIMING_PARAMS(17950, 1400, 104, 152, 512, 1050, 3, 4, 55, 0, 1, 0, 0, 0, 8496), /* 2Ch */
118     TIMING_PARAMS(20800, 1400, 48, 32, 160, 1050, 3, 4, 62, 1, 0, 0, 0, 0, 11990), /* 2Dh */
119     TIMING_PARAMS(20800, 1400, 48, 32, 160, 1050, 3, 4, 62, 1, 0, 0, 0, 0, 11990), /* 2Dh */
120     TIMING_PARAMS(8875, 1440, 48, 32, 160, 900, 3, 6, 26, 1, 0, 0, 0, 0, 5990), /* 2Eh */
121     TIMING_PARAMS(8875, 1440, 48, 32, 160, 900, 3, 6, 26, 1, 0, 0, 0, 0, 5990), /* 2Eh */
122     TIMING_PARAMS(10650, 1440, 80, 152, 464, 900, 3, 6, 34, 0, 1, 0, 0, 0, 5989), /* 2Fh */
123     TIMING_PARAMS(10650, 1440, 80, 152, 464, 900, 3, 6, 34, 0, 1, 0, 0, 0, 5989), /* 2Fh */
124     TIMING_PARAMS(13675, 1440, 96, 152, 496, 900, 3, 6, 42, 0, 1, 0, 0, 0, 7498), /* 30h */
125     TIMING_PARAMS(13675, 1440, 96, 152, 496, 900, 3, 6, 42, 0, 1, 0, 0, 0, 7498), /* 30h */
126     TIMING_PARAMS(15700, 1440, 104, 152, 512, 900, 3, 6, 48, 0, 1, 0, 0, 0, 8484), /* 31h */
127     TIMING_PARAMS(15700, 1440, 104, 152, 512, 900, 3, 6, 48, 0, 1, 0, 0, 0, 8484), /* 31h */
128     TIMING_PARAMS(18275, 1440, 48, 32, 160, 900, 3, 6, 53, 1, 0, 0, 0, 0, 11985), /* 32h */
129     TIMING_PARAMS(18275, 1440, 48, 32, 160, 900, 3, 6, 53, 1, 0, 0, 0, 0, 11985), /* 32h */
130     TIMING_PARAMS(16200, 1600, 64, 192, 560, 1200, 1, 3, 50, 1, 1, 0, 0, 0, 6000), /* 33h */
131     TIMING_PARAMS(16200, 1600, 64, 192, 560, 1200, 1, 3, 50, 1, 1, 0, 0, 0, 6000), /* 33h */
132     TIMING_PARAMS(17550, 1600, 64, 192, 560, 1200, 1, 3, 50, 1, 1, 0, 0, 0, 6500), /* 34h */
133     TIMING_PARAMS(17550, 1600, 64, 192, 560, 1200, 1, 3, 50, 1, 1, 0, 0, 0, 6500), /* 34h */
134     TIMING_PARAMS(18900, 1600, 64, 192, 560, 1200, 1, 3, 50, 1, 1, 0, 0, 0, 7000), /* 35h */
135     TIMING_PARAMS(18900, 1600, 64, 192, 560, 1200, 1, 3, 50, 1, 1, 0, 0, 0, 7000), /* 35h */
136     TIMING_PARAMS(20250, 1600, 64, 192, 560, 1200, 1, 3, 50, 1, 1, 0, 0, 0, 7500), /* 36h */
137     TIMING_PARAMS(20250, 1600, 64, 192, 560, 1200, 1, 3, 50, 1, 1, 0, 0, 0, 7500), /* 36h */
138     TIMING_PARAMS(22950, 1600, 64, 192, 560, 1200, 1, 3, 50, 1, 1, 0, 0, 0, 8500), /* 37h */
139     TIMING_PARAMS(22950, 1600, 64, 192, 560, 1200, 1, 3, 50, 1, 1, 0, 0, 0, 8500), /* 37h */
140     TIMING_PARAMS(26825, 1600, 48, 32, 160, 1200, 3, 4, 71, 1, 0, 0, 0, 0, 11992), /* 38h */
141     TIMING_PARAMS(26825, 1600, 48, 32, 160, 1200, 3, 4, 71, 1, 0, 0, 0, 0, 11992), /* 38h */
142     TIMING_PARAMS(11900, 1680, 48, 32, 160, 1050, 3, 6, 30, 1, 0, 0, 0, 0, 5988), /* 39h */
143     TIMING_PARAMS(11900, 1680, 48, 32, 160, 1050, 3, 6, 30, 1, 0, 0, 0, 0, 5988), /* 39h */
144     TIMING_PARAMS(14625, 1680, 104, 176, 560, 1050, 3, 6, 39, 0, 1, 0, 0, 0, 5995), /* 3Ah */
145     TIMING_PARAMS(14625, 1680, 104, 176, 560, 1050, 3, 6, 39, 0, 1, 0, 0, 0, 5995), /* 3Ah */
146     TIMING_PARAMS(18700, 1680, 120, 176, 592, 1050, 3, 6, 49, 0, 1, 0, 0, 0, 7489), /* 3Bh */
147     TIMING_PARAMS(18700, 1680, 120, 176, 592, 1050, 3, 6, 49, 0, 1, 0, 0, 0, 7489), /* 3Bh */
148     TIMING_PARAMS(21475, 1680, 128, 176, 608, 1050, 3, 6, 55, 0, 1, 0, 0, 0, 8494), /* 3Ch */
149     TIMING_PARAMS(21475, 1680, 128, 176, 608, 1050, 3, 6, 55, 0, 1, 0, 0, 0, 8494), /* 3Ch */
150     TIMING_PARAMS(24550, 1680, 48, 32, 160, 1050, 3, 6, 62, 1, 0, 0, 0, 0, 11999), /* 3Dh */
151     TIMING_PARAMS(24550, 1680, 48, 32, 160, 1050, 3, 6, 62, 1, 0, 0, 0, 0, 11999), /* 3Dh */
152     TIMING_PARAMS(20475, 1792, 128, 200, 656, 1344, 1, 3, 50, 0, 1, 0, 0, 0, 6000), /* 3Eh */
153     TIMING_PARAMS(20475, 1792, 128, 200, 656, 1344, 1, 3, 50, 0, 1, 0, 0, 0, 6000), /* 3Eh */
154     TIMING_PARAMS(26100, 1792, 96, 216, 664, 1344, 1, 3, 73, 0, 1, 0, 0, 0, 7500), /* 3Fh */
155     TIMING_PARAMS(26100, 1792, 96, 216, 664, 1344, 1, 3, 73, 0, 1, 0, 0, 0, 7500), /* 3Fh */
156     TIMING_PARAMS(33325, 1792, 48, 32, 160, 1344, 3, 4, 79, 1, 0, 0, 0, 0, 11997), /* 40h */
157     TIMING_PARAMS(33325, 1792, 48, 32, 160, 1344, 3, 4, 79, 1, 0, 0, 0, 0, 11997), /* 40h */
158     TIMING_PARAMS(21825, 1856, 96, 224, 672, 1392, 1, 3, 47, 0, 1, 0, 0, 0, 5999), /* 41h */
159     TIMING_PARAMS(21825, 1856, 96, 224, 672, 1392, 1, 3, 47, 0, 1, 0, 0, 0, 5999), /* 41h */
160     TIMING_PARAMS(28800, 1856, 128, 224, 704, 1392, 1, 3, 108, 0, 1, 0, 0, 0, 7500), /* 42h */
161     TIMING_PARAMS(28800, 1856, 128, 224, 704, 1392, 1, 3, 108, 0, 1, 0, 0, 0, 7500), /* 42h */
162     TIMING_PARAMS(35650, 1856, 48, 32, 160, 1392, 3, 4, 82, 1, 0, 0, 0, 0, 11997), /* 43h */
163     TIMING_PARAMS(35650, 1856, 48, 32, 160, 1392, 3, 4, 82, 1, 0, 0, 0, 0, 11997), /* 43h */
164     TIMING_PARAMS(15400, 1920, 48, 32, 160, 1200, 3, 6, 35, 1, 0, 0, 0, 0, 5995), /* 44h */
165     TIMING_PARAMS(15400, 1920, 48, 32, 160, 1200, 3, 6, 35, 1, 0, 0, 0, 0, 5995), /* 44h */
166     TIMING_PARAMS(19325, 1920, 136, 200, 672, 1200, 3, 6, 45, 0, 1, 0, 0, 0, 5988), /* 45h */
167     TIMING_PARAMS(19325, 1920, 136, 200, 672, 1200, 3, 6, 45, 0, 1, 0, 0, 0, 5988), /* 45h */
168     TIMING_PARAMS(24525, 1920, 136, 208, 688, 1200, 3, 6, 55, 0, 1, 0, 0, 0, 7493), /* 46h */
169     TIMING_PARAMS(24525, 1920, 136, 208, 688, 1200, 3, 6, 55, 0, 1, 0, 0, 0, 7493), /* 46h */
170     TIMING_PARAMS(28125, 1920, 144, 208, 704, 1200, 3, 6, 62, 0, 1, 0, 0, 0, 8493), /* 47h */
171     TIMING_PARAMS(28125, 1920, 144, 208, 704, 1200, 3, 6, 62, 0, 1, 0, 0, 0, 8493), /* 47h */
172     TIMING_PARAMS(31700, 1920, 48, 32, 160, 1200, 3, 6, 71, 1, 0, 0, 0, 0, 11991), /* 48h */
173     TIMING_PARAMS(31700, 1920, 48, 32, 160, 1200, 3, 6, 71, 1, 0, 0, 0, 0, 11991), /* 48h */
174     TIMING_PARAMS(23400, 1920, 128, 208, 680, 1440, 1, 3, 60, 0, 1, 0, 0, 0, 6000), /* 49h */
175     TIMING_PARAMS(23400, 1920, 128, 208, 680, 1440, 1, 3, 60, 0, 1, 0, 0, 0, 6000), /* 49h */
176     TIMING_PARAMS(29700, 1920, 144, 224, 720, 1440, 1, 3, 60, 0, 1, 0, 0, 0, 7500), /* 4Ah */
177     TIMING_PARAMS(29700, 1920, 144, 224, 720, 1440, 1, 3, 60, 0, 1, 0, 0, 0, 7500), /* 4Ah */
178     TIMING_PARAMS(38050, 1920, 48, 32, 160, 1440, 3, 4, 85, 1, 0, 0, 0, 0, 11996), /* 4Bh */
179     TIMING_PARAMS(38050, 1920, 48, 32, 160, 1440, 3, 4, 85, 1, 0, 0, 0, 0, 11996), /* 4Bh */
180     TIMING_PARAMS(26850, 2560, 48, 32, 160, 1600, 3, 6, 46, 1, 0, 0, 0, 0, 5997), /* 4Ch */
181     TIMING_PARAMS(26850, 2560, 48, 32, 160, 1600, 3, 6, 46, 1, 0, 0, 0, 0, 5997), /* 4Ch */
182     TIMING_PARAMS(34850, 2560, 192, 280, 944, 1600, 3, 6, 58, 0, 1, 0, 0, 0, 5999), /* 4Dh */
183     TIMING_PARAMS(34850, 2560, 192, 280, 944, 1600, 3, 6, 58, 0, 1, 0, 0, 0, 5999), /* 4Dh */
184     TIMING_PARAMS(44325, 2560, 208, 280, 976, 1600, 3, 6, 72, 0, 1, 0, 0, 0, 7497), /* 4Eh */
185     TIMING_PARAMS(44325, 2560, 208, 280, 976, 1600, 3, 6, 72, 0, 1, 0, 0, 0, 7497), /* 4Eh */
186     TIMING_PARAMS(50525, 2560, 208, 280, 976, 1600, 3, 6, 82, 0, 1, 0, 0, 0, 8495), /* 4Fh */
187     TIMING_PARAMS(50525, 2560, 208, 280, 976, 1600, 3, 6, 82, 0, 1, 0, 0, 0, 8495), /* 4Fh */
188     TIMING_PARAMS(55275, 2560, 48, 32, 160, 1600, 3, 6, 94, 1, 0, 0, 0, 0, 11996), /* 50h */
189     TIMING_PARAMS(55275, 2560, 48, 32, 160, 1600, 3, 6, 94, 1, 0, 0, 0, 0, 11996), /* 50h */
190 };
191 
192 const timing_params_t* dmt_timings = dmt_timings_arr;
193 const uint32_t dmt_timings_count = sizeof(dmt_timings_arr) / sizeof(dmt_timings_arr[0]);
194 
195 // Timings taken from ANSI/CTA-861-F
196 const timing_params_t cea_timings_arr[] = {
197     TIMING_PARAMS(2518, 640, 16, 96, 160, 480, 10, 2, 45, 0, 0, 0, 0, 0, 5994), /* 1 */
198     TIMING_PARAMS(2700, 720, 16, 62, 138, 480, 9, 6, 45, 0, 0, 0, 0, 0, 5994), /* 2 */
199     TIMING_PARAMS(2700, 720, 16, 62, 138, 480, 9, 6, 45, 0, 0, 0, 0, 0, 5994), /* 3 */
200     TIMING_PARAMS(7425, 1280, 110, 40, 370, 720, 5, 5, 30, 1, 1, 0, 0, 0, 6000), /* 4 */
201     TIMING_PARAMS(7425, 1920, 88, 44, 280, 1080, 2, 5, 22, 1, 1, 1, 1, 0, 6000), /* 5 */
202     TIMING_PARAMS(2700, 1440, 38, 124, 276, 480, 4, 3, 22, 0, 0, 1, 1, 1, 5994), /* 6 */
203     TIMING_PARAMS(2700, 1440, 38, 124, 276, 480, 4, 3, 22, 0, 0, 1, 1, 1, 5994), /* 7 */
204     TIMING_PARAMS(2700, 1440, 38, 124, 276, 240, 4, 3, 22, 0, 0, 0, 0, 1, 6005), /* 8 */
205     TIMING_PARAMS(2700, 1440, 38, 124, 276, 240, 4, 3, 22, 0, 0, 0, 0, 1, 6005), /* 9 */
206     TIMING_PARAMS(5400, 2880, 76, 248, 552, 480, 4, 3, 22, 0, 0, 1, 1, 1, 5994), /* 10 */
207     TIMING_PARAMS(5400, 2880, 76, 248, 552, 480, 4, 3, 22, 0, 0, 1, 1, 1, 5994), /* 11 */
208     TIMING_PARAMS(5400, 2880, 76, 248, 552, 240, 4, 3, 22, 0, 0, 0, 0, 1, 6005), /* 12 */
209     TIMING_PARAMS(5400, 2880, 76, 248, 552, 240, 4, 3, 22, 0, 0, 0, 0, 1, 6005), /* 13 */
210     TIMING_PARAMS(5400, 1440, 32, 124, 276, 480, 9, 6, 45, 0, 0, 0, 0, 1, 5994), /* 14 */
211     TIMING_PARAMS(5400, 1440, 32, 124, 276, 480, 9, 6, 45, 0, 0, 0, 0, 1, 5994), /* 15 */
212     TIMING_PARAMS(14850, 1920, 88, 44, 280, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 6000), /* 16 */
213     TIMING_PARAMS(2700, 720, 12, 64, 144, 576, 5, 5, 49, 0, 0, 0, 0, 0, 5000), /* 17 */
214     TIMING_PARAMS(2700, 720, 12, 64, 144, 576, 5, 5, 49, 0, 0, 0, 0, 0, 5000), /* 18 */
215     TIMING_PARAMS(7425, 1280, 440, 40, 700, 720, 5, 5, 30, 1, 1, 0, 0, 0, 5000), /* 19 */
216     TIMING_PARAMS(7425, 1920, 528, 44, 720, 1080, 2, 5, 22, 1, 1, 1, 1, 0, 5000), /* 20 */
217     TIMING_PARAMS(2700, 1440, 24, 126, 288, 576, 2, 3, 24, 0, 0, 1, 1, 1, 5000), /* 21 */
218     TIMING_PARAMS(2700, 1440, 24, 126, 288, 576, 2, 3, 24, 0, 0, 1, 1, 1, 5000), /* 22 */
219     TIMING_PARAMS(2700, 1440, 24, 126, 288, 288, 2, 3, 24, 0, 0, 0, 0, 1, 5008), /* 23 */
220     TIMING_PARAMS(2700, 1440, 24, 126, 288, 288, 2, 3, 24, 0, 0, 0, 0, 1, 5008), /* 24 */
221     TIMING_PARAMS(5400, 2880, 48, 252, 576, 576, 2, 3, 24, 0, 0, 1, 1, 1, 5000), /* 25 */
222     TIMING_PARAMS(5400, 2880, 48, 252, 576, 576, 2, 3, 24, 0, 0, 1, 1, 1, 5000), /* 26 */
223     TIMING_PARAMS(5400, 2880, 48, 252, 576, 288, 2, 3, 24, 0, 0, 0, 0, 1, 5008), /* 27 */
224     TIMING_PARAMS(5400, 2880, 48, 252, 576, 288, 2, 3, 24, 0, 0, 0, 0, 1, 5008), /* 28 */
225     TIMING_PARAMS(5400, 1440, 24, 128, 288, 576, 5, 5, 49, 0, 0, 0, 0, 1, 5000), /* 29 */
226     TIMING_PARAMS(5400, 1440, 24, 128, 288, 576, 5, 5, 49, 0, 0, 0, 0, 1, 5000), /* 30 */
227     TIMING_PARAMS(14850, 1920, 528, 44, 720, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 5000), /* 31 */
228     TIMING_PARAMS(7425, 1920, 638, 44, 830, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 2400), /* 32 */
229     TIMING_PARAMS(7425, 1920, 528, 44, 720, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 2500), /* 33 */
230     TIMING_PARAMS(7425, 1920, 88, 44, 280, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 3000), /* 34 */
231     TIMING_PARAMS(10800, 2880, 64, 248, 552, 480, 9, 6, 45, 0, 0, 0, 0, 1, 5994), /* 35 */
232     TIMING_PARAMS(10800, 2880, 64, 248, 552, 480, 9, 6, 45, 0, 0, 0, 0, 1, 5994), /* 36 */
233     TIMING_PARAMS(10800, 2880, 48, 256, 576, 576, 5, 5, 49, 0, 0, 0, 0, 1, 5000), /* 37 */
234     TIMING_PARAMS(10800, 2880, 48, 256, 576, 576, 5, 5, 49, 0, 0, 0, 0, 1, 5000), /* 38 */
235     TIMING_PARAMS(7200, 1920, 32, 168, 384, 1080, 23, 5, 85, 1, 0, 1, 0, 0, 5000), /* 39 */
236     TIMING_PARAMS(14850, 1920, 528, 44, 720, 1080, 2, 5, 22, 1, 1, 1, 1, 0, 10000), /* 40 */
237     TIMING_PARAMS(14850, 1280, 440, 40, 700, 720, 5, 5, 30, 1, 1, 0, 0, 0, 10000), /* 41 */
238     TIMING_PARAMS(5400, 720, 12, 64, 144, 576, 5, 5, 49, 0, 0, 0, 0, 0, 10000), /* 42 */
239     TIMING_PARAMS(5400, 720, 12, 64, 144, 576, 5, 5, 49, 0, 0, 0, 0, 0, 10000), /* 43 */
240     TIMING_PARAMS(5400, 1440, 24, 126, 288, 576, 2, 3, 24, 0, 0, 1, 1, 1, 10000), /* 44 */
241     TIMING_PARAMS(5400, 1440, 24, 126, 288, 576, 2, 3, 24, 0, 0, 1, 1, 1, 10000), /* 45 */
242     TIMING_PARAMS(14850, 1920, 88, 44, 280, 1080, 2, 5, 22, 1, 1, 1, 1, 0, 12000), /* 46 */
243     TIMING_PARAMS(14850, 1280, 110, 40, 370, 720, 5, 5, 30, 1, 1, 0, 0, 0, 12000), /* 47 */
244     TIMING_PARAMS(5400, 720, 16, 62, 138, 480, 9, 6, 45, 0, 0, 0, 0, 0, 11988), /* 48 */
245     TIMING_PARAMS(5400, 720, 16, 62, 138, 480, 9, 6, 45, 0, 0, 0, 0, 0, 11988), /* 49 */
246     TIMING_PARAMS(5400, 1440, 38, 124, 276, 480, 4, 3, 22, 0, 0, 1, 1, 1, 11988), /* 50 */
247     TIMING_PARAMS(5400, 1440, 38, 124, 276, 480, 4, 3, 22, 0, 0, 1, 1, 1, 11988), /* 51 */
248     TIMING_PARAMS(10800, 720, 12, 64, 144, 576, 5, 5, 49, 0, 0, 0, 0, 0, 20000), /* 52 */
249     TIMING_PARAMS(10800, 720, 12, 64, 144, 576, 5, 5, 49, 0, 0, 0, 0, 0, 20000), /* 53 */
250     TIMING_PARAMS(10800, 1440, 24, 126, 288, 576, 2, 3, 24, 0, 0, 1, 1, 1, 20000), /* 54 */
251     TIMING_PARAMS(10800, 1440, 24, 126, 288, 576, 2, 3, 24, 0, 0, 1, 1, 1, 20000), /* 55 */
252     TIMING_PARAMS(10800, 720, 16, 62, 138, 480, 9, 6, 45, 0, 0, 0, 0, 0, 23976), /* 56 */
253     TIMING_PARAMS(10800, 720, 16, 62, 138, 480, 9, 6, 45, 0, 0, 0, 0, 0, 23976), /* 57 */
254     TIMING_PARAMS(10800, 1440, 38, 124, 276, 480, 4, 3, 22, 0, 0, 1, 1, 1, 23976), /* 58 */
255     TIMING_PARAMS(10800, 1440, 38, 124, 276, 480, 4, 3, 22, 0, 0, 1, 1, 1, 23976), /* 59 */
256     TIMING_PARAMS(5940, 1280, 1760, 40, 2020, 720, 5, 5, 30, 1, 1, 0, 0, 0, 2400), /* 60 */
257     TIMING_PARAMS(7425, 1280, 2420, 40, 2680, 720, 5, 5, 30, 1, 1, 0, 0, 0, 2500), /* 61 */
258     TIMING_PARAMS(7425, 1280, 1760, 40, 2020, 720, 5, 5, 30, 1, 1, 0, 0, 0, 3000), /* 62 */
259     TIMING_PARAMS(29700, 1920, 88, 44, 280, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 12000), /* 63 */
260     TIMING_PARAMS(29700, 1920, 528, 44, 720, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 10000), /* 64 */
261     TIMING_PARAMS(5940, 1280, 1760, 40, 2020, 720, 5, 5, 30, 1, 1, 0, 0, 0, 2400), /* 65 */
262     TIMING_PARAMS(7425, 1280, 2420, 40, 2680, 720, 5, 5, 30, 1, 1, 0, 0, 0, 2500), /* 66 */
263     TIMING_PARAMS(7425, 1280, 1760, 40, 2020, 720, 5, 5, 30, 1, 1, 0, 0, 0, 3000), /* 67 */
264     TIMING_PARAMS(7425, 1280, 440, 40, 700, 720, 5, 5, 30, 1, 1, 0, 0, 0, 5000), /* 68 */
265     TIMING_PARAMS(7425, 1280, 110, 40, 370, 720, 5, 5, 30, 1, 1, 0, 0, 0, 6000), /* 69 */
266     TIMING_PARAMS(14850, 1280, 440, 40, 700, 720, 5, 5, 30, 1, 1, 0, 0, 0, 10000), /* 70 */
267     TIMING_PARAMS(14850, 1280, 110, 40, 370, 720, 5, 5, 30, 1, 1, 0, 0, 0, 12000), /* 71 */
268     TIMING_PARAMS(7425, 1920, 638, 44, 830, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 2400), /* 72 */
269     TIMING_PARAMS(7425, 1920, 528, 44, 720, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 2500), /* 73 */
270     TIMING_PARAMS(7425, 1920, 88, 44, 280, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 3000), /* 74 */
271     TIMING_PARAMS(14850, 1920, 528, 44, 720, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 5000), /* 75 */
272     TIMING_PARAMS(14850, 1920, 88, 44, 280, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 6000), /* 76 */
273     TIMING_PARAMS(29700, 1920, 528, 44, 720, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 10000), /* 77 */
274     TIMING_PARAMS(29700, 1920, 88, 44, 280, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 12000), /* 78 */
275     TIMING_PARAMS(5940, 1680, 1360, 40, 1620, 720, 5, 5, 30, 1, 1, 0, 0, 0, 2400), /* 79 */
276     TIMING_PARAMS(5940, 1680, 1228, 40, 1488, 720, 5, 5, 30, 1, 1, 0, 0, 0, 2500), /* 80 */
277     TIMING_PARAMS(5940, 1680, 700, 40, 960, 720, 5, 5, 30, 1, 1, 0, 0, 0, 3000), /* 81 */
278     TIMING_PARAMS(8250, 1680, 260, 40, 520, 720, 5, 5, 30, 1, 1, 0, 0, 0, 5000), /* 82 */
279     TIMING_PARAMS(9900, 1680, 260, 40, 520, 720, 5, 5, 30, 1, 1, 0, 0, 0, 6000), /* 83 */
280     TIMING_PARAMS(16500, 1680, 60, 40, 320, 720, 5, 5, 105, 1, 1, 0, 0, 0, 10000), /* 84 */
281     TIMING_PARAMS(19800, 1680, 60, 40, 320, 720, 5, 5, 105, 1, 1, 0, 0, 0, 12000), /* 85 */
282     TIMING_PARAMS(9900, 2560, 998, 44, 1190, 1080, 4, 5, 20, 1, 1, 0, 0, 0, 2400), /* 86 */
283     TIMING_PARAMS(9000, 2560, 448, 44, 640, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 2500), /* 87 */
284     TIMING_PARAMS(11880, 2560, 768, 44, 960, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 3000), /* 88 */
285     TIMING_PARAMS(18563, 2560, 548, 44, 740, 1080, 4, 5, 45, 1, 1, 0, 0, 0, 5000), /* 89 */
286     TIMING_PARAMS(19800, 2560, 248, 44, 440, 1080, 4, 5, 20, 1, 1, 0, 0, 0, 6000), /* 90 */
287     TIMING_PARAMS(37125, 2560, 218, 44, 410, 1080, 4, 5, 170, 1, 1, 0, 0, 0, 10000), /* 91 */
288     TIMING_PARAMS(49500, 2560, 548, 44, 740, 1080, 4, 5, 170, 1, 1, 0, 0, 0, 12000), /* 92 */
289     TIMING_PARAMS(29700, 3840, 1276, 88, 1660, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 2400), /* 93 */
290     TIMING_PARAMS(29700, 3840, 1056, 88, 1440, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 2500), /* 94 */
291     TIMING_PARAMS(29700, 3840, 176, 88, 560, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 3000), /* 95 */
292     TIMING_PARAMS(59400, 3840, 1056, 88, 1440, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 5000), /* 96 */
293     TIMING_PARAMS(59400, 3840, 176, 88, 560, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 6000), /* 97 */
294     TIMING_PARAMS(29700, 4096, 1020, 88, 1404, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 2400), /* 98 */
295     TIMING_PARAMS(29700, 4096, 968, 88, 1184, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 2500), /* 99 */
296     TIMING_PARAMS(29700, 4096, 88, 88, 304, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 3000), /* 100 */
297     TIMING_PARAMS(59400, 4096, 968, 88, 1184, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 5000), /* 101 */
298     TIMING_PARAMS(59400, 4096, 88, 88, 304, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 6000), /* 102 */
299     TIMING_PARAMS(29700, 3840, 1276, 88, 1660, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 2400), /* 103 */
300     TIMING_PARAMS(29700, 3840, 1056, 88, 1440, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 2500), /* 104 */
301     TIMING_PARAMS(29700, 3840, 176, 88, 560, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 3000), /* 105 */
302     TIMING_PARAMS(59400, 3840, 1056, 88, 1440, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 5000), /* 106 */
303     TIMING_PARAMS(59400, 3840, 176, 88, 560, 2160, 8, 10, 90, 1, 1, 0, 0, 0, 6000), /* 107 */
304 };
305 
306 const timing_params_t* cea_timings = cea_timings_arr;
307 const uint32_t cea_timings_count = sizeof(cea_timings_arr) / sizeof(cea_timings_arr[0]);
308 
309 } // namespace internal
310 } // namespace edid
311