Allow the possibility to return an copy of the injected EDID when the connector has been forced and an EDID has been specified over the debugfs interface. Signed-off-by: Marius Vlad <marius.c.vlad@xxxxxxxxx> --- drivers/gpu/drm/drm_edid.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 414d7f6..239f9b1 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -1075,6 +1075,19 @@ static bool drm_edid_is_zero(const u8 *in_edid, int length) return true; } +static struct edid * +drm_do_get_override_edid(struct drm_connector *connector) +{ + struct edid *edid = NULL; + + if (connector->override_edid && connector->edid_blob_ptr->data) { + edid = kmemdup(connector->edid_blob_ptr->data, + connector->edid_blob_ptr->length, GFP_KERNEL); + } + + return edid; +} + /** * drm_edid_block_valid - Sanity check the EDID block (base or extension) * @raw_edid: pointer to raw EDID block @@ -1385,10 +1398,14 @@ struct edid *drm_get_edid(struct drm_connector *connector, { struct edid *edid; - if (!drm_probe_ddc(adapter)) - return NULL; + if (!connector->override_edid) { + if (!drm_probe_ddc(adapter)) + return NULL; + edid = drm_do_get_edid(connector, drm_do_probe_ddc_edid, adapter); + } else { + edid = drm_do_get_override_edid(connector); + } - edid = drm_do_get_edid(connector, drm_do_probe_ddc_edid, adapter); if (edid) drm_get_displayid(connector, edid); return edid; -- 2.5.0 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel