2 * Copyright (C) 2012 Avionic Design GmbH
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
9 #ifndef __LINUX_HDMI_H_
10 #define __LINUX_HDMI_H_
12 #include <linux/types.h>
14 enum hdmi_infoframe_type
{
15 HDMI_INFOFRAME_TYPE_VENDOR
= 0x81,
16 HDMI_INFOFRAME_TYPE_AVI
= 0x82,
17 HDMI_INFOFRAME_TYPE_SPD
= 0x83,
18 HDMI_INFOFRAME_TYPE_AUDIO
= 0x84,
21 #define HDMI_IEEE_OUI 0x000c03
22 #define HDMI_INFOFRAME_HEADER_SIZE 4
23 #define HDMI_AVI_INFOFRAME_SIZE 13
24 #define HDMI_SPD_INFOFRAME_SIZE 25
25 #define HDMI_AUDIO_INFOFRAME_SIZE 10
27 #define HDMI_INFOFRAME_SIZE(type) \
28 (HDMI_INFOFRAME_HEADER_SIZE + HDMI_ ## type ## _INFOFRAME_SIZE)
30 struct hdmi_any_infoframe
{
31 enum hdmi_infoframe_type type
;
32 unsigned char version
;
36 enum hdmi_colorspace
{
38 HDMI_COLORSPACE_YUV422
,
39 HDMI_COLORSPACE_YUV444
,
44 HDMI_SCAN_MODE_OVERSCAN
,
45 HDMI_SCAN_MODE_UNDERSCAN
,
48 enum hdmi_colorimetry
{
49 HDMI_COLORIMETRY_NONE
,
50 HDMI_COLORIMETRY_ITU_601
,
51 HDMI_COLORIMETRY_ITU_709
,
52 HDMI_COLORIMETRY_EXTENDED
,
55 enum hdmi_picture_aspect
{
56 HDMI_PICTURE_ASPECT_NONE
,
57 HDMI_PICTURE_ASPECT_4_3
,
58 HDMI_PICTURE_ASPECT_16_9
,
61 enum hdmi_active_aspect
{
62 HDMI_ACTIVE_ASPECT_16_9_TOP
= 2,
63 HDMI_ACTIVE_ASPECT_14_9_TOP
= 3,
64 HDMI_ACTIVE_ASPECT_16_9_CENTER
= 4,
65 HDMI_ACTIVE_ASPECT_PICTURE
= 8,
66 HDMI_ACTIVE_ASPECT_4_3
= 9,
67 HDMI_ACTIVE_ASPECT_16_9
= 10,
68 HDMI_ACTIVE_ASPECT_14_9
= 11,
69 HDMI_ACTIVE_ASPECT_4_3_SP_14_9
= 13,
70 HDMI_ACTIVE_ASPECT_16_9_SP_14_9
= 14,
71 HDMI_ACTIVE_ASPECT_16_9_SP_4_3
= 15,
74 enum hdmi_extended_colorimetry
{
75 HDMI_EXTENDED_COLORIMETRY_XV_YCC_601
,
76 HDMI_EXTENDED_COLORIMETRY_XV_YCC_709
,
77 HDMI_EXTENDED_COLORIMETRY_S_YCC_601
,
78 HDMI_EXTENDED_COLORIMETRY_ADOBE_YCC_601
,
79 HDMI_EXTENDED_COLORIMETRY_ADOBE_RGB
,
82 enum hdmi_quantization_range
{
83 HDMI_QUANTIZATION_RANGE_DEFAULT
,
84 HDMI_QUANTIZATION_RANGE_LIMITED
,
85 HDMI_QUANTIZATION_RANGE_FULL
,
88 /* non-uniform picture scaling */
96 enum hdmi_ycc_quantization_range
{
97 HDMI_YCC_QUANTIZATION_RANGE_LIMITED
,
98 HDMI_YCC_QUANTIZATION_RANGE_FULL
,
101 enum hdmi_content_type
{
102 HDMI_CONTENT_TYPE_NONE
,
103 HDMI_CONTENT_TYPE_PHOTO
,
104 HDMI_CONTENT_TYPE_CINEMA
,
105 HDMI_CONTENT_TYPE_GAME
,
108 struct hdmi_avi_infoframe
{
109 enum hdmi_infoframe_type type
;
110 unsigned char version
;
111 unsigned char length
;
112 enum hdmi_colorspace colorspace
;
113 enum hdmi_scan_mode scan_mode
;
114 enum hdmi_colorimetry colorimetry
;
115 enum hdmi_picture_aspect picture_aspect
;
116 enum hdmi_active_aspect active_aspect
;
118 enum hdmi_extended_colorimetry extended_colorimetry
;
119 enum hdmi_quantization_range quantization_range
;
121 unsigned char video_code
;
122 enum hdmi_ycc_quantization_range ycc_quantization_range
;
123 enum hdmi_content_type content_type
;
124 unsigned char pixel_repeat
;
125 unsigned short top_bar
;
126 unsigned short bottom_bar
;
127 unsigned short left_bar
;
128 unsigned short right_bar
;
131 int hdmi_avi_infoframe_init(struct hdmi_avi_infoframe
*frame
);
132 ssize_t
hdmi_avi_infoframe_pack(struct hdmi_avi_infoframe
*frame
, void *buffer
,
136 HDMI_SPD_SDI_UNKNOWN
,
152 struct hdmi_spd_infoframe
{
153 enum hdmi_infoframe_type type
;
154 unsigned char version
;
155 unsigned char length
;
158 enum hdmi_spd_sdi sdi
;
161 int hdmi_spd_infoframe_init(struct hdmi_spd_infoframe
*frame
,
162 const char *vendor
, const char *product
);
163 ssize_t
hdmi_spd_infoframe_pack(struct hdmi_spd_infoframe
*frame
, void *buffer
,
166 enum hdmi_audio_coding_type
{
167 HDMI_AUDIO_CODING_TYPE_STREAM
,
168 HDMI_AUDIO_CODING_TYPE_PCM
,
169 HDMI_AUDIO_CODING_TYPE_AC3
,
170 HDMI_AUDIO_CODING_TYPE_MPEG1
,
171 HDMI_AUDIO_CODING_TYPE_MP3
,
172 HDMI_AUDIO_CODING_TYPE_MPEG2
,
173 HDMI_AUDIO_CODING_TYPE_AAC_LC
,
174 HDMI_AUDIO_CODING_TYPE_DTS
,
175 HDMI_AUDIO_CODING_TYPE_ATRAC
,
176 HDMI_AUDIO_CODING_TYPE_DSD
,
177 HDMI_AUDIO_CODING_TYPE_EAC3
,
178 HDMI_AUDIO_CODING_TYPE_DTS_HD
,
179 HDMI_AUDIO_CODING_TYPE_MLP
,
180 HDMI_AUDIO_CODING_TYPE_DST
,
181 HDMI_AUDIO_CODING_TYPE_WMA_PRO
,
184 enum hdmi_audio_sample_size
{
185 HDMI_AUDIO_SAMPLE_SIZE_STREAM
,
186 HDMI_AUDIO_SAMPLE_SIZE_16
,
187 HDMI_AUDIO_SAMPLE_SIZE_20
,
188 HDMI_AUDIO_SAMPLE_SIZE_24
,
191 enum hdmi_audio_sample_frequency
{
192 HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM
,
193 HDMI_AUDIO_SAMPLE_FREQUENCY_32000
,
194 HDMI_AUDIO_SAMPLE_FREQUENCY_44100
,
195 HDMI_AUDIO_SAMPLE_FREQUENCY_48000
,
196 HDMI_AUDIO_SAMPLE_FREQUENCY_88200
,
197 HDMI_AUDIO_SAMPLE_FREQUENCY_96000
,
198 HDMI_AUDIO_SAMPLE_FREQUENCY_176400
,
199 HDMI_AUDIO_SAMPLE_FREQUENCY_192000
,
202 enum hdmi_audio_coding_type_ext
{
203 HDMI_AUDIO_CODING_TYPE_EXT_STREAM
,
204 HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC
,
205 HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2
,
206 HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND
,
209 struct hdmi_audio_infoframe
{
210 enum hdmi_infoframe_type type
;
211 unsigned char version
;
212 unsigned char length
;
213 unsigned char channels
;
214 enum hdmi_audio_coding_type coding_type
;
215 enum hdmi_audio_sample_size sample_size
;
216 enum hdmi_audio_sample_frequency sample_frequency
;
217 enum hdmi_audio_coding_type_ext coding_type_ext
;
218 unsigned char channel_allocation
;
219 unsigned char level_shift_value
;
220 bool downmix_inhibit
;
224 int hdmi_audio_infoframe_init(struct hdmi_audio_infoframe
*frame
);
225 ssize_t
hdmi_audio_infoframe_pack(struct hdmi_audio_infoframe
*frame
,
226 void *buffer
, size_t size
);
228 enum hdmi_3d_structure
{
229 HDMI_3D_STRUCTURE_INVALID
= -1,
230 HDMI_3D_STRUCTURE_FRAME_PACKING
= 0,
231 HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE
,
232 HDMI_3D_STRUCTURE_LINE_ALTERNATIVE
,
233 HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL
,
234 HDMI_3D_STRUCTURE_L_DEPTH
,
235 HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH
,
236 HDMI_3D_STRUCTURE_TOP_AND_BOTTOM
,
237 HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF
= 8,
241 struct hdmi_vendor_infoframe
{
242 enum hdmi_infoframe_type type
;
243 unsigned char version
;
244 unsigned char length
;
247 enum hdmi_3d_structure s3d_struct
;
248 unsigned int s3d_ext_data
;
251 int hdmi_vendor_infoframe_init(struct hdmi_vendor_infoframe
*frame
);
252 ssize_t
hdmi_vendor_infoframe_pack(struct hdmi_vendor_infoframe
*frame
,
253 void *buffer
, size_t size
);
255 union hdmi_vendor_any_infoframe
{
257 enum hdmi_infoframe_type type
;
258 unsigned char version
;
259 unsigned char length
;
262 struct hdmi_vendor_infoframe hdmi
;
265 union hdmi_infoframe
{
266 struct hdmi_any_infoframe any
;
267 struct hdmi_avi_infoframe avi
;
268 struct hdmi_spd_infoframe spd
;
269 union hdmi_vendor_any_infoframe vendor
;
270 struct hdmi_audio_infoframe audio
;
274 hdmi_infoframe_pack(union hdmi_infoframe
*frame
, void *buffer
, size_t size
);
276 #endif /* _DRM_HDMI_H */