drm: Fix docbook warnings in hdr metadata helper structures
[sfrench/cifs-2.6.git] / include / linux / hdmi.h
index 927ad6451105a43397e3942860012cbcd0ad9d28..9918a6c910c55f5d03a166e301d9890013529fa8 100644 (file)
@@ -47,6 +47,7 @@ enum hdmi_infoframe_type {
        HDMI_INFOFRAME_TYPE_AVI = 0x82,
        HDMI_INFOFRAME_TYPE_SPD = 0x83,
        HDMI_INFOFRAME_TYPE_AUDIO = 0x84,
+       HDMI_INFOFRAME_TYPE_DRM = 0x87,
 };
 
 #define HDMI_IEEE_OUI 0x000c03
@@ -55,6 +56,7 @@ enum hdmi_infoframe_type {
 #define HDMI_AVI_INFOFRAME_SIZE    13
 #define HDMI_SPD_INFOFRAME_SIZE    25
 #define HDMI_AUDIO_INFOFRAME_SIZE  10
+#define HDMI_DRM_INFOFRAME_SIZE    26
 
 #define HDMI_INFOFRAME_SIZE(type)      \
        (HDMI_INFOFRAME_HEADER_SIZE + HDMI_ ## type ## _INFOFRAME_SIZE)
@@ -152,6 +154,17 @@ enum hdmi_content_type {
        HDMI_CONTENT_TYPE_GAME,
 };
 
+enum hdmi_metadata_type {
+       HDMI_STATIC_METADATA_TYPE1 = 1,
+};
+
+enum hdmi_eotf {
+       HDMI_EOTF_TRADITIONAL_GAMMA_SDR,
+       HDMI_EOTF_TRADITIONAL_GAMMA_HDR,
+       HDMI_EOTF_SMPTE_ST2084,
+       HDMI_EOTF_BT_2100_HLG,
+};
+
 struct hdmi_avi_infoframe {
        enum hdmi_infoframe_type type;
        unsigned char version;
@@ -175,12 +188,37 @@ struct hdmi_avi_infoframe {
        unsigned short right_bar;
 };
 
+/* DRM Infoframe as per CTA 861.G spec */
+struct hdmi_drm_infoframe {
+       enum hdmi_infoframe_type type;
+       unsigned char version;
+       unsigned char length;
+       enum hdmi_eotf eotf;
+       enum hdmi_metadata_type metadata_type;
+       struct {
+               u16 x, y;
+       } display_primaries[3];
+       struct {
+               u16 x, y;
+       } white_point;
+       u16 max_display_mastering_luminance;
+       u16 min_display_mastering_luminance;
+       u16 max_cll;
+       u16 max_fall;
+};
+
 int hdmi_avi_infoframe_init(struct hdmi_avi_infoframe *frame);
 ssize_t hdmi_avi_infoframe_pack(struct hdmi_avi_infoframe *frame, void *buffer,
                                size_t size);
 ssize_t hdmi_avi_infoframe_pack_only(const struct hdmi_avi_infoframe *frame,
                                     void *buffer, size_t size);
 int hdmi_avi_infoframe_check(struct hdmi_avi_infoframe *frame);
+int hdmi_drm_infoframe_init(struct hdmi_drm_infoframe *frame);
+ssize_t hdmi_drm_infoframe_pack(struct hdmi_drm_infoframe *frame, void *buffer,
+                               size_t size);
+ssize_t hdmi_drm_infoframe_pack_only(const struct hdmi_drm_infoframe *frame,
+                                    void *buffer, size_t size);
+int hdmi_drm_infoframe_check(struct hdmi_drm_infoframe *frame);
 
 enum hdmi_spd_sdi {
        HDMI_SPD_SDI_UNKNOWN,
@@ -320,6 +358,33 @@ struct hdmi_vendor_infoframe {
        unsigned int s3d_ext_data;
 };
 
+/* HDR Metadata as per 861.G spec */
+struct hdr_static_metadata {
+       __u8 eotf;
+       __u8 metadata_type;
+       __u16 max_cll;
+       __u16 max_fall;
+       __u16 min_cll;
+};
+
+/**
+ * struct hdr_sink_metadata - HDR sink metadata
+ *
+ * Metadata Information read from Sink's EDID
+ */
+struct hdr_sink_metadata {
+       /**
+        * @metadata_type: Static_Metadata_Descriptor_ID.
+        */
+       __u32 metadata_type;
+       /**
+        * @hdmi_type1: HDR Metadata Infoframe.
+        */
+       union {
+               struct hdr_static_metadata hdmi_type1;
+       };
+};
+
 int hdmi_vendor_infoframe_init(struct hdmi_vendor_infoframe *frame);
 ssize_t hdmi_vendor_infoframe_pack(struct hdmi_vendor_infoframe *frame,
                                   void *buffer, size_t size);
@@ -344,6 +409,7 @@ union hdmi_vendor_any_infoframe {
  * @spd: spd infoframe
  * @vendor: union of all vendor infoframes
  * @audio: audio infoframe
+ * @drm: Dynamic Range and Mastering infoframe
  *
  * This is used by the generic pack function. This works since all infoframes
  * have the same header which also indicates which type of infoframe should be
@@ -355,6 +421,7 @@ union hdmi_infoframe {
        struct hdmi_spd_infoframe spd;
        union hdmi_vendor_any_infoframe vendor;
        struct hdmi_audio_infoframe audio;
+       struct hdmi_drm_infoframe drm;
 };
 
 ssize_t hdmi_infoframe_pack(union hdmi_infoframe *frame, void *buffer,