summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChenyu Chen <chen-yu.chen@amd.com>2026-05-26 10:59:49 +0800
committerMario Limonciello <superm1@kernel.org>2026-06-29 21:16:36 -0500
commit3474028a606c67119712c90520199e0ac484c6e4 (patch)
tree84e070188c685a44bb1ac78b529da51a32250f24
parent8fca3d8dbebf8d960dad7b10db3cb4a61139454b (diff)
downloadlinux-next-3474028a606c67119712c90520199e0ac484c6e4.tar.gz
linux-next-3474028a606c67119712c90520199e0ac484c6e4.zip
drm/edid: extract base section header processing into helper
Extract the DisplayID base section header logging and non_desktop detection from update_displayid_info() into a dedicated helper, drm_displayid_process_base_section_header(). Remove the break so the iterator walks through all data blocks, preparing for future patches that will parse additional block types within the loop. The helper is called only once for the base section via a base_section_header_processed flag. Since version and primary_use are only captured from the base section, and extension sections carry a primary use of zero per spec, the non_desktop logic is unaffected. No functional change. Assisted-by: Copilot:Claude-Opus-4.6 Signed-off-by: Chenyu Chen <chen-yu.chen@amd.com> Reviewed-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org> Link: https://patch.msgid.link/20260526030254.1460480-2-chen-yu.chen@amd.com Signed-off-by: Mario Limonciello <superm1@kernel.org>
-rw-r--r--drivers/gpu/drm/drm_edid.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 404208bf23a6..aebbff8ac992 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -6715,30 +6715,35 @@ static void drm_reset_display_info(struct drm_connector *connector)
memset(&info->amd_vsdb, 0, sizeof(info->amd_vsdb));
}
+static void drm_displayid_process_base_section_header(struct drm_connector *connector,
+ const struct displayid_iter *iter)
+{
+ struct drm_display_info *info = &connector->display_info;
+
+ drm_dbg_kms(connector->dev,
+ "[CONNECTOR:%d:%s] DisplayID extension version 0x%02x, primary use 0x%02x\n",
+ connector->base.id, connector->name,
+ displayid_version(iter),
+ displayid_primary_use(iter));
+ if (displayid_version(iter) == DISPLAY_ID_STRUCTURE_VER_20 &&
+ (displayid_primary_use(iter) == PRIMARY_USE_HEAD_MOUNTED_VR ||
+ displayid_primary_use(iter) == PRIMARY_USE_HEAD_MOUNTED_AR))
+ info->non_desktop = true;
+}
+
static void update_displayid_info(struct drm_connector *connector,
const struct drm_edid *drm_edid)
{
- struct drm_display_info *info = &connector->display_info;
const struct displayid_block *block;
struct displayid_iter iter;
+ bool base_section_header_processed = false;
displayid_iter_edid_begin(drm_edid, &iter);
displayid_iter_for_each(block, &iter) {
- drm_dbg_kms(connector->dev,
- "[CONNECTOR:%d:%s] DisplayID extension version 0x%02x, primary use 0x%02x\n",
- connector->base.id, connector->name,
- displayid_version(&iter),
- displayid_primary_use(&iter));
- if (displayid_version(&iter) == DISPLAY_ID_STRUCTURE_VER_20 &&
- (displayid_primary_use(&iter) == PRIMARY_USE_HEAD_MOUNTED_VR ||
- displayid_primary_use(&iter) == PRIMARY_USE_HEAD_MOUNTED_AR))
- info->non_desktop = true;
-
- /*
- * We're only interested in the base section here, no need to
- * iterate further.
- */
- break;
+ if (!base_section_header_processed) {
+ drm_displayid_process_base_section_header(connector, &iter);
+ base_section_header_processed = true;
+ }
}
displayid_iter_end(&iter);
}