]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_R5_UltraScale_MPSoC/RTOSDemo_R5_bsp/psu_cortexr5_0/libsrc/video_common_v4_3/src/xvidc_cea861.h
Update Zynq, MPSoc Cortex-A53 and MPSoc Cortex-R5 demo projects to build with the...
[freertos] / FreeRTOS / Demo / CORTEX_R5_UltraScale_MPSoC / RTOSDemo_R5_bsp / psu_cortexr5_0 / libsrc / video_common_v4_3 / src / xvidc_cea861.h
1 /* vim: set et fde fdm=syntax ft=c.doxygen ts=4 sts=4 sw=4 : */
2 /*
3  * Copyright © 2010-2011 Saleem Abdulrasool <compnerd@compnerd.org>.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright notice,
10  *    this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright notice,
13  *    this list of conditions and the following disclaimer in the documentation
14  *    and/or other materials provided with the distribution.
15  *
16  * 3. The name of the author may not be used to endorse or promote products
17  *    derived from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
20  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
22  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef xvidc_cea861_h
32 #define xvidc_cea861_h
33
34 #define XVIDC_EDID_VERBOSITY                    0
35
36 #define ARRAY_SIZE(arr)                         (sizeof(arr) / sizeof(arr[0]))
37
38 #define XVIDC_CEA861_NO_DTDS_PRESENT            (0x04)
39
40 #define HDMI_VSDB_EXTENSION_FLAGS_OFFSET        (0x06)
41 #define HDMI_VSDB_MAX_TMDS_OFFSET               (0x07)
42 #define HDMI_VSDB_LATENCY_FIELDS_OFFSET         (0x08)
43
44 static const u8 HDMI_OUI[]                 = { 0x00, 0x0C, 0x03 };
45 static const u8 HDMI_OUI_HF[]              = { 0xC4, 0x5D, 0xD8 };
46
47 enum xvidc_cea861_data_block_type {
48     XVIDC_CEA861_DATA_BLOCK_TYPE_RESERVED0,
49     XVIDC_CEA861_DATA_BLOCK_TYPE_AUDIO,
50     XVIDC_CEA861_DATA_BLOCK_TYPE_VIDEO,
51     XVIDC_CEA861_DATA_BLOCK_TYPE_VENDOR_SPECIFIC,
52     XVIDC_CEA861_DATA_BLOCK_TYPE_SPEAKER_ALLOCATION,
53     XVIDC_CEA861_DATA_BLOCK_TYPE_VESA_DTC,
54     XVIDC_CEA861_DATA_BLOCK_TYPE_RESERVED6,
55     XVIDC_CEA861_DATA_BLOCK_TYPE_EXTENDED,
56 };
57
58 enum xvidc_cea861_extended_tag_type_data_block {
59     XVIDC_CEA861_EXT_TAG_TYPE_VIDEO_CAPABILITY,
60     XVIDC_CEA861_EXT_TAG_TYPE_VENDOR_SPECIFIC,
61     XVIDC_CEA861_EXT_TAG_TYPE_VESA_DISPLAY_DEVICE,
62     XVIDC_CEA861_EXT_TAG_TYPE_VESA_VIDEO_TIMING_BLOCK_EXT,
63     XVIDC_CEA861_EXT_TAG_TYPE_RESERVED_FOR_HDMI_VIDEO_DATA_BLOCK,
64     XVIDC_CEA861_EXT_TAG_TYPE_COLORIMETRY,
65     XVIDC_CEA861_EXT_TAG_TYPE_HDR_STATIC_METADATA,
66     XVIDC_CEA861_EXT_TAG_TYPE_HDR_DYNAMIC_METADATA,
67     XVIDC_CEA861_EXT_TAG_TYPE_RESERVED2,
68     XVIDC_CEA861_EXT_TAG_TYPE_RESERVED3,
69     XVIDC_CEA861_EXT_TAG_TYPE_RESERVED4,
70     XVIDC_CEA861_EXT_TAG_TYPE_RESERVED5,
71     XVIDC_CEA861_EXT_TAG_TYPE_RESERVED6,
72     XVIDC_CEA861_EXT_TAG_TYPE_VIDEO_FRMT_PREFERENCE,
73     XVIDC_CEA861_EXT_TAG_TYPE_YCBCR420_VIDEO,
74     XVIDC_CEA861_EXT_TAG_TYPE_YCBCR420_CAPABILITY_MAP,
75     XVIDC_CEA861_EXT_TAG_TYPE_CEA_MISC_AUDIO_FIELDS,
76     XVIDC_CEA861_EXT_TAG_TYPE_VENDOR_SPECIFC_AUDIO,
77     XVIDC_CEA861_EXT_TAG_TYPE_HDMI_AUDIO,
78     XVIDC_CEA861_EXT_TAG_TYPE_ROOM_CONFIGURATION,
79     XVIDC_CEA861_EXT_TAG_TYPE_SPEAKER_LOCATION,
80     XVIDC_CEA861_EXT_TAG_TYPE_INFOFRAME = 32,
81 /* Can be extend to 255, refer table 46 cea data block tag codes cea-861-f */
82 };
83
84 enum xvidc_cea861_audio_format {
85     XVIDC_CEA861_AUDIO_FORMAT_RESERVED,
86     XVIDC_CEA861_AUDIO_FORMAT_LPCM,
87     XVIDC_CEA861_AUDIO_FORMAT_AC_3,
88     XVIDC_CEA861_AUDIO_FORMAT_MPEG_1,
89     XVIDC_CEA861_AUDIO_FORMAT_MP3,
90     XVIDC_CEA861_AUDIO_FORMAT_MPEG2,
91     XVIDC_CEA861_AUDIO_FORMAT_AAC_LC,
92     XVIDC_CEA861_AUDIO_FORMAT_DTS,
93     XVIDC_CEA861_AUDIO_FORMAT_ATRAC,
94     XVIDC_CEA861_AUDIO_FORMAT_DSD,
95     XVIDC_CEA861_AUDIO_FORMAT_E_AC_3,
96     XVIDC_CEA861_AUDIO_FORMAT_DTS_HD,
97     XVIDC_CEA861_AUDIO_FORMAT_MLP,
98     XVIDC_CEA861_AUDIO_FORMAT_DST,
99     XVIDC_CEA861_AUDIO_FORMAT_WMA_PRO,
100     XVIDC_CEA861_AUDIO_FORMAT_EXTENDED,
101 };
102
103 struct __attribute__ (( packed )) xvidc_cea861_timing_block {
104     /* CEA Extension Header */
105     u8  tag;
106     u8  revision;
107     u8  dtd_offset;
108
109     /* Global Declarations */
110     unsigned native_dtds           : 4;
111     unsigned yuv_422_supported     : 1;
112     unsigned yuv_444_supported     : 1;
113     unsigned basic_audio_supported : 1;
114     unsigned underscan_supported   : 1;
115
116     u8  data[123];
117
118     u8  checksum;
119 };
120
121 struct __attribute__ (( packed )) xvidc_cea861_data_block_header {
122     unsigned length : 5;
123     unsigned tag    : 3;
124 };
125
126 struct __attribute__ (( packed )) xvidc_cea861_short_video_descriptor {
127     unsigned video_identification_code : 7;
128     unsigned native                    : 1;
129 };
130 #if XVIDC_EDID_VERBOSITY > 1
131 struct __attribute__ (( packed )) xvidc_cea861_video_data_block {
132     struct xvidc_cea861_data_block_header      header;
133     struct xvidc_cea861_short_video_descriptor svd[];
134 };
135 #endif
136 struct __attribute__ (( packed )) xvidc_cea861_short_audio_descriptor {
137     unsigned channels              : 3; /* = value + 1 */
138     unsigned audio_format          : 4;
139     unsigned                       : 1;
140
141     unsigned sample_rate_32_kHz    : 1;
142     unsigned sample_rate_44_1_kHz  : 1;
143     unsigned sample_rate_48_kHz    : 1;
144     unsigned sample_rate_88_2_kHz  : 1;
145     unsigned sample_rate_96_kHz    : 1;
146     unsigned sample_rate_176_4_kHz : 1;
147     unsigned sample_rate_192_kHz   : 1;
148     unsigned                       : 1;
149
150     union {
151         struct __attribute__ (( packed )) {
152             unsigned bitrate_16_bit : 1;
153             unsigned bitrate_20_bit : 1;
154             unsigned bitrate_24_bit : 1;
155             unsigned                : 5;
156         } lpcm;
157
158         u8 maximum_bit_rate;       /* formats 2-8; = value * 8 kHz */
159
160         u8 format_dependent;       /* formats 9-13; */
161
162         struct __attribute__ (( packed )) {
163             unsigned profile : 3;
164             unsigned         : 5;
165         } wma_pro;
166
167         struct __attribute__ (( packed )) {
168             unsigned      : 3;
169             unsigned code : 5;
170         } extension;
171     } flags;
172 };
173 #if XVIDC_EDID_VERBOSITY > 1
174 struct __attribute__ (( packed )) xvidc_cea861_audio_data_block {
175     struct xvidc_cea861_data_block_header      header;
176     struct xvidc_cea861_short_audio_descriptor sad[];
177 };
178 #endif
179 #if XVIDC_EDID_VERBOSITY > 1
180 struct __attribute__ (( packed )) xvidc_cea861_speaker_allocation {
181     unsigned front_left_right        : 1;
182     unsigned front_lfe               : 1;   /* low frequency effects */
183     unsigned front_center            : 1;
184     unsigned rear_left_right         : 1;
185     unsigned rear_center             : 1;
186     unsigned front_left_right_center : 1;
187     unsigned rear_left_right_center  : 1;
188     unsigned front_left_right_wide   : 1;
189
190     unsigned front_left_right_high   : 1;
191     unsigned top_center              : 1;
192     unsigned front_center_high       : 1;
193     unsigned                         : 5;
194
195     unsigned                         : 8;
196 };
197 #endif
198 #if XVIDC_EDID_VERBOSITY > 1
199 struct __attribute__ (( packed )) xvidc_cea861_speaker_allocation_data_block {
200     struct xvidc_cea861_data_block_header  header;
201     struct xvidc_cea861_speaker_allocation payload;
202 };
203 #endif
204 struct __attribute__ (( packed )) xvidc_cea861_vendor_specific_data_block {
205     struct xvidc_cea861_data_block_header  header;
206     u8                               ieee_registration[3];
207     u8                               data[30];
208 };
209
210 struct __attribute__ (( packed )) xvidc_cea861_extended_data_block {
211     struct xvidc_cea861_data_block_header  header;
212     u8                               xvidc_cea861_extended_tag_codes;
213     u8                               data[30];
214 };
215
216 #if XVIDC_EDID_VERBOSITY > 1
217 static const struct xvidc_cea861_timing {
218     const u16 hactive;
219     const u16 vactive;
220     const enum {
221         INTERLACED,
222         PROGRESSIVE,
223     } mode;
224     const u16 htotal;
225     const u16 hblank;
226     const u16 vtotal;
227     const double   vblank;
228     const double   hfreq;
229     const double   vfreq;
230     const double   pixclk;
231 } xvidc_cea861_timings[] = {
232     [  1]  = {  640, 480, PROGRESSIVE,  800,  160,  525, 45.0,  31.469,  59.940,  25.175 },
233     [  2]  = {  720, 480, PROGRESSIVE,  858,  138,  525, 45.0,  31.469,  59.940,  27.000 },
234     [  3]  = {  720, 480, PROGRESSIVE,  858,  138,  525, 45.0,  31.469,  59.940,  27.000 },
235     [  4]  = { 1280, 720, PROGRESSIVE, 1650,  370,  750, 30.0,  45.000,  60.000,  74.250 },
236     [  5]  = { 1920,1080,  INTERLACED, 2200,  280, 1125, 22.5,  33.750,  60.000,  72.250 },
237     [  6]  = { 1440, 480,  INTERLACED, 1716,  276,  525, 22.5,  15.734,  59.940,  27.000 },
238     [  7]  = { 1440, 480,  INTERLACED, 1716,  276,  525, 22.5,  15.734,  59.940,  27.000 },
239     [  8]  = { 1440, 240, PROGRESSIVE, 1716,  276,  262, 22.0,  15.734,  60.054,  27.000 },
240     [  9]  = { 1440, 240, PROGRESSIVE, 1716,  276,  262, 22.0,  15.734,  59.826,  27.000 },
241     [ 10] = { 2880,  480,  INTERLACED, 3432,  552,  525, 22.5,  15.734,  59.940,  54.000 },
242     [ 11] = { 2880,  480,  INTERLACED, 3432,  552,  525, 22.5,  15.734,  59.940,  54.000 },
243     [ 12] = { 2880,  240, PROGRESSIVE, 3432,  552,  262, 22.0,  15.734,  60.054,  54.000 },
244     [ 13] = { 2880,  240, PROGRESSIVE, 3432,  552,  262, 22.0,  15.734,  59.826,  54.000 },
245     [ 14] = { 1440,  480, PROGRESSIVE, 1716,  276,  525, 45.0,  31.469,  59.940,  54.000 },
246     [ 15] = { 1440,  480, PROGRESSIVE, 1716,  276,  525, 45.0,  31.469,  59.940,  54.000 },
247     [ 16] = { 1920, 1080, PROGRESSIVE, 2200,  280, 1125, 45.0,  67.500,  60.000, 148.500 },
248     [ 17] = {  720,  576, PROGRESSIVE,  864,  144,  625, 49.0,  31.250,  50.000,  27.000 },
249     [ 18] = {  720,  576, PROGRESSIVE,  864,  144,  625, 49.0,  31.250,  50.000,  27.000 },
250     [ 19] = { 1280,  720, PROGRESSIVE, 1980,  700,  750, 30.0,  37.500,  50.000,  74.250 },
251     [ 20] = { 1920, 1080,  INTERLACED, 2640,  720, 1125, 22.5,  28.125,  50.000,  74.250 },
252     [ 21] = { 1440,  576,  INTERLACED, 1728,  288,  625, 24.5,  15.625,  50.000,  27.000 },
253     [ 22] = { 1440,  576,  INTERLACED, 1728,  288,  625, 24.5,  15.625,  50.000,  27.000 },
254     [ 23] = { 1440,  288, PROGRESSIVE, 1728,  288,  312, 24.0,  15.625,  50.080,  27.000 },
255     [ 24] = { 1440,  288, PROGRESSIVE, 1728,  288,  313, 25.0,  15.625,  49.920,  27.000 },
256     [ 25] = { 2880,  576,  INTERLACED, 3456,  576,  625, 24.5,  15.625,  50.000,  54.000 },
257     [ 26] = { 2880,  576,  INTERLACED, 3456,  576,  625, 24.5,  15.625,  50.000,  54.000 },
258     [ 27] = { 2880,  288, PROGRESSIVE, 3456,  576,  312, 24.0,  15.625,  50.080,  54.000 },
259     [ 28] = { 2880,  288, PROGRESSIVE, 3456,  576,  313, 25.0,  15.625,  49.920,  54.000 },
260     [ 29] = { 1440,  576, PROGRESSIVE, 1728,  288,  625, 49.0,  31.250,  50.000,  54.000 },
261     [ 30] = { 1440,  576, PROGRESSIVE, 1728,  288,  625, 49.0,  31.250,  50.000,  54.000 },
262     [ 31] = { 1920, 1080, PROGRESSIVE, 2640,  720, 1125, 45.0,  56.250,  50.000, 148.500 },
263     [ 32] = { 1920, 1080, PROGRESSIVE, 2750,  830, 1125, 45.0,  27.000,  24.000,  74.250 },
264     [ 33] = { 1920, 1080, PROGRESSIVE, 2640,  720, 1125, 45.0,  28.125,  25.000,  74.250 },
265     [ 34] = { 1920, 1080, PROGRESSIVE, 2200,  280, 1125, 45.0,  33.750,  30.000,  74.250 },
266     [ 35] = { 2880,  480, PROGRESSIVE, 3432,  552,  525, 45.0,  31.469,  59.940, 108.500 },
267     [ 36] = { 2880,  480, PROGRESSIVE, 3432,  552,  525, 45.0,  31.469,  59.940, 108.500 },
268     [ 37] = { 2880,  576, PROGRESSIVE, 3456,  576,  625, 49.0,  31.250,  50.000, 108.000 },
269     [ 38] = { 2880,  576, PROGRESSIVE, 3456,  576,  625, 49.0,  31.250,  50.000, 108.000 },
270     [ 39] = { 1920, 1080,  INTERLACED, 2304,  384, 1250, 85.0,  31.250,  50.000,  72.000 },
271     [ 40] = { 1920, 1080,  INTERLACED, 2640,  720, 1125, 22.5,  56.250, 100.000, 148.500 },
272     [ 41] = { 1280,  720, PROGRESSIVE, 1980,  700,  750, 30.0,  75.000, 100.000, 148.500 },
273     [ 42] = {  720,  576, PROGRESSIVE,  864,  144,  625, 49.0,  62.500, 100.000,  54.000 },
274     [ 43] = {  720,  576, PROGRESSIVE,  864,  144,  625, 49.0,  62.500, 100.000,  54.000 },
275     [ 44] = { 1440,  576,  INTERLACED, 1728,  288,  625, 24.5,  31.250, 100.000,  54.000 },
276     [ 45] = { 1440,  576,  INTERLACED, 1728,  288,  625, 24.5,  31.250, 100.000,  54.000 },
277     [ 46] = { 1920, 1080,  INTERLACED, 2200,  280, 1125, 22.5,  67.500, 120.000, 148.500 },
278     [ 47] = { 1280,  720, PROGRESSIVE, 1650,  370,  750, 30.0,  90.000, 120.000, 148.500 },
279     [ 48] = {  720,  480, PROGRESSIVE,  858,  138,  525, 45.0,  62.937, 119.880,  54.000 },
280     [ 49] = {  720,  480, PROGRESSIVE,  858,  138,  525, 45.0,  62.937, 119.880,  54.000 },
281     [ 50] = { 1440,  480,  INTERLACED, 1716,  276,  525, 22.5,  31.469, 119.880,  54.000 },
282     [ 51] = { 1440,  480,  INTERLACED, 1716,  276,  525, 22.5,  31.469, 119.880,  54.000 },
283     [ 52] = {  720,  576, PROGRESSIVE,  864,  144,  625, 49.0, 125.000, 200.000, 108.000 },
284     [ 53] = {  720,  576, PROGRESSIVE,  864,  144,  625, 49.0, 125.000, 200.000, 108.000 },
285     [ 54] = { 1440,  576,  INTERLACED, 1728,  288,  625, 24.5,  62.500, 200.000, 108.000 },
286     [ 55] = { 1440,  576,  INTERLACED, 1728,  288,  625, 24.5,  62.500, 200.000, 108.000 },
287     [ 56] = {  720,  480, PROGRESSIVE,  858,  138,  525, 45.0, 125.874, 239.760, 108.000 },
288     [ 57] = {  720,  480, PROGRESSIVE,  858,  138,  525, 45.0, 125.874, 239.760, 108.000 },
289     [ 58] = { 1440,  480,  INTERLACED, 1716,  276,  525, 22.5,  62.937, 239.760, 108.000 },
290     [ 59] = { 1440,  480,  INTERLACED, 1716,  276,  525, 22.5,  62.937, 239.760, 108.000 },
291     [60 ] = {1280,  720 , PROGRESSIVE, 3300, 2020, 750 , 30  , 18     , 24.0003, 59.4    },
292     [61 ] = {1280,  720 , PROGRESSIVE, 3960, 2680, 750 , 30  , 18.75  , 25     , 74.25   },
293     [62 ] = {1280,  720 , PROGRESSIVE, 3300, 2020, 750 , 30  , 22.5   , 30.0003, 74.25   },
294     [63 ] = {1920,  1080, PROGRESSIVE, 2200, 280 , 1125, 45  , 135    , 120.003, 297     },
295     [64 ] = {1920,  1080, PROGRESSIVE, 2640, 720 , 1125, 45  , 112.5  , 100    , 297     },
296     [65 ] = {1280,  720 , PROGRESSIVE, 3300, 2020, 750 , 30  , 18     , 24.0003, 59.4    },
297     [66 ] = {1280,  720 , PROGRESSIVE, 3960, 2680, 750 , 30  , 18.75  , 25     , 74.25   },
298     [67 ] = {1280,  720 , PROGRESSIVE, 3300, 2020, 750 , 30  , 22.5   , 30.0003, 74.25   },
299     [68 ] = {1280,  720 , PROGRESSIVE, 1980, 700 , 750 , 30  , 37.5   , 50     , 74.25   },
300     [69 ] = {1280,  720 , PROGRESSIVE, 1650, 370 , 750 , 30  , 45     , 60.0003, 74.25   },
301     [70 ] = {1280,  720 , PROGRESSIVE, 1980, 700 , 750 , 30  , 75     , 100    , 148.5   },
302     [71 ] = {1280,  720 , PROGRESSIVE, 1650, 370 , 750 , 30  , 90     , 120.003, 148.5   },
303     [72 ] = {1920,  1080, PROGRESSIVE, 2750, 830 , 1125, 45  , 27     , 24.0003, 74.25   },
304     [73 ] = {1920,  1080, PROGRESSIVE, 2640, 720 , 1125, 45  , 28.125 , 25     , 74.25   },
305     [74 ] = {1920,  1080, PROGRESSIVE, 2200, 280 , 1125, 45  , 33.75  , 30.0003, 74.25   },
306     [75 ] = {1920,  1080, PROGRESSIVE, 2640, 720 , 1125, 45  , 56.25  , 50     , 148.5   },
307     [76 ] = {1920,  1080, PROGRESSIVE, 2200, 280 , 1125, 45  , 67.5   , 60.0003, 148.5   },
308     [77 ] = {1920,  1080, PROGRESSIVE, 2640, 720 , 1125, 45  , 112.5  , 100    , 297     },
309     [78 ] = {1920,  1080, PROGRESSIVE, 2200, 280 , 1125, 45  , 135    , 120.003, 297     },
310     [79 ] = {1680,  720 , PROGRESSIVE, 3300, 1620, 750 , 30  , 18     , 24.0003, 59.4    },
311     [80 ] = {1680,  720 , PROGRESSIVE, 3168, 1488, 750 , 30  , 18.75  , 25     , 59.4    },
312     [81 ] = {1680,  720 , PROGRESSIVE, 2640, 960 , 750 , 30  , 22.5   , 30.0003, 59.4    },
313     [82 ] = {1680,  720 , PROGRESSIVE, 2200, 520 , 750 , 30  , 37.5   , 50     , 82.5    },
314     [83 ] = {1680,  720 , PROGRESSIVE, 2200, 520 , 750 , 30  , 45     , 60.0003, 99      },
315     [84 ] = {1680,  720 , PROGRESSIVE, 2000, 320 , 825 , 105 , 82.5   , 100    , 165     },
316     [85 ] = {1680,  720 , PROGRESSIVE, 2000, 320 , 825 , 105 , 99     , 120.003, 198     },
317     [86 ] = {2560,  1080, PROGRESSIVE, 3750, 1190, 1100, 20  , 26.4   , 24.0003, 99      },
318     [87 ] = {2560,  1080, PROGRESSIVE, 3200, 640 , 1125, 45  , 28.125 , 25     , 90      },
319     [88 ] = {2560,  1080, PROGRESSIVE, 3520, 960 , 1125, 45  , 33.75  , 30.0003, 118.8   },
320     [89 ] = {2560,  1080, PROGRESSIVE, 3300, 740 , 1125, 45  , 56.25  , 50     , 185.625 },
321     [90 ] = {2560,  1080, PROGRESSIVE, 3000, 440 , 1100, 20  , 66     , 60.0003, 198     },
322     [91 ] = {2560,  1080, PROGRESSIVE, 2970, 410 , 1250, 170 , 125    , 100    , 371.25  },
323     [92 ] = {2560,  1080, PROGRESSIVE, 3300, 740 , 1250, 170 , 150    , 120.003, 495     },
324     [93 ] = {3840,  2160, PROGRESSIVE, 5500, 1660, 2250, 90  , 54     , 24.0003, 297     },
325     [94 ] = {3840,  2160, PROGRESSIVE, 5280, 1440, 2250, 90  , 56.25  , 25     , 297     },
326     [95 ] = {3840,  2160, PROGRESSIVE, 4400, 560 , 2250, 90  , 67.5   , 30.0003, 297     },
327     [96 ] = {3840,  2160, PROGRESSIVE, 5280, 1440, 2250, 90  , 112.5  , 50     , 594     },
328     [97 ] = {3840,  2160, PROGRESSIVE, 4400, 560 , 2250, 90  , 135    , 60.0003, 594     },
329     [98 ] = {4096,  2160, PROGRESSIVE, 5500, 1404, 2250, 90  , 54     , 24.0003, 297     },
330     [99 ] = {4096,  2160, PROGRESSIVE, 5280, 1184, 2250, 90  , 56.25  , 25     , 297     },
331     [100] = {4096,  2160, PROGRESSIVE, 4400, 304 , 2250, 90  , 67.5   , 30.0003, 297     },
332     [101] = {4096,  2160, PROGRESSIVE, 5280, 1184, 2250, 90  , 112.5  , 50     , 594     },
333     [102] = {4096,  2160, PROGRESSIVE, 4400, 304 , 2250, 90  , 135    , 60.0003, 594     },
334     [103] = {3840,  2160, PROGRESSIVE, 5500, 1660, 2250, 90  , 54     , 24.0003, 297     },
335     [104] = {3840,  2160, PROGRESSIVE, 5280, 1440, 2250, 90  , 56.25  , 25     , 297     },
336     [105] = {3840,  2160, PROGRESSIVE, 4400, 560 , 2250, 90  , 67.5   , 30.0003, 297     },
337     [106] = {3840,  2160, PROGRESSIVE, 5280, 1440, 2250, 90  , 112.5  , 50     , 594     },
338     [107] = {3840,  2160, PROGRESSIVE, 4400, 560 , 2250, 90  , 135    , 60.0003, 594     },
339 };
340 #endif
341
342 struct __attribute__ (( packed )) xvidc_cea861_hdmi_vendor_specific_data_block {
343     struct xvidc_cea861_data_block_header header;
344
345     u8  ieee_registration_id[3];           /* LSB */
346
347     unsigned port_configuration_b      : 4;
348     unsigned port_configuration_a      : 4;
349     unsigned port_configuration_d      : 4;
350     unsigned port_configuration_c      : 4;
351
352     /* extension fields */
353     unsigned dvi_dual_link             : 1;
354     unsigned                           : 2;
355     unsigned yuv_444_supported         : 1;
356     unsigned colour_depth_30_bit       : 1;
357     unsigned colour_depth_36_bit       : 1;
358     unsigned colour_depth_48_bit       : 1;
359     unsigned audio_info_frame          : 1;
360
361     u8  max_tmds_clock;                    /* = value * 5 */
362
363     unsigned                           : 6;
364     unsigned interlaced_latency_fields : 1;
365     unsigned latency_fields            : 1;
366
367     u8  video_latency;                     /* = (value - 1) * 2 */
368     u8  audio_latency;                     /* = (value - 1) * 2 */
369     u8  interlaced_video_latency;
370     u8  interlaced_audio_latency;
371
372     u8  reserved[];
373 };
374
375 struct __attribute__ (( packed )) xvidc_cea861_hdmi_hf_vendor_specific_data_block {
376     struct xvidc_cea861_data_block_header header;
377
378     u8  ieee_registration_id[3];           /* LSB */
379
380     u8  version;
381     u8  max_tmds_char_rate;
382
383     unsigned osd_disparity_3d          : 1;
384     unsigned dual_view_3d              : 1;
385     unsigned independent_view_3d       : 1;
386     unsigned lte_340mcsc_scramble      : 1;
387
388     unsigned                           : 2;
389
390     unsigned rr_capable                : 1;
391     unsigned scdc_present              : 1;
392     unsigned dc_30bit_yuv420           : 1;
393     unsigned dc_36bit_yuv420           : 1;
394     unsigned dc_48bit_yuv420           : 1;
395
396     u8  reserved[];
397 };
398
399 #endif