blob: 9e50b9d4bfe3f561ff1893b90bbb98d5829c3a54 [file] [log] [blame]
/* vim: set et fde fdm=syntax ft=c.doxygen ts=4 sts=4 sw=4 : */
/*
* Copyright © 2010-2011 Saleem Abdulrasool <compnerd@compnerd.org>.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef xvidc_cea861_h
#define xvidc_cea861_h
#define XVIDC_EDID_VERBOSITY 0
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
#define XVIDC_CEA861_NO_DTDS_PRESENT (0x04)
#define HDMI_VSDB_EXTENSION_FLAGS_OFFSET (0x06)
#define HDMI_VSDB_MAX_TMDS_OFFSET (0x07)
#define HDMI_VSDB_LATENCY_FIELDS_OFFSET (0x08)
static const u8 HDMI_OUI[] = { 0x00, 0x0C, 0x03 };
static const u8 HDMI_OUI_HF[] = { 0xC4, 0x5D, 0xD8 };
enum xvidc_cea861_data_block_type {
XVIDC_CEA861_DATA_BLOCK_TYPE_RESERVED0,
XVIDC_CEA861_DATA_BLOCK_TYPE_AUDIO,
XVIDC_CEA861_DATA_BLOCK_TYPE_VIDEO,
XVIDC_CEA861_DATA_BLOCK_TYPE_VENDOR_SPECIFIC,
XVIDC_CEA861_DATA_BLOCK_TYPE_SPEAKER_ALLOCATION,
XVIDC_CEA861_DATA_BLOCK_TYPE_VESA_DTC,
XVIDC_CEA861_DATA_BLOCK_TYPE_RESERVED6,
XVIDC_CEA861_DATA_BLOCK_TYPE_EXTENDED,
};
enum xvidc_cea861_extended_tag_type_data_block {
XVIDC_CEA861_EXT_TAG_TYPE_VIDEO_CAPABILITY,
XVIDC_CEA861_EXT_TAG_TYPE_VENDOR_SPECIFIC,
XVIDC_CEA861_EXT_TAG_TYPE_VESA_DISPLAY_DEVICE,
XVIDC_CEA861_EXT_TAG_TYPE_VESA_VIDEO_TIMING_BLOCK_EXT,
XVIDC_CEA861_EXT_TAG_TYPE_RESERVED_FOR_HDMI_VIDEO_DATA_BLOCK,
XVIDC_CEA861_EXT_TAG_TYPE_COLORIMETRY,
XVIDC_CEA861_EXT_TAG_TYPE_HDR_STATIC_METADATA,
XVIDC_CEA861_EXT_TAG_TYPE_HDR_DYNAMIC_METADATA,
XVIDC_CEA861_EXT_TAG_TYPE_RESERVED2,
XVIDC_CEA861_EXT_TAG_TYPE_RESERVED3,
XVIDC_CEA861_EXT_TAG_TYPE_RESERVED4,
XVIDC_CEA861_EXT_TAG_TYPE_RESERVED5,
XVIDC_CEA861_EXT_TAG_TYPE_RESERVED6,
XVIDC_CEA861_EXT_TAG_TYPE_VIDEO_FRMT_PREFERENCE,
XVIDC_CEA861_EXT_TAG_TYPE_YCBCR420_VIDEO,
XVIDC_CEA861_EXT_TAG_TYPE_YCBCR420_CAPABILITY_MAP,
XVIDC_CEA861_EXT_TAG_TYPE_CEA_MISC_AUDIO_FIELDS,
XVIDC_CEA861_EXT_TAG_TYPE_VENDOR_SPECIFC_AUDIO,
XVIDC_CEA861_EXT_TAG_TYPE_HDMI_AUDIO,
XVIDC_CEA861_EXT_TAG_TYPE_ROOM_CONFIGURATION,
XVIDC_CEA861_EXT_TAG_TYPE_SPEAKER_LOCATION,
XVIDC_CEA861_EXT_TAG_TYPE_INFOFRAME = 32,
/* Can be extend to 255, refer table 46 cea data block tag codes cea-861-f */
};
enum xvidc_cea861_audio_format {
XVIDC_CEA861_AUDIO_FORMAT_RESERVED,
XVIDC_CEA861_AUDIO_FORMAT_LPCM,
XVIDC_CEA861_AUDIO_FORMAT_AC_3,
XVIDC_CEA861_AUDIO_FORMAT_MPEG_1,
XVIDC_CEA861_AUDIO_FORMAT_MP3,
XVIDC_CEA861_AUDIO_FORMAT_MPEG2,
XVIDC_CEA861_AUDIO_FORMAT_AAC_LC,
XVIDC_CEA861_AUDIO_FORMAT_DTS,
XVIDC_CEA861_AUDIO_FORMAT_ATRAC,
XVIDC_CEA861_AUDIO_FORMAT_DSD,
XVIDC_CEA861_AUDIO_FORMAT_E_AC_3,
XVIDC_CEA861_AUDIO_FORMAT_DTS_HD,
XVIDC_CEA861_AUDIO_FORMAT_MLP,
XVIDC_CEA861_AUDIO_FORMAT_DST,
XVIDC_CEA861_AUDIO_FORMAT_WMA_PRO,
XVIDC_CEA861_AUDIO_FORMAT_EXTENDED,
};
struct __attribute__ (( packed )) xvidc_cea861_timing_block {
/* CEA Extension Header */
u8 tag;
u8 revision;
u8 dtd_offset;
/* Global Declarations */
unsigned native_dtds : 4;
unsigned yuv_422_supported : 1;
unsigned yuv_444_supported : 1;
unsigned basic_audio_supported : 1;
unsigned underscan_supported : 1;
u8 data[123];
u8 checksum;
};
struct __attribute__ (( packed )) xvidc_cea861_data_block_header {
unsigned length : 5;
unsigned tag : 3;
};
struct __attribute__ (( packed )) xvidc_cea861_short_video_descriptor {
unsigned video_identification_code : 7;
unsigned native : 1;
};
#if XVIDC_EDID_VERBOSITY > 1
struct __attribute__ (( packed )) xvidc_cea861_video_data_block {
struct xvidc_cea861_data_block_header header;
struct xvidc_cea861_short_video_descriptor svd[];
};
#endif
struct __attribute__ (( packed )) xvidc_cea861_short_audio_descriptor {
unsigned channels : 3; /* = value + 1 */
unsigned audio_format : 4;
unsigned : 1;
unsigned sample_rate_32_kHz : 1;
unsigned sample_rate_44_1_kHz : 1;
unsigned sample_rate_48_kHz : 1;
unsigned sample_rate_88_2_kHz : 1;
unsigned sample_rate_96_kHz : 1;
unsigned sample_rate_176_4_kHz : 1;
unsigned sample_rate_192_kHz : 1;
unsigned : 1;
union {
struct __attribute__ (( packed )) {
unsigned bitrate_16_bit : 1;
unsigned bitrate_20_bit : 1;
unsigned bitrate_24_bit : 1;
unsigned : 5;
} lpcm;
u8 maximum_bit_rate; /* formats 2-8; = value * 8 kHz */
u8 format_dependent; /* formats 9-13; */
struct __attribute__ (( packed )) {
unsigned profile : 3;
unsigned : 5;
} wma_pro;
struct __attribute__ (( packed )) {
unsigned : 3;
unsigned code : 5;
} extension;
} flags;
};
#if XVIDC_EDID_VERBOSITY > 1
struct __attribute__ (( packed )) xvidc_cea861_audio_data_block {
struct xvidc_cea861_data_block_header header;
struct xvidc_cea861_short_audio_descriptor sad[];
};
#endif
#if XVIDC_EDID_VERBOSITY > 1
struct __attribute__ (( packed )) xvidc_cea861_speaker_allocation {
unsigned front_left_right : 1;
unsigned front_lfe : 1; /* low frequency effects */
unsigned front_center : 1;
unsigned rear_left_right : 1;
unsigned rear_center : 1;
unsigned front_left_right_center : 1;
unsigned rear_left_right_center : 1;
unsigned front_left_right_wide : 1;
unsigned front_left_right_high : 1;
unsigned top_center : 1;
unsigned front_center_high : 1;
unsigned : 5;
unsigned : 8;
};
#endif
#if XVIDC_EDID_VERBOSITY > 1
struct __attribute__ (( packed )) xvidc_cea861_speaker_allocation_data_block {
struct xvidc_cea861_data_block_header header;
struct xvidc_cea861_speaker_allocation payload;
};
#endif
struct __attribute__ (( packed )) xvidc_cea861_vendor_specific_data_block {
struct xvidc_cea861_data_block_header header;
u8 ieee_registration[3];
u8 data[30];
};
struct __attribute__ (( packed )) xvidc_cea861_extended_data_block {
struct xvidc_cea861_data_block_header header;
u8 xvidc_cea861_extended_tag_codes;
u8 data[30];
};
#if XVIDC_EDID_VERBOSITY > 1
static const struct xvidc_cea861_timing {
const u16 hactive;
const u16 vactive;
const enum {
INTERLACED,
PROGRESSIVE,
} mode;
const u16 htotal;
const u16 hblank;
const u16 vtotal;
const double vblank;
const double hfreq;
const double vfreq;
const double pixclk;
} xvidc_cea861_timings[] = {
[ 1] = { 640, 480, PROGRESSIVE, 800, 160, 525, 45.0, 31.469, 59.940, 25.175 },
[ 2] = { 720, 480, PROGRESSIVE, 858, 138, 525, 45.0, 31.469, 59.940, 27.000 },
[ 3] = { 720, 480, PROGRESSIVE, 858, 138, 525, 45.0, 31.469, 59.940, 27.000 },
[ 4] = { 1280, 720, PROGRESSIVE, 1650, 370, 750, 30.0, 45.000, 60.000, 74.250 },
[ 5] = { 1920,1080, INTERLACED, 2200, 280, 1125, 22.5, 33.750, 60.000, 72.250 },
[ 6] = { 1440, 480, INTERLACED, 1716, 276, 525, 22.5, 15.734, 59.940, 27.000 },
[ 7] = { 1440, 480, INTERLACED, 1716, 276, 525, 22.5, 15.734, 59.940, 27.000 },
[ 8] = { 1440, 240, PROGRESSIVE, 1716, 276, 262, 22.0, 15.734, 60.054, 27.000 },
[ 9] = { 1440, 240, PROGRESSIVE, 1716, 276, 262, 22.0, 15.734, 59.826, 27.000 },
[ 10] = { 2880, 480, INTERLACED, 3432, 552, 525, 22.5, 15.734, 59.940, 54.000 },
[ 11] = { 2880, 480, INTERLACED, 3432, 552, 525, 22.5, 15.734, 59.940, 54.000 },
[ 12] = { 2880, 240, PROGRESSIVE, 3432, 552, 262, 22.0, 15.734, 60.054, 54.000 },
[ 13] = { 2880, 240, PROGRESSIVE, 3432, 552, 262, 22.0, 15.734, 59.826, 54.000 },
[ 14] = { 1440, 480, PROGRESSIVE, 1716, 276, 525, 45.0, 31.469, 59.940, 54.000 },
[ 15] = { 1440, 480, PROGRESSIVE, 1716, 276, 525, 45.0, 31.469, 59.940, 54.000 },
[ 16] = { 1920, 1080, PROGRESSIVE, 2200, 280, 1125, 45.0, 67.500, 60.000, 148.500 },
[ 17] = { 720, 576, PROGRESSIVE, 864, 144, 625, 49.0, 31.250, 50.000, 27.000 },
[ 18] = { 720, 576, PROGRESSIVE, 864, 144, 625, 49.0, 31.250, 50.000, 27.000 },
[ 19] = { 1280, 720, PROGRESSIVE, 1980, 700, 750, 30.0, 37.500, 50.000, 74.250 },
[ 20] = { 1920, 1080, INTERLACED, 2640, 720, 1125, 22.5, 28.125, 50.000, 74.250 },
[ 21] = { 1440, 576, INTERLACED, 1728, 288, 625, 24.5, 15.625, 50.000, 27.000 },
[ 22] = { 1440, 576, INTERLACED, 1728, 288, 625, 24.5, 15.625, 50.000, 27.000 },
[ 23] = { 1440, 288, PROGRESSIVE, 1728, 288, 312, 24.0, 15.625, 50.080, 27.000 },
[ 24] = { 1440, 288, PROGRESSIVE, 1728, 288, 313, 25.0, 15.625, 49.920, 27.000 },
[ 25] = { 2880, 576, INTERLACED, 3456, 576, 625, 24.5, 15.625, 50.000, 54.000 },
[ 26] = { 2880, 576, INTERLACED, 3456, 576, 625, 24.5, 15.625, 50.000, 54.000 },
[ 27] = { 2880, 288, PROGRESSIVE, 3456, 576, 312, 24.0, 15.625, 50.080, 54.000 },
[ 28] = { 2880, 288, PROGRESSIVE, 3456, 576, 313, 25.0, 15.625, 49.920, 54.000 },
[ 29] = { 1440, 576, PROGRESSIVE, 1728, 288, 625, 49.0, 31.250, 50.000, 54.000 },
[ 30] = { 1440, 576, PROGRESSIVE, 1728, 288, 625, 49.0, 31.250, 50.000, 54.000 },
[ 31] = { 1920, 1080, PROGRESSIVE, 2640, 720, 1125, 45.0, 56.250, 50.000, 148.500 },
[ 32] = { 1920, 1080, PROGRESSIVE, 2750, 830, 1125, 45.0, 27.000, 24.000, 74.250 },
[ 33] = { 1920, 1080, PROGRESSIVE, 2640, 720, 1125, 45.0, 28.125, 25.000, 74.250 },
[ 34] = { 1920, 1080, PROGRESSIVE, 2200, 280, 1125, 45.0, 33.750, 30.000, 74.250 },
[ 35] = { 2880, 480, PROGRESSIVE, 3432, 552, 525, 45.0, 31.469, 59.940, 108.500 },
[ 36] = { 2880, 480, PROGRESSIVE, 3432, 552, 525, 45.0, 31.469, 59.940, 108.500 },
[ 37] = { 2880, 576, PROGRESSIVE, 3456, 576, 625, 49.0, 31.250, 50.000, 108.000 },
[ 38] = { 2880, 576, PROGRESSIVE, 3456, 576, 625, 49.0, 31.250, 50.000, 108.000 },
[ 39] = { 1920, 1080, INTERLACED, 2304, 384, 1250, 85.0, 31.250, 50.000, 72.000 },
[ 40] = { 1920, 1080, INTERLACED, 2640, 720, 1125, 22.5, 56.250, 100.000, 148.500 },
[ 41] = { 1280, 720, PROGRESSIVE, 1980, 700, 750, 30.0, 75.000, 100.000, 148.500 },
[ 42] = { 720, 576, PROGRESSIVE, 864, 144, 625, 49.0, 62.500, 100.000, 54.000 },
[ 43] = { 720, 576, PROGRESSIVE, 864, 144, 625, 49.0, 62.500, 100.000, 54.000 },
[ 44] = { 1440, 576, INTERLACED, 1728, 288, 625, 24.5, 31.250, 100.000, 54.000 },
[ 45] = { 1440, 576, INTERLACED, 1728, 288, 625, 24.5, 31.250, 100.000, 54.000 },
[ 46] = { 1920, 1080, INTERLACED, 2200, 280, 1125, 22.5, 67.500, 120.000, 148.500 },
[ 47] = { 1280, 720, PROGRESSIVE, 1650, 370, 750, 30.0, 90.000, 120.000, 148.500 },
[ 48] = { 720, 480, PROGRESSIVE, 858, 138, 525, 45.0, 62.937, 119.880, 54.000 },
[ 49] = { 720, 480, PROGRESSIVE, 858, 138, 525, 45.0, 62.937, 119.880, 54.000 },
[ 50] = { 1440, 480, INTERLACED, 1716, 276, 525, 22.5, 31.469, 119.880, 54.000 },
[ 51] = { 1440, 480, INTERLACED, 1716, 276, 525, 22.5, 31.469, 119.880, 54.000 },
[ 52] = { 720, 576, PROGRESSIVE, 864, 144, 625, 49.0, 125.000, 200.000, 108.000 },
[ 53] = { 720, 576, PROGRESSIVE, 864, 144, 625, 49.0, 125.000, 200.000, 108.000 },
[ 54] = { 1440, 576, INTERLACED, 1728, 288, 625, 24.5, 62.500, 200.000, 108.000 },
[ 55] = { 1440, 576, INTERLACED, 1728, 288, 625, 24.5, 62.500, 200.000, 108.000 },
[ 56] = { 720, 480, PROGRESSIVE, 858, 138, 525, 45.0, 125.874, 239.760, 108.000 },
[ 57] = { 720, 480, PROGRESSIVE, 858, 138, 525, 45.0, 125.874, 239.760, 108.000 },
[ 58] = { 1440, 480, INTERLACED, 1716, 276, 525, 22.5, 62.937, 239.760, 108.000 },
[ 59] = { 1440, 480, INTERLACED, 1716, 276, 525, 22.5, 62.937, 239.760, 108.000 },
[60 ] = {1280, 720 , PROGRESSIVE, 3300, 2020, 750 , 30 , 18 , 24.0003, 59.4 },
[61 ] = {1280, 720 , PROGRESSIVE, 3960, 2680, 750 , 30 , 18.75 , 25 , 74.25 },
[62 ] = {1280, 720 , PROGRESSIVE, 3300, 2020, 750 , 30 , 22.5 , 30.0003, 74.25 },
[63 ] = {1920, 1080, PROGRESSIVE, 2200, 280 , 1125, 45 , 135 , 120.003, 297 },
[64 ] = {1920, 1080, PROGRESSIVE, 2640, 720 , 1125, 45 , 112.5 , 100 , 297 },
[65 ] = {1280, 720 , PROGRESSIVE, 3300, 2020, 750 , 30 , 18 , 24.0003, 59.4 },
[66 ] = {1280, 720 , PROGRESSIVE, 3960, 2680, 750 , 30 , 18.75 , 25 , 74.25 },
[67 ] = {1280, 720 , PROGRESSIVE, 3300, 2020, 750 , 30 , 22.5 , 30.0003, 74.25 },
[68 ] = {1280, 720 , PROGRESSIVE, 1980, 700 , 750 , 30 , 37.5 , 50 , 74.25 },
[69 ] = {1280, 720 , PROGRESSIVE, 1650, 370 , 750 , 30 , 45 , 60.0003, 74.25 },
[70 ] = {1280, 720 , PROGRESSIVE, 1980, 700 , 750 , 30 , 75 , 100 , 148.5 },
[71 ] = {1280, 720 , PROGRESSIVE, 1650, 370 , 750 , 30 , 90 , 120.003, 148.5 },
[72 ] = {1920, 1080, PROGRESSIVE, 2750, 830 , 1125, 45 , 27 , 24.0003, 74.25 },
[73 ] = {1920, 1080, PROGRESSIVE, 2640, 720 , 1125, 45 , 28.125 , 25 , 74.25 },
[74 ] = {1920, 1080, PROGRESSIVE, 2200, 280 , 1125, 45 , 33.75 , 30.0003, 74.25 },
[75 ] = {1920, 1080, PROGRESSIVE, 2640, 720 , 1125, 45 , 56.25 , 50 , 148.5 },
[76 ] = {1920, 1080, PROGRESSIVE, 2200, 280 , 1125, 45 , 67.5 , 60.0003, 148.5 },
[77 ] = {1920, 1080, PROGRESSIVE, 2640, 720 , 1125, 45 , 112.5 , 100 , 297 },
[78 ] = {1920, 1080, PROGRESSIVE, 2200, 280 , 1125, 45 , 135 , 120.003, 297 },
[79 ] = {1680, 720 , PROGRESSIVE, 3300, 1620, 750 , 30 , 18 , 24.0003, 59.4 },
[80 ] = {1680, 720 , PROGRESSIVE, 3168, 1488, 750 , 30 , 18.75 , 25 , 59.4 },
[81 ] = {1680, 720 , PROGRESSIVE, 2640, 960 , 750 , 30 , 22.5 , 30.0003, 59.4 },
[82 ] = {1680, 720 , PROGRESSIVE, 2200, 520 , 750 , 30 , 37.5 , 50 , 82.5 },
[83 ] = {1680, 720 , PROGRESSIVE, 2200, 520 , 750 , 30 , 45 , 60.0003, 99 },
[84 ] = {1680, 720 , PROGRESSIVE, 2000, 320 , 825 , 105 , 82.5 , 100 , 165 },
[85 ] = {1680, 720 , PROGRESSIVE, 2000, 320 , 825 , 105 , 99 , 120.003, 198 },
[86 ] = {2560, 1080, PROGRESSIVE, 3750, 1190, 1100, 20 , 26.4 , 24.0003, 99 },
[87 ] = {2560, 1080, PROGRESSIVE, 3200, 640 , 1125, 45 , 28.125 , 25 , 90 },
[88 ] = {2560, 1080, PROGRESSIVE, 3520, 960 , 1125, 45 , 33.75 , 30.0003, 118.8 },
[89 ] = {2560, 1080, PROGRESSIVE, 3300, 740 , 1125, 45 , 56.25 , 50 , 185.625 },
[90 ] = {2560, 1080, PROGRESSIVE, 3000, 440 , 1100, 20 , 66 , 60.0003, 198 },
[91 ] = {2560, 1080, PROGRESSIVE, 2970, 410 , 1250, 170 , 125 , 100 , 371.25 },
[92 ] = {2560, 1080, PROGRESSIVE, 3300, 740 , 1250, 170 , 150 , 120.003, 495 },
[93 ] = {3840, 2160, PROGRESSIVE, 5500, 1660, 2250, 90 , 54 , 24.0003, 297 },
[94 ] = {3840, 2160, PROGRESSIVE, 5280, 1440, 2250, 90 , 56.25 , 25 , 297 },
[95 ] = {3840, 2160, PROGRESSIVE, 4400, 560 , 2250, 90 , 67.5 , 30.0003, 297 },
[96 ] = {3840, 2160, PROGRESSIVE, 5280, 1440, 2250, 90 , 112.5 , 50 , 594 },
[97 ] = {3840, 2160, PROGRESSIVE, 4400, 560 , 2250, 90 , 135 , 60.0003, 594 },
[98 ] = {4096, 2160, PROGRESSIVE, 5500, 1404, 2250, 90 , 54 , 24.0003, 297 },
[99 ] = {4096, 2160, PROGRESSIVE, 5280, 1184, 2250, 90 , 56.25 , 25 , 297 },
[100] = {4096, 2160, PROGRESSIVE, 4400, 304 , 2250, 90 , 67.5 , 30.0003, 297 },
[101] = {4096, 2160, PROGRESSIVE, 5280, 1184, 2250, 90 , 112.5 , 50 , 594 },
[102] = {4096, 2160, PROGRESSIVE, 4400, 304 , 2250, 90 , 135 , 60.0003, 594 },
[103] = {3840, 2160, PROGRESSIVE, 5500, 1660, 2250, 90 , 54 , 24.0003, 297 },
[104] = {3840, 2160, PROGRESSIVE, 5280, 1440, 2250, 90 , 56.25 , 25 , 297 },
[105] = {3840, 2160, PROGRESSIVE, 4400, 560 , 2250, 90 , 67.5 , 30.0003, 297 },
[106] = {3840, 2160, PROGRESSIVE, 5280, 1440, 2250, 90 , 112.5 , 50 , 594 },
[107] = {3840, 2160, PROGRESSIVE, 4400, 560 , 2250, 90 , 135 , 60.0003, 594 },
};
#endif
struct __attribute__ (( packed )) xvidc_cea861_hdmi_vendor_specific_data_block {
struct xvidc_cea861_data_block_header header;
u8 ieee_registration_id[3]; /* LSB */
unsigned port_configuration_b : 4;
unsigned port_configuration_a : 4;
unsigned port_configuration_d : 4;
unsigned port_configuration_c : 4;
/* extension fields */
unsigned dvi_dual_link : 1;
unsigned : 2;
unsigned yuv_444_supported : 1;
unsigned colour_depth_30_bit : 1;
unsigned colour_depth_36_bit : 1;
unsigned colour_depth_48_bit : 1;
unsigned audio_info_frame : 1;
u8 max_tmds_clock; /* = value * 5 */
unsigned : 6;
unsigned interlaced_latency_fields : 1;
unsigned latency_fields : 1;
u8 video_latency; /* = (value - 1) * 2 */
u8 audio_latency; /* = (value - 1) * 2 */
u8 interlaced_video_latency;
u8 interlaced_audio_latency;
u8 reserved[];
};
struct __attribute__ (( packed )) xvidc_cea861_hdmi_hf_vendor_specific_data_block {
struct xvidc_cea861_data_block_header header;
u8 ieee_registration_id[3]; /* LSB */
u8 version;
u8 max_tmds_char_rate;
unsigned osd_disparity_3d : 1;
unsigned dual_view_3d : 1;
unsigned independent_view_3d : 1;
unsigned lte_340mcsc_scramble : 1;
unsigned : 2;
unsigned rr_capable : 1;
unsigned scdc_present : 1;
unsigned dc_30bit_yuv420 : 1;
unsigned dc_36bit_yuv420 : 1;
unsigned dc_48bit_yuv420 : 1;
u8 reserved[];
};
#endif