128ba7809SMichael Neumann /* 228ba7809SMichael Neumann * Copyright (C) 2012 Avionic Design GmbH 328ba7809SMichael Neumann * 428ba7809SMichael Neumann * Permission is hereby granted, free of charge, to any person obtaining a 528ba7809SMichael Neumann * copy of this software and associated documentation files (the "Software"), 628ba7809SMichael Neumann * to deal in the Software without restriction, including without limitation 728ba7809SMichael Neumann * the rights to use, copy, modify, merge, publish, distribute, sub license, 828ba7809SMichael Neumann * and/or sell copies of the Software, and to permit persons to whom the 928ba7809SMichael Neumann * Software is furnished to do so, subject to the following conditions: 1028ba7809SMichael Neumann * 1128ba7809SMichael Neumann * The above copyright notice and this permission notice (including the 1228ba7809SMichael Neumann * next paragraph) shall be included in all copies or substantial portions 1328ba7809SMichael Neumann * of the Software. 1428ba7809SMichael Neumann * 1528ba7809SMichael Neumann * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1628ba7809SMichael Neumann * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1728ba7809SMichael Neumann * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 1828ba7809SMichael Neumann * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1928ba7809SMichael Neumann * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2028ba7809SMichael Neumann * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2128ba7809SMichael Neumann * DEALINGS IN THE SOFTWARE. 2228ba7809SMichael Neumann */ 2328ba7809SMichael Neumann 2428ba7809SMichael Neumann #ifndef __LINUX_HDMI_H_ 2528ba7809SMichael Neumann #define __LINUX_HDMI_H_ 2628ba7809SMichael Neumann 2728ba7809SMichael Neumann #include <linux/types.h> 2828ba7809SMichael Neumann #include <linux/device.h> 2928ba7809SMichael Neumann 3028ba7809SMichael Neumann enum hdmi_infoframe_type { 3128ba7809SMichael Neumann HDMI_INFOFRAME_TYPE_VENDOR = 0x81, 3228ba7809SMichael Neumann HDMI_INFOFRAME_TYPE_AVI = 0x82, 3328ba7809SMichael Neumann HDMI_INFOFRAME_TYPE_SPD = 0x83, 3428ba7809SMichael Neumann HDMI_INFOFRAME_TYPE_AUDIO = 0x84, 3528ba7809SMichael Neumann }; 3628ba7809SMichael Neumann 3728ba7809SMichael Neumann #define HDMI_IEEE_OUI 0x000c03 38a85cb24fSFrançois Tigeot #define HDMI_FORUM_IEEE_OUI 0xc45dd8 3928ba7809SMichael Neumann #define HDMI_INFOFRAME_HEADER_SIZE 4 4028ba7809SMichael Neumann #define HDMI_AVI_INFOFRAME_SIZE 13 4128ba7809SMichael Neumann #define HDMI_SPD_INFOFRAME_SIZE 25 4228ba7809SMichael Neumann #define HDMI_AUDIO_INFOFRAME_SIZE 10 4328ba7809SMichael Neumann 4428ba7809SMichael Neumann #define HDMI_INFOFRAME_SIZE(type) \ 4528ba7809SMichael Neumann (HDMI_INFOFRAME_HEADER_SIZE + HDMI_ ## type ## _INFOFRAME_SIZE) 4628ba7809SMichael Neumann 4728ba7809SMichael Neumann struct hdmi_any_infoframe { 4828ba7809SMichael Neumann enum hdmi_infoframe_type type; 4928ba7809SMichael Neumann unsigned char version; 5028ba7809SMichael Neumann unsigned char length; 5128ba7809SMichael Neumann }; 5228ba7809SMichael Neumann 5328ba7809SMichael Neumann enum hdmi_colorspace { 5428ba7809SMichael Neumann HDMI_COLORSPACE_RGB, 5528ba7809SMichael Neumann HDMI_COLORSPACE_YUV422, 5628ba7809SMichael Neumann HDMI_COLORSPACE_YUV444, 5728ba7809SMichael Neumann HDMI_COLORSPACE_YUV420, 5828ba7809SMichael Neumann HDMI_COLORSPACE_RESERVED4, 5928ba7809SMichael Neumann HDMI_COLORSPACE_RESERVED5, 6028ba7809SMichael Neumann HDMI_COLORSPACE_RESERVED6, 6128ba7809SMichael Neumann HDMI_COLORSPACE_IDO_DEFINED, 6228ba7809SMichael Neumann }; 6328ba7809SMichael Neumann 6428ba7809SMichael Neumann enum hdmi_scan_mode { 6528ba7809SMichael Neumann HDMI_SCAN_MODE_NONE, 6628ba7809SMichael Neumann HDMI_SCAN_MODE_OVERSCAN, 6728ba7809SMichael Neumann HDMI_SCAN_MODE_UNDERSCAN, 6828ba7809SMichael Neumann HDMI_SCAN_MODE_RESERVED, 6928ba7809SMichael Neumann }; 7028ba7809SMichael Neumann 7128ba7809SMichael Neumann enum hdmi_colorimetry { 7228ba7809SMichael Neumann HDMI_COLORIMETRY_NONE, 7328ba7809SMichael Neumann HDMI_COLORIMETRY_ITU_601, 7428ba7809SMichael Neumann HDMI_COLORIMETRY_ITU_709, 7528ba7809SMichael Neumann HDMI_COLORIMETRY_EXTENDED, 7628ba7809SMichael Neumann }; 7728ba7809SMichael Neumann 7828ba7809SMichael Neumann enum hdmi_picture_aspect { 7928ba7809SMichael Neumann HDMI_PICTURE_ASPECT_NONE, 8028ba7809SMichael Neumann HDMI_PICTURE_ASPECT_4_3, 8128ba7809SMichael Neumann HDMI_PICTURE_ASPECT_16_9, 82*3f2dd94aSFrançois Tigeot HDMI_PICTURE_ASPECT_64_27, 83*3f2dd94aSFrançois Tigeot HDMI_PICTURE_ASPECT_256_135, 8428ba7809SMichael Neumann HDMI_PICTURE_ASPECT_RESERVED, 8528ba7809SMichael Neumann }; 8628ba7809SMichael Neumann 8728ba7809SMichael Neumann enum hdmi_active_aspect { 8828ba7809SMichael Neumann HDMI_ACTIVE_ASPECT_16_9_TOP = 2, 8928ba7809SMichael Neumann HDMI_ACTIVE_ASPECT_14_9_TOP = 3, 9028ba7809SMichael Neumann HDMI_ACTIVE_ASPECT_16_9_CENTER = 4, 9128ba7809SMichael Neumann HDMI_ACTIVE_ASPECT_PICTURE = 8, 9228ba7809SMichael Neumann HDMI_ACTIVE_ASPECT_4_3 = 9, 9328ba7809SMichael Neumann HDMI_ACTIVE_ASPECT_16_9 = 10, 9428ba7809SMichael Neumann HDMI_ACTIVE_ASPECT_14_9 = 11, 9528ba7809SMichael Neumann HDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13, 9628ba7809SMichael Neumann HDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14, 9728ba7809SMichael Neumann HDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15, 9828ba7809SMichael Neumann }; 9928ba7809SMichael Neumann 10028ba7809SMichael Neumann enum hdmi_extended_colorimetry { 10128ba7809SMichael Neumann HDMI_EXTENDED_COLORIMETRY_XV_YCC_601, 10228ba7809SMichael Neumann HDMI_EXTENDED_COLORIMETRY_XV_YCC_709, 10328ba7809SMichael Neumann HDMI_EXTENDED_COLORIMETRY_S_YCC_601, 10428ba7809SMichael Neumann HDMI_EXTENDED_COLORIMETRY_ADOBE_YCC_601, 10528ba7809SMichael Neumann HDMI_EXTENDED_COLORIMETRY_ADOBE_RGB, 10628ba7809SMichael Neumann 10728ba7809SMichael Neumann /* The following EC values are only defined in CEA-861-F. */ 10828ba7809SMichael Neumann HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM, 10928ba7809SMichael Neumann HDMI_EXTENDED_COLORIMETRY_BT2020, 11028ba7809SMichael Neumann HDMI_EXTENDED_COLORIMETRY_RESERVED, 11128ba7809SMichael Neumann }; 11228ba7809SMichael Neumann 11328ba7809SMichael Neumann enum hdmi_quantization_range { 11428ba7809SMichael Neumann HDMI_QUANTIZATION_RANGE_DEFAULT, 11528ba7809SMichael Neumann HDMI_QUANTIZATION_RANGE_LIMITED, 11628ba7809SMichael Neumann HDMI_QUANTIZATION_RANGE_FULL, 11728ba7809SMichael Neumann HDMI_QUANTIZATION_RANGE_RESERVED, 11828ba7809SMichael Neumann }; 11928ba7809SMichael Neumann 12028ba7809SMichael Neumann /* non-uniform picture scaling */ 12128ba7809SMichael Neumann enum hdmi_nups { 12228ba7809SMichael Neumann HDMI_NUPS_UNKNOWN, 12328ba7809SMichael Neumann HDMI_NUPS_HORIZONTAL, 12428ba7809SMichael Neumann HDMI_NUPS_VERTICAL, 12528ba7809SMichael Neumann HDMI_NUPS_BOTH, 12628ba7809SMichael Neumann }; 12728ba7809SMichael Neumann 12828ba7809SMichael Neumann enum hdmi_ycc_quantization_range { 12928ba7809SMichael Neumann HDMI_YCC_QUANTIZATION_RANGE_LIMITED, 13028ba7809SMichael Neumann HDMI_YCC_QUANTIZATION_RANGE_FULL, 13128ba7809SMichael Neumann }; 13228ba7809SMichael Neumann 13328ba7809SMichael Neumann enum hdmi_content_type { 13428ba7809SMichael Neumann HDMI_CONTENT_TYPE_GRAPHICS, 13528ba7809SMichael Neumann HDMI_CONTENT_TYPE_PHOTO, 13628ba7809SMichael Neumann HDMI_CONTENT_TYPE_CINEMA, 13728ba7809SMichael Neumann HDMI_CONTENT_TYPE_GAME, 13828ba7809SMichael Neumann }; 13928ba7809SMichael Neumann 14028ba7809SMichael Neumann struct hdmi_avi_infoframe { 14128ba7809SMichael Neumann enum hdmi_infoframe_type type; 14228ba7809SMichael Neumann unsigned char version; 14328ba7809SMichael Neumann unsigned char length; 14428ba7809SMichael Neumann enum hdmi_colorspace colorspace; 14528ba7809SMichael Neumann enum hdmi_scan_mode scan_mode; 14628ba7809SMichael Neumann enum hdmi_colorimetry colorimetry; 14728ba7809SMichael Neumann enum hdmi_picture_aspect picture_aspect; 14828ba7809SMichael Neumann enum hdmi_active_aspect active_aspect; 14928ba7809SMichael Neumann bool itc; 15028ba7809SMichael Neumann enum hdmi_extended_colorimetry extended_colorimetry; 15128ba7809SMichael Neumann enum hdmi_quantization_range quantization_range; 15228ba7809SMichael Neumann enum hdmi_nups nups; 15328ba7809SMichael Neumann unsigned char video_code; 15428ba7809SMichael Neumann enum hdmi_ycc_quantization_range ycc_quantization_range; 15528ba7809SMichael Neumann enum hdmi_content_type content_type; 15628ba7809SMichael Neumann unsigned char pixel_repeat; 15728ba7809SMichael Neumann unsigned short top_bar; 15828ba7809SMichael Neumann unsigned short bottom_bar; 15928ba7809SMichael Neumann unsigned short left_bar; 16028ba7809SMichael Neumann unsigned short right_bar; 16128ba7809SMichael Neumann }; 16228ba7809SMichael Neumann 16328ba7809SMichael Neumann int hdmi_avi_infoframe_init(struct hdmi_avi_infoframe *frame); 16428ba7809SMichael Neumann ssize_t hdmi_avi_infoframe_pack(struct hdmi_avi_infoframe *frame, void *buffer, 16528ba7809SMichael Neumann size_t size); 16628ba7809SMichael Neumann 16728ba7809SMichael Neumann enum hdmi_spd_sdi { 16828ba7809SMichael Neumann HDMI_SPD_SDI_UNKNOWN, 16928ba7809SMichael Neumann HDMI_SPD_SDI_DSTB, 17028ba7809SMichael Neumann HDMI_SPD_SDI_DVDP, 17128ba7809SMichael Neumann HDMI_SPD_SDI_DVHS, 17228ba7809SMichael Neumann HDMI_SPD_SDI_HDDVR, 17328ba7809SMichael Neumann HDMI_SPD_SDI_DVC, 17428ba7809SMichael Neumann HDMI_SPD_SDI_DSC, 17528ba7809SMichael Neumann HDMI_SPD_SDI_VCD, 17628ba7809SMichael Neumann HDMI_SPD_SDI_GAME, 17728ba7809SMichael Neumann HDMI_SPD_SDI_PC, 17828ba7809SMichael Neumann HDMI_SPD_SDI_BD, 17928ba7809SMichael Neumann HDMI_SPD_SDI_SACD, 18028ba7809SMichael Neumann HDMI_SPD_SDI_HDDVD, 18128ba7809SMichael Neumann HDMI_SPD_SDI_PMP, 18228ba7809SMichael Neumann }; 18328ba7809SMichael Neumann 18428ba7809SMichael Neumann struct hdmi_spd_infoframe { 18528ba7809SMichael Neumann enum hdmi_infoframe_type type; 18628ba7809SMichael Neumann unsigned char version; 18728ba7809SMichael Neumann unsigned char length; 18828ba7809SMichael Neumann char vendor[8]; 18928ba7809SMichael Neumann char product[16]; 19028ba7809SMichael Neumann enum hdmi_spd_sdi sdi; 19128ba7809SMichael Neumann }; 19228ba7809SMichael Neumann 19328ba7809SMichael Neumann int hdmi_spd_infoframe_init(struct hdmi_spd_infoframe *frame, 19428ba7809SMichael Neumann const char *vendor, const char *product); 19528ba7809SMichael Neumann ssize_t hdmi_spd_infoframe_pack(struct hdmi_spd_infoframe *frame, void *buffer, 19628ba7809SMichael Neumann size_t size); 19728ba7809SMichael Neumann 19828ba7809SMichael Neumann enum hdmi_audio_coding_type { 19928ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_STREAM, 20028ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_PCM, 20128ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_AC3, 20228ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_MPEG1, 20328ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_MP3, 20428ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_MPEG2, 20528ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_AAC_LC, 20628ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_DTS, 20728ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_ATRAC, 20828ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_DSD, 20928ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EAC3, 21028ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_DTS_HD, 21128ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_MLP, 21228ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_DST, 21328ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_WMA_PRO, 21428ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_CXT, 21528ba7809SMichael Neumann }; 21628ba7809SMichael Neumann 21728ba7809SMichael Neumann enum hdmi_audio_sample_size { 21828ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_SIZE_STREAM, 21928ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_SIZE_16, 22028ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_SIZE_20, 22128ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_SIZE_24, 22228ba7809SMichael Neumann }; 22328ba7809SMichael Neumann 22428ba7809SMichael Neumann enum hdmi_audio_sample_frequency { 22528ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM, 22628ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_FREQUENCY_32000, 22728ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_FREQUENCY_44100, 22828ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_FREQUENCY_48000, 22928ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_FREQUENCY_88200, 23028ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_FREQUENCY_96000, 23128ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_FREQUENCY_176400, 23228ba7809SMichael Neumann HDMI_AUDIO_SAMPLE_FREQUENCY_192000, 23328ba7809SMichael Neumann }; 23428ba7809SMichael Neumann 23528ba7809SMichael Neumann enum hdmi_audio_coding_type_ext { 23628ba7809SMichael Neumann /* Refer to Audio Coding Type (CT) field in Data Byte 1 */ 23728ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EXT_CT, 23828ba7809SMichael Neumann 23928ba7809SMichael Neumann /* 24028ba7809SMichael Neumann * The next three CXT values are defined in CEA-861-E only. 24128ba7809SMichael Neumann * They do not exist in older versions, and in CEA-861-F they are 24228ba7809SMichael Neumann * defined as 'Not in use'. 24328ba7809SMichael Neumann */ 24428ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC, 24528ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2, 24628ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND, 24728ba7809SMichael Neumann 24828ba7809SMichael Neumann /* The following CXT values are only defined in CEA-861-F. */ 24928ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC, 25028ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2, 25128ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC, 25228ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EXT_DRA, 25328ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND, 25428ba7809SMichael Neumann HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND = 10, 25528ba7809SMichael Neumann }; 25628ba7809SMichael Neumann 25728ba7809SMichael Neumann struct hdmi_audio_infoframe { 25828ba7809SMichael Neumann enum hdmi_infoframe_type type; 25928ba7809SMichael Neumann unsigned char version; 26028ba7809SMichael Neumann unsigned char length; 26128ba7809SMichael Neumann unsigned char channels; 26228ba7809SMichael Neumann enum hdmi_audio_coding_type coding_type; 26328ba7809SMichael Neumann enum hdmi_audio_sample_size sample_size; 26428ba7809SMichael Neumann enum hdmi_audio_sample_frequency sample_frequency; 26528ba7809SMichael Neumann enum hdmi_audio_coding_type_ext coding_type_ext; 26628ba7809SMichael Neumann unsigned char channel_allocation; 26728ba7809SMichael Neumann unsigned char level_shift_value; 26828ba7809SMichael Neumann bool downmix_inhibit; 26928ba7809SMichael Neumann 27028ba7809SMichael Neumann }; 27128ba7809SMichael Neumann 27228ba7809SMichael Neumann int hdmi_audio_infoframe_init(struct hdmi_audio_infoframe *frame); 27328ba7809SMichael Neumann ssize_t hdmi_audio_infoframe_pack(struct hdmi_audio_infoframe *frame, 27428ba7809SMichael Neumann void *buffer, size_t size); 27528ba7809SMichael Neumann 27628ba7809SMichael Neumann enum hdmi_3d_structure { 27728ba7809SMichael Neumann HDMI_3D_STRUCTURE_INVALID = -1, 27828ba7809SMichael Neumann HDMI_3D_STRUCTURE_FRAME_PACKING = 0, 27928ba7809SMichael Neumann HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE, 28028ba7809SMichael Neumann HDMI_3D_STRUCTURE_LINE_ALTERNATIVE, 28128ba7809SMichael Neumann HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL, 28228ba7809SMichael Neumann HDMI_3D_STRUCTURE_L_DEPTH, 28328ba7809SMichael Neumann HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH, 28428ba7809SMichael Neumann HDMI_3D_STRUCTURE_TOP_AND_BOTTOM, 28528ba7809SMichael Neumann HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF = 8, 28628ba7809SMichael Neumann }; 28728ba7809SMichael Neumann 28828ba7809SMichael Neumann 28928ba7809SMichael Neumann struct hdmi_vendor_infoframe { 29028ba7809SMichael Neumann enum hdmi_infoframe_type type; 29128ba7809SMichael Neumann unsigned char version; 29228ba7809SMichael Neumann unsigned char length; 29328ba7809SMichael Neumann unsigned int oui; 29428ba7809SMichael Neumann u8 vic; 29528ba7809SMichael Neumann enum hdmi_3d_structure s3d_struct; 29628ba7809SMichael Neumann unsigned int s3d_ext_data; 29728ba7809SMichael Neumann }; 29828ba7809SMichael Neumann 29928ba7809SMichael Neumann int hdmi_vendor_infoframe_init(struct hdmi_vendor_infoframe *frame); 30028ba7809SMichael Neumann ssize_t hdmi_vendor_infoframe_pack(struct hdmi_vendor_infoframe *frame, 30128ba7809SMichael Neumann void *buffer, size_t size); 30228ba7809SMichael Neumann 30328ba7809SMichael Neumann union hdmi_vendor_any_infoframe { 30428ba7809SMichael Neumann struct { 30528ba7809SMichael Neumann enum hdmi_infoframe_type type; 30628ba7809SMichael Neumann unsigned char version; 30728ba7809SMichael Neumann unsigned char length; 30828ba7809SMichael Neumann unsigned int oui; 30928ba7809SMichael Neumann } any; 31028ba7809SMichael Neumann struct hdmi_vendor_infoframe hdmi; 31128ba7809SMichael Neumann }; 31228ba7809SMichael Neumann 31328ba7809SMichael Neumann /** 31428ba7809SMichael Neumann * union hdmi_infoframe - overall union of all abstract infoframe representations 31528ba7809SMichael Neumann * @any: generic infoframe 31628ba7809SMichael Neumann * @avi: avi infoframe 31728ba7809SMichael Neumann * @spd: spd infoframe 31828ba7809SMichael Neumann * @vendor: union of all vendor infoframes 31928ba7809SMichael Neumann * @audio: audio infoframe 32028ba7809SMichael Neumann * 32128ba7809SMichael Neumann * This is used by the generic pack function. This works since all infoframes 32228ba7809SMichael Neumann * have the same header which also indicates which type of infoframe should be 32328ba7809SMichael Neumann * packed. 32428ba7809SMichael Neumann */ 32528ba7809SMichael Neumann union hdmi_infoframe { 32628ba7809SMichael Neumann struct hdmi_any_infoframe any; 32728ba7809SMichael Neumann struct hdmi_avi_infoframe avi; 32828ba7809SMichael Neumann struct hdmi_spd_infoframe spd; 32928ba7809SMichael Neumann union hdmi_vendor_any_infoframe vendor; 33028ba7809SMichael Neumann struct hdmi_audio_infoframe audio; 33128ba7809SMichael Neumann }; 33228ba7809SMichael Neumann 33328ba7809SMichael Neumann ssize_t 33428ba7809SMichael Neumann hdmi_infoframe_pack(union hdmi_infoframe *frame, void *buffer, size_t size); 33528ba7809SMichael Neumann int hdmi_infoframe_unpack(union hdmi_infoframe *frame, void *buffer); 33628ba7809SMichael Neumann void hdmi_infoframe_log(const char *level, struct device *dev, 33728ba7809SMichael Neumann union hdmi_infoframe *frame); 33828ba7809SMichael Neumann 33928ba7809SMichael Neumann #endif /* _DRM_HDMI_H */ 340