[PATCH RFC 01/25] drm/edid: Add a query for vrr range

Nicolas Frattaroli nicolas.frattaroli at collabora.com
Mon Sep 21 08:51:27 PDT 2026


From: Derek Foreman <derek.foreman at collabora.com>

Query the minimum and maximum VRR vertical rates from EDID.

Signed-off-by: Derek Foreman <derek.foreman at collabora.com>
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli at collabora.com>
---
 drivers/gpu/drm/drm_edid.c  | 26 ++++++++++++++++++++++++++
 include/drm/drm_connector.h |  3 +++
 2 files changed, 29 insertions(+)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 3148038747b6..a1494028e0f5 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -6309,6 +6309,25 @@ static void drm_parse_dsc_info(struct drm_hdmi_dsc_cap *hdmi_dsc,
 		hdmi_dsc->total_chunk_kbytes = hf_scds[13] & DRM_EDID_DSC_TOTAL_CHUNK_KBYTES;
 }
 
+static void drm_parse_vrr_info(struct drm_display_info *info, const u8 *hf_scds)
+{
+	struct drm_monitor_range_info *range = &info->monitor_range;
+	const int pld_len = cea_db_payload_len(hf_scds);
+
+	if (pld_len < 10)
+		return;
+
+	if (!range->min_vfreq)
+		range->min_vfreq = FIELD_GET(DRM_EDID_VRR_MIN_MASK, hf_scds[9]);
+
+	if (pld_len < 11)
+		return;
+
+	if (!range->max_vfreq)
+		range->max_vfreq = (FIELD_GET(DRM_EDID_VRR_MAX_UPPER_MASK, hf_scds[9]) << 8) |
+				    hf_scds[10];
+}
+
 /* Sink Capability Data Structure */
 static void drm_parse_hdmi_forum_scds(struct drm_connector *connector,
 				      const u8 *hf_scds)
@@ -6371,6 +6390,13 @@ static void drm_parse_hdmi_forum_scds(struct drm_connector *connector,
 		dsc_support = true;
 	}
 
+	drm_parse_vrr_info(info, hf_scds);
+
+	if (info->monitor_range.min_vfreq > 0)
+		hdmi->vrr_capable = true;
+	else
+		hdmi->vrr_capable = false;
+
 	drm_dbg_kms(connector->dev,
 		    "[CONNECTOR:%d:%s] HF-VSDB: max TMDS clock: %d KHz, HDMI 2.1 support: %s, DSC 1.2 support: %s\n",
 		    connector->base.id, connector->name,
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 2ee7c59329aa..593fbeaffa16 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -380,6 +380,9 @@ struct drm_hdmi_info {
 
 	/** @dsc_cap: DSC capabilities of the sink */
 	struct drm_hdmi_dsc_cap dsc_cap;
+
+	/** @vrr_capable: The sink supports variable refresh rate */
+	bool vrr_capable;
 };
 
 /**

-- 
2.55.0




More information about the linux-arm-kernel mailing list