| .. | .. |
|---|
| 27 | 27 | #include <linux/types.h> |
|---|
| 28 | 28 | #include <linux/device.h> |
|---|
| 29 | 29 | |
|---|
| 30 | +enum hdmi_packet_type { |
|---|
| 31 | + HDMI_PACKET_TYPE_NULL = 0x00, |
|---|
| 32 | + HDMI_PACKET_TYPE_AUDIO_CLOCK_REGEN = 0x01, |
|---|
| 33 | + HDMI_PACKET_TYPE_AUDIO_SAMPLE = 0x02, |
|---|
| 34 | + HDMI_PACKET_TYPE_GENERAL_CONTROL = 0x03, |
|---|
| 35 | + HDMI_PACKET_TYPE_ACP = 0x04, |
|---|
| 36 | + HDMI_PACKET_TYPE_ISRC1 = 0x05, |
|---|
| 37 | + HDMI_PACKET_TYPE_ISRC2 = 0x06, |
|---|
| 38 | + HDMI_PACKET_TYPE_ONE_BIT_AUDIO_SAMPLE = 0x07, |
|---|
| 39 | + HDMI_PACKET_TYPE_DST_AUDIO = 0x08, |
|---|
| 40 | + HDMI_PACKET_TYPE_HBR_AUDIO_STREAM = 0x09, |
|---|
| 41 | + HDMI_PACKET_TYPE_GAMUT_METADATA = 0x0a, |
|---|
| 42 | + /* + enum hdmi_infoframe_type */ |
|---|
| 43 | +}; |
|---|
| 44 | + |
|---|
| 30 | 45 | enum hdmi_infoframe_type { |
|---|
| 31 | 46 | HDMI_INFOFRAME_TYPE_VENDOR = 0x81, |
|---|
| 32 | 47 | HDMI_INFOFRAME_TYPE_AVI = 0x82, |
|---|
| .. | .. |
|---|
| 42 | 57 | #define HDMI_SPD_INFOFRAME_SIZE 25 |
|---|
| 43 | 58 | #define HDMI_AUDIO_INFOFRAME_SIZE 10 |
|---|
| 44 | 59 | #define HDMI_DRM_INFOFRAME_SIZE 26 |
|---|
| 60 | +#define HDMI_VENDOR_INFOFRAME_SIZE 4 |
|---|
| 45 | 61 | |
|---|
| 46 | 62 | #define HDMI_INFOFRAME_SIZE(type) \ |
|---|
| 47 | 63 | (HDMI_INFOFRAME_HEADER_SIZE + HDMI_ ## type ## _INFOFRAME_SIZE) |
|---|
| .. | .. |
|---|
| 192 | 208 | u16 max_fall; |
|---|
| 193 | 209 | }; |
|---|
| 194 | 210 | |
|---|
| 195 | | -int hdmi_avi_infoframe_init(struct hdmi_avi_infoframe *frame); |
|---|
| 211 | +void hdmi_avi_infoframe_init(struct hdmi_avi_infoframe *frame); |
|---|
| 196 | 212 | ssize_t hdmi_avi_infoframe_pack(struct hdmi_avi_infoframe *frame, void *buffer, |
|---|
| 197 | 213 | size_t size); |
|---|
| 198 | 214 | ssize_t hdmi_avi_infoframe_pack_only(const struct hdmi_avi_infoframe *frame, |
|---|
| .. | .. |
|---|
| 204 | 220 | ssize_t hdmi_drm_infoframe_pack_only(const struct hdmi_drm_infoframe *frame, |
|---|
| 205 | 221 | void *buffer, size_t size); |
|---|
| 206 | 222 | int hdmi_drm_infoframe_check(struct hdmi_drm_infoframe *frame); |
|---|
| 223 | +int hdmi_drm_infoframe_unpack_only(struct hdmi_drm_infoframe *frame, |
|---|
| 224 | + const void *buffer, size_t size); |
|---|
| 207 | 225 | |
|---|
| 208 | 226 | enum hdmi_spd_sdi { |
|---|
| 209 | 227 | HDMI_SPD_SDI_UNKNOWN, |
|---|
| .. | .. |
|---|
| 352 | 370 | __u16 min_cll; |
|---|
| 353 | 371 | }; |
|---|
| 354 | 372 | |
|---|
| 373 | +/** |
|---|
| 374 | + * struct hdr_sink_metadata - HDR sink metadata |
|---|
| 375 | + * |
|---|
| 376 | + * Metadata Information read from Sink's EDID |
|---|
| 377 | + */ |
|---|
| 355 | 378 | struct hdr_sink_metadata { |
|---|
| 379 | + /** |
|---|
| 380 | + * @metadata_type: Static_Metadata_Descriptor_ID. |
|---|
| 381 | + */ |
|---|
| 356 | 382 | __u32 metadata_type; |
|---|
| 383 | + /** |
|---|
| 384 | + * @hdmi_type1: HDR Metadata Infoframe. |
|---|
| 385 | + */ |
|---|
| 357 | 386 | union { |
|---|
| 358 | 387 | struct hdr_static_metadata hdmi_type1; |
|---|
| 359 | 388 | }; |
|---|
| .. | .. |
|---|
| 383 | 412 | * @spd: spd infoframe |
|---|
| 384 | 413 | * @vendor: union of all vendor infoframes |
|---|
| 385 | 414 | * @audio: audio infoframe |
|---|
| 415 | + * @drm: Dynamic Range and Mastering infoframe |
|---|
| 386 | 416 | * |
|---|
| 387 | 417 | * This is used by the generic pack function. This works since all infoframes |
|---|
| 388 | 418 | * have the same header which also indicates which type of infoframe should be |
|---|
| .. | .. |
|---|
| 405 | 435 | int hdmi_infoframe_unpack(union hdmi_infoframe *frame, |
|---|
| 406 | 436 | const void *buffer, size_t size); |
|---|
| 407 | 437 | void hdmi_infoframe_log(const char *level, struct device *dev, |
|---|
| 408 | | - union hdmi_infoframe *frame); |
|---|
| 438 | + const union hdmi_infoframe *frame); |
|---|
| 409 | 439 | |
|---|
| 410 | 440 | #endif /* _DRM_HDMI_H */ |
|---|