|
@@ -1594,6 +1594,36 @@ static struct edid *drm_get_override_edid(struct drm_connector *connector)
|
|
|
return IS_ERR(override) ? NULL : override;
|
|
return IS_ERR(override) ? NULL : override;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * drm_add_override_edid_modes - add modes from override/firmware EDID
|
|
|
|
|
+ * @connector: connector we're probing
|
|
|
|
|
+ *
|
|
|
|
|
+ * Add modes from the override/firmware EDID, if available. Only to be used from
|
|
|
|
|
+ * drm_helper_probe_single_connector_modes() as a fallback for when DDC probe
|
|
|
|
|
+ * failed during drm_get_edid() and caused the override/firmware EDID to be
|
|
|
|
|
+ * skipped.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Return: The number of modes added or 0 if we couldn't find any.
|
|
|
|
|
+ */
|
|
|
|
|
+int drm_add_override_edid_modes(struct drm_connector *connector)
|
|
|
|
|
+{
|
|
|
|
|
+ struct edid *override;
|
|
|
|
|
+ int num_modes = 0;
|
|
|
|
|
+
|
|
|
|
|
+ override = drm_get_override_edid(connector);
|
|
|
|
|
+ if (override) {
|
|
|
|
|
+ drm_connector_update_edid_property(connector, override);
|
|
|
|
|
+ num_modes = drm_add_edid_modes(connector, override);
|
|
|
|
|
+ kfree(override);
|
|
|
|
|
+
|
|
|
|
|
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] adding %d modes via fallback override/firmware EDID\n",
|
|
|
|
|
+ connector->base.id, connector->name, num_modes);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return num_modes;
|
|
|
|
|
+}
|
|
|
|
|
+EXPORT_SYMBOL(drm_add_override_edid_modes);
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* drm_do_get_edid - get EDID data using a custom EDID block read function
|
|
* drm_do_get_edid - get EDID data using a custom EDID block read function
|
|
|
* @connector: connector we're probing
|
|
* @connector: connector we're probing
|