]> git.ipfire.org Git - thirdparty/kernel/stable.git/blobdiff - drivers/gpu/drm/drm_edid.c
drm/edid: abstract override/firmware EDID retrieval
[thirdparty/kernel/stable.git] / drivers / gpu / drm / drm_edid.c
index 649cfd8b42007cff821c2a39cca6dba391ca481c..c1952b6e57473e9bc237c58794fdd80a0333b163 100644 (file)
@@ -1570,6 +1570,20 @@ static void connector_bad_edid(struct drm_connector *connector,
        }
 }
 
+/* Get override or firmware EDID */
+static struct edid *drm_get_override_edid(struct drm_connector *connector)
+{
+       struct edid *override = NULL;
+
+       if (connector->override_edid)
+               override = drm_edid_duplicate(connector->edid_blob_ptr->data);
+
+       if (!override)
+               override = drm_load_edid_firmware(connector);
+
+       return IS_ERR(override) ? NULL : override;
+}
+
 /**
  * drm_do_get_edid - get EDID data using a custom EDID block read function
  * @connector: connector we're probing
@@ -1597,15 +1611,10 @@ struct edid *drm_do_get_edid(struct drm_connector *connector,
 {
        int i, j = 0, valid_extensions = 0;
        u8 *edid, *new;
-       struct edid *override = NULL;
-
-       if (connector->override_edid)
-               override = drm_edid_duplicate(connector->edid_blob_ptr->data);
-
-       if (!override)
-               override = drm_load_edid_firmware(connector);
+       struct edid *override;
 
-       if (!IS_ERR_OR_NULL(override))
+       override = drm_get_override_edid(connector);
+       if (override)
                return override;
 
        if ((edid = kmalloc(EDID_LENGTH, GFP_KERNEL)) == NULL)