]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/connector: move HDR sink metadata to display info
authorJani Nikula <jani.nikula@intel.com>
Mon, 19 May 2025 11:29:00 +0000 (14:29 +0300)
committerJani Nikula <jani.nikula@intel.com>
Mon, 23 Jun 2025 18:44:55 +0000 (21:44 +0300)
Information parsed from the display EDID should be stored in display
info. Move HDR sink metadata there.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20250519112900.1383997-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/display/drm_hdmi_helper.c
drivers/gpu/drm/drm_connector.c
drivers/gpu/drm/drm_edid.c
drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
include/drm/drm_connector.h

index 6063c155bdeabdac38aa7e511502065552b010dc..a237dc55805d0decf0773f3dccb71868861486c2 100644 (file)
@@ -45,7 +45,7 @@ int drm_hdmi_infoframe_set_hdr_metadata(struct hdmi_drm_infoframe *frame,
 
        /* 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))
+                              connector->display_info.hdr_sink_metadata.hdmi_type1.eotf))
                DRM_DEBUG_KMS("Unknown EOTF %d\n", hdr_metadata->hdmi_metadata_type1.eotf);
 
        err = hdmi_drm_infoframe_init(frame);
index 0167e0e0d4257747858bd96614d62f165a01cfa3..272d6254ea4784e97ca894ec4d463beebf9fdbf0 100644 (file)
@@ -1687,7 +1687,7 @@ EXPORT_SYMBOL(drm_hdmi_connector_get_output_format_name);
  *     structure from userspace. This is received as blob and stored in
  *     &drm_connector_state.hdr_output_metadata. It parses EDID and saves the
  *     sink metadata in &struct hdr_sink_metadata, as
- *     &drm_connector.hdr_sink_metadata.  Driver uses
+ *     &drm_connector.display_info.hdr_sink_metadata.  Driver uses
  *     drm_hdmi_infoframe_set_hdr_metadata() helper to set the HDR metadata,
  *     hdmi_drm_infoframe_pack() to pack the infoframe as per spec, in case of
  *     HDMI encoder.
index 4b4f27896161f14a2cd252b04ff60523bca0fca0..c21b5e570013633155fb8152504a95ae9423ef76 100644 (file)
@@ -5374,7 +5374,8 @@ static void fixup_detailed_cea_mode_clock(struct drm_connector *connector,
 
 static void drm_calculate_luminance_range(struct drm_connector *connector)
 {
-       struct hdr_static_metadata *hdr_metadata = &connector->hdr_sink_metadata.hdmi_type1;
+       const struct hdr_static_metadata *hdr_metadata =
+               &connector->display_info.hdr_sink_metadata.hdmi_type1;
        struct drm_luminance_range_info *luminance_range =
                &connector->display_info.luminance_range;
        static const u8 pre_computed_values[] = {
@@ -5435,21 +5436,21 @@ static uint8_t hdr_metadata_type(const u8 *edid_ext)
 static void
 drm_parse_hdr_metadata_block(struct drm_connector *connector, const u8 *db)
 {
+       struct hdr_static_metadata *hdr_metadata =
+               &connector->display_info.hdr_sink_metadata.hdmi_type1;
        u16 len;
 
        len = cea_db_payload_len(db);
 
-       connector->hdr_sink_metadata.hdmi_type1.eotf =
-                                               eotf_supported(db);
-       connector->hdr_sink_metadata.hdmi_type1.metadata_type =
-                                               hdr_metadata_type(db);
+       hdr_metadata->eotf = eotf_supported(db);
+       hdr_metadata->metadata_type = hdr_metadata_type(db);
 
        if (len >= 4)
-               connector->hdr_sink_metadata.hdmi_type1.max_cll = db[4];
+               hdr_metadata->max_cll = db[4];
        if (len >= 5)
-               connector->hdr_sink_metadata.hdmi_type1.max_fall = db[5];
+               hdr_metadata->max_fall = db[5];
        if (len >= 6) {
-               connector->hdr_sink_metadata.hdmi_type1.min_cll = db[6];
+               hdr_metadata->min_cll = db[6];
 
                /* Calculate only when all values are available */
                drm_calculate_luminance_range(connector);
@@ -6597,7 +6598,7 @@ static void drm_reset_display_info(struct drm_connector *connector)
        info->has_hdmi_infoframe = false;
        info->rgb_quant_range_selectable = false;
        memset(&info->hdmi, 0, sizeof(info->hdmi));
-       memset(&connector->hdr_sink_metadata, 0, sizeof(connector->hdr_sink_metadata));
+       memset(&info->hdr_sink_metadata, 0, sizeof(info->hdr_sink_metadata));
 
        info->edid_hdmi_rgb444_dc_modes = 0;
        info->edid_hdmi_ycbcr444_dc_modes = 0;
index 271b27c9de5125667d0afdf8122883c632dac588..5537136c367a3875e19d62299af5763bd64ba131 100644 (file)
@@ -145,7 +145,7 @@ intel_dp_aux_supports_hdr_backlight(struct intel_connector *connector)
         * ranges for such panels.
         */
        if (display->params.enable_dpcd_backlight != INTEL_DP_AUX_BACKLIGHT_FORCE_INTEL &&
-           !(connector->base.hdr_sink_metadata.hdmi_type1.metadata_type &
+           !(connector->base.display_info.hdr_sink_metadata.hdmi_type1.metadata_type &
              BIT(HDMI_STATIC_METADATA_TYPE1))) {
                drm_info(display->drm,
                         "[CONNECTOR:%d:%s] Panel is missing HDR static metadata. Possible support for Intel HDR backlight interface is not used. If your backlight controls don't work try booting with i915.enable_dpcd_backlight=%d.\n",
index 73903c3c842f3803e26c34abe7b5f0416f013d4e..9fdc4581dd9035b87156c347e4480ba416fce000 100644 (file)
@@ -799,6 +799,11 @@ struct drm_display_info {
         */
        struct drm_hdmi_info hdmi;
 
+       /**
+        * @hdr_sink_metadata: HDR Metadata Information read from sink
+        */
+       struct hdr_sink_metadata hdr_sink_metadata;
+
        /**
         * @non_desktop: Non desktop display (HMD).
         */
@@ -2284,9 +2289,6 @@ struct drm_connector {
         */
        struct llist_node free_node;
 
-       /** @hdr_sink_metadata: HDR Metadata Information read from sink */
-       struct hdr_sink_metadata hdr_sink_metadata;
-
        /**
         * @hdmi: HDMI-related variable and properties.
         */