When an EDID override is in effect, the physical connector may not
match reported capabilities. Adds a drm_connector flag that allows
drivers to detect such mismatches.

Signed-off-by: Johannes Wüller <[email protected]>
---
 drivers/gpu/drm/drm_edid.c  | 2 ++
 include/drm/drm_connector.h | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 26bb7710a462..9b0f410ea2de 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -2373,6 +2373,7 @@ static struct edid *_drm_do_get_edid(struct drm_connector 
*connector,
        struct edid *edid, *new;
        size_t alloc_size = EDID_LENGTH;
 
+       connector->edid_overridden = false;
        override = drm_edid_override_get(connector);
        if (override) {
                alloc_size = override->size;
@@ -2380,6 +2381,7 @@ static struct edid *_drm_do_get_edid(struct drm_connector 
*connector,
                drm_edid_free(override);
                if (!edid)
                        return NULL;
+               connector->edid_overridden = true;
                goto ok;
        }
 
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index c18be8c19de0..43d7ac31deba 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -2261,6 +2261,14 @@ struct drm_connector {
        /** @bad_edid_counter: track sinks that give us an EDID with invalid 
checksum */
        unsigned bad_edid_counter;
 
+       /**
+        * @edid_overridden: Indicates whether the last read EDID was an
+        * override (e.g. via debugfs edid_override or drm.edid_firmware kernel
+        * parameter), which can cause the physical connector to differ from
+        * the advertised capabilities.
+        */
+       bool edid_overridden;
+
        /**
         * @edid_corrupt: Indicates whether the last read EDID was corrupt. Used
         * in Displayport compliance testing - Displayport Link CTS Core 1.2
-- 
2.53.0

Reply via email to