]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/display: Move HDMI helpers into display-helper module
authorThomas Zimmermann <tzimmermann@suse.de>
Thu, 21 Apr 2022 07:31:07 +0000 (09:31 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 25 Apr 2022 09:19:36 +0000 (11:19 +0200)
Move DRM's HMDI helpers into the display/ subdirectoy and add it
to DRM's display helpers. Update all affected drivers. No functional
changes.

The HDMI helpers were implemented in the EDID and connector code, but
are actually unrelated. With the move to the display-helper library, we
can remove the dependency on drm_edid.{c,h} in some driver's HDMI source
files.

Several of the HDMI helpers remain in EDID code because both share parts
of their implementation internally. With better refractoring of the EDID
code, those HDMI helpers could be moved into the display-helper library
as well.

v3:
* fix Kconfig dependencies (Javier)
v2:
* reduce HDMI helpers to avoid exporting functions (Jani)
* fix include statements (Jani, Javier)
* update Kconfig symbols

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220421073108.19226-8-tzimmermann@suse.de
19 files changed:
drivers/gpu/drm/Kconfig
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/bridge/synopsys/Kconfig
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
drivers/gpu/drm/display/Kconfig
drivers/gpu/drm/display/Makefile
drivers/gpu/drm/display/drm_hdmi_helper.c [new file with mode: 0644]
drivers/gpu/drm/drm_connector.c
drivers/gpu/drm/drm_edid.c
drivers/gpu/drm/i915/Kconfig
drivers/gpu/drm/i915/display/intel_dp.c
drivers/gpu/drm/i915/display/intel_hdmi.c
drivers/gpu/drm/i915/display/intel_lspcon.c
drivers/gpu/drm/i915/display/intel_sdvo.c
drivers/gpu/drm/vc4/Kconfig
drivers/gpu/drm/vc4/vc4_hdmi.c
include/drm/display/drm_hdmi_helper.h [new file with mode: 0644]
include/drm/drm_connector.h
include/drm/drm_edid.h

index 353f9427f3c35f93b446d5f053e8bfb25334168b..e88c497fa0106104673bd556a68b29baa6039ef3 100644 (file)
@@ -246,6 +246,7 @@ config DRM_AMDGPU
        depends on DRM && PCI && MMU
        select FW_LOADER
        select DRM_DISPLAY_DP_HELPER
+       select DRM_DISPLAY_HDMI_HELPER
        select DRM_DISPLAY_HELPER
        select DRM_KMS_HELPER
        select DRM_SCHED
index e3130b4af540fc95c8357968aa6a7d698d70ec81..2ade82cfb1ac86a1914ac4cef75382d7c9f76c22 100644 (file)
@@ -74,6 +74,7 @@
 #include <linux/component.h>
 
 #include <drm/display/drm_dp_mst_helper.h>
+#include <drm/display/drm_hdmi_helper.h>
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_uapi.h>
 #include <drm/drm_atomic_helper.h>
index a4a31b669b65a16c367b5aeafad5336b26662310..15fc182d05ef02e65541542610964ae028687491 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0-only
 config DRM_DW_HDMI
        tristate
+       select DRM_DISPLAY_HDMI_HELPER
+       select DRM_DISPLAY_HELPER
        select DRM_KMS_HELPER
        select REGMAP_MMIO
        select CEC_CORE if CEC_NOTIFIER
index f3f82a04c25283e236adf008fb811d23a2087bbd..9ddab6c0981498c9d900ebdddcbb03cd8904436d 100644 (file)
 #include <uapi/linux/videodev2.h>
 
 #include <drm/bridge/dw_hdmi.h>
+#include <drm/display/drm_hdmi_helper.h>
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_bridge.h>
-#include <drm/drm_edid.h>
 #include <drm/drm_of.h>
 #include <drm/drm_print.h>
 #include <drm/drm_probe_helper.h>
index 4406af5cc8bbd930bb90753854ac5b464d059baa..f84f1b0cd23f3d8963012143bebbfb9228091fae 100644 (file)
@@ -23,6 +23,12 @@ config DRM_DISPLAY_HDCP_HELPER
        help
          DRM display helpers for HDCP.
 
+config DRM_DISPLAY_HDMI_HELPER
+       bool
+       depends on DRM_DISPLAY_HELPER
+       help
+         DRM display helpers for HDMI.
+
 config DRM_DP_AUX_CHARDEV
        bool "DRM DP AUX Interface"
        depends on DRM
index abeb5ad8c35158918d5e7d5eeff73de09716f8af..db644e7a550da7486eba225c4d35fdad7b18a8ba 100644 (file)
@@ -8,6 +8,7 @@ drm_display_helper-$(CONFIG_DRM_DISPLAY_DP_HELPER) += drm_dp_dual_mode_helper.o
                                                      drm_dp_mst_topology.o \
                                                      drm_dsc_helper.o
 drm_display_helper-$(CONFIG_DRM_DISPLAY_HDCP_HELPER) += drm_hdcp_helper.o
+drm_display_helper-$(CONFIG_DRM_DISPLAY_HDMI_HELPER) += drm_hdmi_helper.o
 drm_display_helper-$(CONFIG_DRM_DP_AUX_CHARDEV) += drm_dp_aux_dev.o
 drm_display_helper-$(CONFIG_DRM_DP_CEC) += drm_dp_cec.o
 
diff --git a/drivers/gpu/drm/display/drm_hdmi_helper.c b/drivers/gpu/drm/display/drm_hdmi_helper.c
new file mode 100644 (file)
index 0000000..0264abe
--- /dev/null
@@ -0,0 +1,199 @@
+// SPDX-License-Identifier: MIT
+
+#include <linux/module.h>
+
+#include <drm/display/drm_hdmi_helper.h>
+#include <drm/drm_connector.h>
+#include <drm/drm_edid.h>
+#include <drm/drm_modes.h>
+#include <drm/drm_print.h>
+#include <drm/drm_property.h>
+
+static inline bool is_eotf_supported(u8 output_eotf, u8 sink_eotf)
+{
+       return sink_eotf & BIT(output_eotf);
+}
+
+/**
+ * drm_hdmi_infoframe_set_hdr_metadata() - fill an HDMI DRM infoframe with
+ *                                         HDR metadata from userspace
+ * @frame: HDMI DRM infoframe
+ * @conn_state: Connector state containing HDR metadata
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
+int drm_hdmi_infoframe_set_hdr_metadata(struct hdmi_drm_infoframe *frame,
+                                       const struct drm_connector_state *conn_state)
+{
+       struct drm_connector *connector;
+       struct hdr_output_metadata *hdr_metadata;
+       int err;
+
+       if (!frame || !conn_state)
+               return -EINVAL;
+
+       connector = conn_state->connector;
+
+       if (!conn_state->hdr_output_metadata)
+               return -EINVAL;
+
+       hdr_metadata = conn_state->hdr_output_metadata->data;
+
+       if (!hdr_metadata || !connector)
+               return -EINVAL;
+
+       /* Sink EOTF is Bit map while infoframe is absolute values */
+       if (!is_eotf_supported(hdr_metadata->hdmi_metadata_type1.eotf,
+           connector->hdr_sink_metadata.hdmi_type1.eotf)) {
+               DRM_DEBUG_KMS("EOTF Not Supported\n");
+               return -EINVAL;
+       }
+
+       err = hdmi_drm_infoframe_init(frame);
+       if (err < 0)
+               return err;
+
+       frame->eotf = hdr_metadata->hdmi_metadata_type1.eotf;
+       frame->metadata_type = hdr_metadata->hdmi_metadata_type1.metadata_type;
+
+       BUILD_BUG_ON(sizeof(frame->display_primaries) !=
+                    sizeof(hdr_metadata->hdmi_metadata_type1.display_primaries));
+       BUILD_BUG_ON(sizeof(frame->white_point) !=
+                    sizeof(hdr_metadata->hdmi_metadata_type1.white_point));
+
+       memcpy(&frame->display_primaries,
+              &hdr_metadata->hdmi_metadata_type1.display_primaries,
+              sizeof(frame->display_primaries));
+
+       memcpy(&frame->white_point,
+              &hdr_metadata->hdmi_metadata_type1.white_point,
+              sizeof(frame->white_point));
+
+       frame->max_display_mastering_luminance =
+               hdr_metadata->hdmi_metadata_type1.max_display_mastering_luminance;
+       frame->min_display_mastering_luminance =
+               hdr_metadata->hdmi_metadata_type1.min_display_mastering_luminance;
+       frame->max_fall = hdr_metadata->hdmi_metadata_type1.max_fall;
+       frame->max_cll = hdr_metadata->hdmi_metadata_type1.max_cll;
+
+       return 0;
+}
+EXPORT_SYMBOL(drm_hdmi_infoframe_set_hdr_metadata);
+
+/* HDMI Colorspace Spec Definitions */
+#define FULL_COLORIMETRY_MASK          0x1FF
+#define NORMAL_COLORIMETRY_MASK                0x3
+#define EXTENDED_COLORIMETRY_MASK      0x7
+#define EXTENDED_ACE_COLORIMETRY_MASK  0xF
+
+#define C(x) ((x) << 0)
+#define EC(x) ((x) << 2)
+#define ACE(x) ((x) << 5)
+
+#define HDMI_COLORIMETRY_NO_DATA               0x0
+#define HDMI_COLORIMETRY_SMPTE_170M_YCC                (C(1) | EC(0) | ACE(0))
+#define HDMI_COLORIMETRY_BT709_YCC             (C(2) | EC(0) | ACE(0))
+#define HDMI_COLORIMETRY_XVYCC_601             (C(3) | EC(0) | ACE(0))
+#define HDMI_COLORIMETRY_XVYCC_709             (C(3) | EC(1) | ACE(0))
+#define HDMI_COLORIMETRY_SYCC_601              (C(3) | EC(2) | ACE(0))
+#define HDMI_COLORIMETRY_OPYCC_601             (C(3) | EC(3) | ACE(0))
+#define HDMI_COLORIMETRY_OPRGB                 (C(3) | EC(4) | ACE(0))
+#define HDMI_COLORIMETRY_BT2020_CYCC           (C(3) | EC(5) | ACE(0))
+#define HDMI_COLORIMETRY_BT2020_RGB            (C(3) | EC(6) | ACE(0))
+#define HDMI_COLORIMETRY_BT2020_YCC            (C(3) | EC(6) | ACE(0))
+#define HDMI_COLORIMETRY_DCI_P3_RGB_D65                (C(3) | EC(7) | ACE(0))
+#define HDMI_COLORIMETRY_DCI_P3_RGB_THEATER    (C(3) | EC(7) | ACE(1))
+
+static const u32 hdmi_colorimetry_val[] = {
+       [DRM_MODE_COLORIMETRY_NO_DATA] = HDMI_COLORIMETRY_NO_DATA,
+       [DRM_MODE_COLORIMETRY_SMPTE_170M_YCC] = HDMI_COLORIMETRY_SMPTE_170M_YCC,
+       [DRM_MODE_COLORIMETRY_BT709_YCC] = HDMI_COLORIMETRY_BT709_YCC,
+       [DRM_MODE_COLORIMETRY_XVYCC_601] = HDMI_COLORIMETRY_XVYCC_601,
+       [DRM_MODE_COLORIMETRY_XVYCC_709] = HDMI_COLORIMETRY_XVYCC_709,
+       [DRM_MODE_COLORIMETRY_SYCC_601] = HDMI_COLORIMETRY_SYCC_601,
+       [DRM_MODE_COLORIMETRY_OPYCC_601] = HDMI_COLORIMETRY_OPYCC_601,
+       [DRM_MODE_COLORIMETRY_OPRGB] = HDMI_COLORIMETRY_OPRGB,
+       [DRM_MODE_COLORIMETRY_BT2020_CYCC] = HDMI_COLORIMETRY_BT2020_CYCC,
+       [DRM_MODE_COLORIMETRY_BT2020_RGB] = HDMI_COLORIMETRY_BT2020_RGB,
+       [DRM_MODE_COLORIMETRY_BT2020_YCC] = HDMI_COLORIMETRY_BT2020_YCC,
+};
+
+#undef C
+#undef EC
+#undef ACE
+
+/**
+ * drm_hdmi_avi_infoframe_colorimetry() - fill the HDMI AVI infoframe
+ *                                       colorimetry information
+ * @frame: HDMI AVI infoframe
+ * @conn_state: connector state
+ */
+void drm_hdmi_avi_infoframe_colorimetry(struct hdmi_avi_infoframe *frame,
+                                       const struct drm_connector_state *conn_state)
+{
+       u32 colorimetry_val;
+       u32 colorimetry_index = conn_state->colorspace & FULL_COLORIMETRY_MASK;
+
+       if (colorimetry_index >= ARRAY_SIZE(hdmi_colorimetry_val))
+               colorimetry_val = HDMI_COLORIMETRY_NO_DATA;
+       else
+               colorimetry_val = hdmi_colorimetry_val[colorimetry_index];
+
+       frame->colorimetry = colorimetry_val & NORMAL_COLORIMETRY_MASK;
+       /*
+        * ToDo: Extend it for ACE formats as well. Modify the infoframe
+        * structure and extend it in drivers/video/hdmi
+        */
+       frame->extended_colorimetry = (colorimetry_val >> 2) &
+                                       EXTENDED_COLORIMETRY_MASK;
+}
+EXPORT_SYMBOL(drm_hdmi_avi_infoframe_colorimetry);
+
+/**
+ * drm_hdmi_avi_infoframe_bars() - fill the HDMI AVI infoframe
+ *                                 bar information
+ * @frame: HDMI AVI infoframe
+ * @conn_state: connector state
+ */
+void drm_hdmi_avi_infoframe_bars(struct hdmi_avi_infoframe *frame,
+                                const struct drm_connector_state *conn_state)
+{
+       frame->right_bar = conn_state->tv.margins.right;
+       frame->left_bar = conn_state->tv.margins.left;
+       frame->top_bar = conn_state->tv.margins.top;
+       frame->bottom_bar = conn_state->tv.margins.bottom;
+}
+EXPORT_SYMBOL(drm_hdmi_avi_infoframe_bars);
+
+/**
+ * drm_hdmi_avi_infoframe_content_type() - fill the HDMI AVI infoframe
+ *                                         content type information, based
+ *                                         on correspondent DRM property.
+ * @frame: HDMI AVI infoframe
+ * @conn_state: DRM display connector state
+ *
+ */
+void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame,
+                                        const struct drm_connector_state *conn_state)
+{
+       switch (conn_state->content_type) {
+       case DRM_MODE_CONTENT_TYPE_GRAPHICS:
+               frame->content_type = HDMI_CONTENT_TYPE_GRAPHICS;
+               break;
+       case DRM_MODE_CONTENT_TYPE_CINEMA:
+               frame->content_type = HDMI_CONTENT_TYPE_CINEMA;
+               break;
+       case DRM_MODE_CONTENT_TYPE_GAME:
+               frame->content_type = HDMI_CONTENT_TYPE_GAME;
+               break;
+       case DRM_MODE_CONTENT_TYPE_PHOTO:
+               frame->content_type = HDMI_CONTENT_TYPE_PHOTO;
+               break;
+       default:
+               /* Graphics is the default(0) */
+               frame->content_type = HDMI_CONTENT_TYPE_GRAPHICS;
+       }
+
+       frame->itc = conn_state->content_type != DRM_MODE_CONTENT_TYPE_NO_DATA;
+}
+EXPORT_SYMBOL(drm_hdmi_avi_infoframe_content_type);
index 76a8c707c34b948168b5a8b7827c53a7006f2984..1c48d162c77e31a534f281e61c6067a52a490ee1 100644 (file)
@@ -1486,40 +1486,6 @@ int drm_connector_attach_content_type_property(struct drm_connector *connector)
 }
 EXPORT_SYMBOL(drm_connector_attach_content_type_property);
 
-
-/**
- * drm_hdmi_avi_infoframe_content_type() - fill the HDMI AVI infoframe
- *                                         content type information, based
- *                                         on correspondent DRM property.
- * @frame: HDMI AVI infoframe
- * @conn_state: DRM display connector state
- *
- */
-void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame,
-                                        const struct drm_connector_state *conn_state)
-{
-       switch (conn_state->content_type) {
-       case DRM_MODE_CONTENT_TYPE_GRAPHICS:
-               frame->content_type = HDMI_CONTENT_TYPE_GRAPHICS;
-               break;
-       case DRM_MODE_CONTENT_TYPE_CINEMA:
-               frame->content_type = HDMI_CONTENT_TYPE_CINEMA;
-               break;
-       case DRM_MODE_CONTENT_TYPE_GAME:
-               frame->content_type = HDMI_CONTENT_TYPE_GAME;
-               break;
-       case DRM_MODE_CONTENT_TYPE_PHOTO:
-               frame->content_type = HDMI_CONTENT_TYPE_PHOTO;
-               break;
-       default:
-               /* Graphics is the default(0) */
-               frame->content_type = HDMI_CONTENT_TYPE_GRAPHICS;
-       }
-
-       frame->itc = conn_state->content_type != DRM_MODE_CONTENT_TYPE_NO_DATA;
-}
-EXPORT_SYMBOL(drm_hdmi_avi_infoframe_content_type);
-
 /**
  * drm_connector_attach_tv_margin_properties - attach TV connector margin
  *     properties
index 324ce8467915fc1eab3614122eafb95e6dda5361..8d5f0cbbf0b4b3c01dd829b32c2f45ec87738426 100644 (file)
@@ -5883,78 +5883,6 @@ static bool is_hdmi2_sink(const struct drm_connector *connector)
                connector->display_info.color_formats & DRM_COLOR_FORMAT_YCBCR420;
 }
 
-static inline bool is_eotf_supported(u8 output_eotf, u8 sink_eotf)
-{
-       return sink_eotf & BIT(output_eotf);
-}
-
-/**
- * drm_hdmi_infoframe_set_hdr_metadata() - fill an HDMI DRM infoframe with
- *                                         HDR metadata from userspace
- * @frame: HDMI DRM infoframe
- * @conn_state: Connector state containing HDR metadata
- *
- * Return: 0 on success or a negative error code on failure.
- */
-int
-drm_hdmi_infoframe_set_hdr_metadata(struct hdmi_drm_infoframe *frame,
-                                   const struct drm_connector_state *conn_state)
-{
-       struct drm_connector *connector;
-       struct hdr_output_metadata *hdr_metadata;
-       int err;
-
-       if (!frame || !conn_state)
-               return -EINVAL;
-
-       connector = conn_state->connector;
-
-       if (!conn_state->hdr_output_metadata)
-               return -EINVAL;
-
-       hdr_metadata = conn_state->hdr_output_metadata->data;
-
-       if (!hdr_metadata || !connector)
-               return -EINVAL;
-
-       /* Sink EOTF is Bit map while infoframe is absolute values */
-       if (!is_eotf_supported(hdr_metadata->hdmi_metadata_type1.eotf,
-           connector->hdr_sink_metadata.hdmi_type1.eotf)) {
-               DRM_DEBUG_KMS("EOTF Not Supported\n");
-               return -EINVAL;
-       }
-
-       err = hdmi_drm_infoframe_init(frame);
-       if (err < 0)
-               return err;
-
-       frame->eotf = hdr_metadata->hdmi_metadata_type1.eotf;
-       frame->metadata_type = hdr_metadata->hdmi_metadata_type1.metadata_type;
-
-       BUILD_BUG_ON(sizeof(frame->display_primaries) !=
-                    sizeof(hdr_metadata->hdmi_metadata_type1.display_primaries));
-       BUILD_BUG_ON(sizeof(frame->white_point) !=
-                    sizeof(hdr_metadata->hdmi_metadata_type1.white_point));
-
-       memcpy(&frame->display_primaries,
-              &hdr_metadata->hdmi_metadata_type1.display_primaries,
-              sizeof(frame->display_primaries));
-
-       memcpy(&frame->white_point,
-              &hdr_metadata->hdmi_metadata_type1.white_point,
-              sizeof(frame->white_point));
-
-       frame->max_display_mastering_luminance =
-               hdr_metadata->hdmi_metadata_type1.max_display_mastering_luminance;
-       frame->min_display_mastering_luminance =
-               hdr_metadata->hdmi_metadata_type1.min_display_mastering_luminance;
-       frame->max_fall = hdr_metadata->hdmi_metadata_type1.max_fall;
-       frame->max_cll = hdr_metadata->hdmi_metadata_type1.max_cll;
-
-       return 0;
-}
-EXPORT_SYMBOL(drm_hdmi_infoframe_set_hdr_metadata);
-
 static u8 drm_mode_hdmi_vic(const struct drm_connector *connector,
                            const struct drm_display_mode *mode)
 {
@@ -6076,76 +6004,6 @@ drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame,
 }
 EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode);
 
-/* HDMI Colorspace Spec Definitions */
-#define FULL_COLORIMETRY_MASK          0x1FF
-#define NORMAL_COLORIMETRY_MASK                0x3
-#define EXTENDED_COLORIMETRY_MASK      0x7
-#define EXTENDED_ACE_COLORIMETRY_MASK  0xF
-
-#define C(x) ((x) << 0)
-#define EC(x) ((x) << 2)
-#define ACE(x) ((x) << 5)
-
-#define HDMI_COLORIMETRY_NO_DATA               0x0
-#define HDMI_COLORIMETRY_SMPTE_170M_YCC                (C(1) | EC(0) | ACE(0))
-#define HDMI_COLORIMETRY_BT709_YCC             (C(2) | EC(0) | ACE(0))
-#define HDMI_COLORIMETRY_XVYCC_601             (C(3) | EC(0) | ACE(0))
-#define HDMI_COLORIMETRY_XVYCC_709             (C(3) | EC(1) | ACE(0))
-#define HDMI_COLORIMETRY_SYCC_601              (C(3) | EC(2) | ACE(0))
-#define HDMI_COLORIMETRY_OPYCC_601             (C(3) | EC(3) | ACE(0))
-#define HDMI_COLORIMETRY_OPRGB                 (C(3) | EC(4) | ACE(0))
-#define HDMI_COLORIMETRY_BT2020_CYCC           (C(3) | EC(5) | ACE(0))
-#define HDMI_COLORIMETRY_BT2020_RGB            (C(3) | EC(6) | ACE(0))
-#define HDMI_COLORIMETRY_BT2020_YCC            (C(3) | EC(6) | ACE(0))
-#define HDMI_COLORIMETRY_DCI_P3_RGB_D65                (C(3) | EC(7) | ACE(0))
-#define HDMI_COLORIMETRY_DCI_P3_RGB_THEATER    (C(3) | EC(7) | ACE(1))
-
-static const u32 hdmi_colorimetry_val[] = {
-       [DRM_MODE_COLORIMETRY_NO_DATA] = HDMI_COLORIMETRY_NO_DATA,
-       [DRM_MODE_COLORIMETRY_SMPTE_170M_YCC] = HDMI_COLORIMETRY_SMPTE_170M_YCC,
-       [DRM_MODE_COLORIMETRY_BT709_YCC] = HDMI_COLORIMETRY_BT709_YCC,
-       [DRM_MODE_COLORIMETRY_XVYCC_601] = HDMI_COLORIMETRY_XVYCC_601,
-       [DRM_MODE_COLORIMETRY_XVYCC_709] = HDMI_COLORIMETRY_XVYCC_709,
-       [DRM_MODE_COLORIMETRY_SYCC_601] = HDMI_COLORIMETRY_SYCC_601,
-       [DRM_MODE_COLORIMETRY_OPYCC_601] = HDMI_COLORIMETRY_OPYCC_601,
-       [DRM_MODE_COLORIMETRY_OPRGB] = HDMI_COLORIMETRY_OPRGB,
-       [DRM_MODE_COLORIMETRY_BT2020_CYCC] = HDMI_COLORIMETRY_BT2020_CYCC,
-       [DRM_MODE_COLORIMETRY_BT2020_RGB] = HDMI_COLORIMETRY_BT2020_RGB,
-       [DRM_MODE_COLORIMETRY_BT2020_YCC] = HDMI_COLORIMETRY_BT2020_YCC,
-};
-
-#undef C
-#undef EC
-#undef ACE
-
-/**
- * drm_hdmi_avi_infoframe_colorimetry() - fill the HDMI AVI infoframe
- *                                       colorimetry information
- * @frame: HDMI AVI infoframe
- * @conn_state: connector state
- */
-void
-drm_hdmi_avi_infoframe_colorimetry(struct hdmi_avi_infoframe *frame,
-                                 const struct drm_connector_state *conn_state)
-{
-       u32 colorimetry_val;
-       u32 colorimetry_index = conn_state->colorspace & FULL_COLORIMETRY_MASK;
-
-       if (colorimetry_index >= ARRAY_SIZE(hdmi_colorimetry_val))
-               colorimetry_val = HDMI_COLORIMETRY_NO_DATA;
-       else
-               colorimetry_val = hdmi_colorimetry_val[colorimetry_index];
-
-       frame->colorimetry = colorimetry_val & NORMAL_COLORIMETRY_MASK;
-       /*
-        * ToDo: Extend it for ACE formats as well. Modify the infoframe
-        * structure and extend it in drivers/video/hdmi
-        */
-       frame->extended_colorimetry = (colorimetry_val >> 2) &
-                                       EXTENDED_COLORIMETRY_MASK;
-}
-EXPORT_SYMBOL(drm_hdmi_avi_infoframe_colorimetry);
-
 /**
  * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI infoframe
  *                                        quantization range information
@@ -6201,23 +6059,6 @@ drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame,
 }
 EXPORT_SYMBOL(drm_hdmi_avi_infoframe_quant_range);
 
-/**
- * drm_hdmi_avi_infoframe_bars() - fill the HDMI AVI infoframe
- *                                 bar information
- * @frame: HDMI AVI infoframe
- * @conn_state: connector state
- */
-void
-drm_hdmi_avi_infoframe_bars(struct hdmi_avi_infoframe *frame,
-                           const struct drm_connector_state *conn_state)
-{
-       frame->right_bar = conn_state->tv.margins.right;
-       frame->left_bar = conn_state->tv.margins.left;
-       frame->top_bar = conn_state->tv.margins.top;
-       frame->bottom_bar = conn_state->tv.margins.bottom;
-}
-EXPORT_SYMBOL(drm_hdmi_avi_infoframe_bars);
-
 static enum hdmi_3d_structure
 s3d_structure_from_display_mode(const struct drm_display_mode *mode)
 {
index a78d82cccbffb6ac3476820554a56a99dd48508d..06911f783f56fe4acd34e3b174946c7ddc3217d0 100644 (file)
@@ -12,6 +12,7 @@ config DRM_I915
        select TMPFS
        select DRM_DISPLAY_DP_HELPER
        select DRM_DISPLAY_HDCP_HELPER
+       select DRM_DISPLAY_HDMI_HELPER
        select DRM_DISPLAY_HELPER
        select DRM_KMS_HELPER
        select DRM_PANEL
index 8c0fe4d53806d4b9f1b3bcd861b1dfa909a9a6f6..e4a79c11fd2555dc2f8abbeecac4cf0d0dc40551 100644 (file)
@@ -37,9 +37,9 @@
 
 #include <drm/display/drm_dp_helper.h>
 #include <drm/display/drm_dsc_helper.h>
+#include <drm/display/drm_hdmi_helper.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
-#include <drm/drm_edid.h>
 #include <drm/drm_probe_helper.h>
 
 #include "g4x_dp.h"
index c713cebc63fefca1f64392c0958c5ccc61969b7f..ce47ae5bab20bc01ab0babb65c8564c189ddd311 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/string_helpers.h>
 
 #include <drm/display/drm_hdcp_helper.h>
+#include <drm/display/drm_hdmi_helper.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_edid.h>
index be0b1010b304e7da1a14bb675b5c82066cdb14dd..7fbc8031a5aaf03a789636098065f6b713fdd14b 100644 (file)
@@ -24,8 +24,8 @@
  */
 
 #include <drm/display/drm_dp_dual_mode_helper.h>
+#include <drm/display/drm_hdmi_helper.h>
 #include <drm/drm_atomic_helper.h>
-#include <drm/drm_edid.h>
 
 #include "intel_de.h"
 #include "intel_display_types.h"
index ab88d8b783e6a43d1e772619eadcacd11369babc..d81855d57cdc9e31e39bd727723694f33f91fab0 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/i2c.h>
 #include <linux/slab.h>
 
+#include <drm/display/drm_hdmi_helper.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_edid.h>
index de3424fed2fc7cc1fb88073b039eb8affcddec7b..1eef1849cf546e51f6275ffccc971ef87c503614 100644 (file)
@@ -5,6 +5,8 @@ config DRM_VC4
        depends on DRM
        depends on SND && SND_SOC
        depends on COMMON_CLK
+       select DRM_DISPLAY_HDMI_HELPER
+       select DRM_DISPLAY_HELPER
        select DRM_KMS_HELPER
        select DRM_GEM_CMA_HELPER
        select DRM_PANEL_BRIDGE
index 2f21202acc274a2582d21189d105bb96cc4ba7b5..650b555e7d367c704b9e212b2426cd1ced9102a9 100644 (file)
@@ -31,8 +31,8 @@
  * encoder block has CEC support.
  */
 
+#include <drm/display/drm_hdmi_helper.h>
 #include <drm/drm_atomic_helper.h>
-#include <drm/drm_edid.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_simple_kms_helper.h>
 #include <drm/drm_scdc_helper.h>
diff --git a/include/drm/display/drm_hdmi_helper.h b/include/drm/display/drm_hdmi_helper.h
new file mode 100644 (file)
index 0000000..76d2348
--- /dev/null
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: MIT */
+
+#ifndef DRM_HDMI_HELPER
+#define DRM_HDMI_HELPER
+
+#include <linux/hdmi.h>
+
+struct drm_connector;
+struct drm_connector_state;
+struct drm_display_mode;
+
+void
+drm_hdmi_avi_infoframe_colorimetry(struct hdmi_avi_infoframe *frame,
+                                  const struct drm_connector_state *conn_state);
+
+void
+drm_hdmi_avi_infoframe_bars(struct hdmi_avi_infoframe *frame,
+                           const struct drm_connector_state *conn_state);
+
+int
+drm_hdmi_infoframe_set_hdr_metadata(struct hdmi_drm_infoframe *frame,
+                                   const struct drm_connector_state *conn_state);
+
+void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame,
+                                        const struct drm_connector_state *conn_state);
+
+#endif
index 5166186146f432a236173af8b5caf4361e4e87e7..3ac4bf87f2571c4c6581e6d2c1c7d6b789b8b66e 100644 (file)
@@ -1784,9 +1784,6 @@ int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
 int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector);
 int drm_mode_create_dp_colorspace_property(struct drm_connector *connector);
 int drm_mode_create_content_type_property(struct drm_device *dev);
-void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame,
-                                        const struct drm_connector_state *conn_state);
-
 int drm_mode_create_suggested_offset_properties(struct drm_device *dev);
 
 int drm_connector_set_path_property(struct drm_connector *connector,
index b7e170584000bc115e1eb138b28a5f37245d9360..c3204a58fb09542631d006bf66bd875807d8b044 100644 (file)
@@ -400,24 +400,12 @@ drm_hdmi_vendor_infoframe_from_display_mode(struct hdmi_vendor_infoframe *frame,
                                            const struct drm_connector *connector,
                                            const struct drm_display_mode *mode);
 
-void
-drm_hdmi_avi_infoframe_colorimetry(struct hdmi_avi_infoframe *frame,
-                                  const struct drm_connector_state *conn_state);
-
-void
-drm_hdmi_avi_infoframe_bars(struct hdmi_avi_infoframe *frame,
-                           const struct drm_connector_state *conn_state);
-
 void
 drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame,
                                   const struct drm_connector *connector,
                                   const struct drm_display_mode *mode,
                                   enum hdmi_quantization_range rgb_quant_range);
 
-int
-drm_hdmi_infoframe_set_hdr_metadata(struct hdmi_drm_infoframe *frame,
-                                   const struct drm_connector_state *conn_state);
-
 /**
  * drm_eld_mnl - Get ELD monitor name length in bytes.
  * @eld: pointer to an eld memory structure with mnl set