From patchwork Thu Nov 22 10:22:56 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Egbert Eich X-Patchwork-Id: 1783281 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork1.kernel.org (Postfix) with ESMTP id 369723FCAE for ; Thu, 22 Nov 2012 10:55:31 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 27A07E5EB5 for ; Thu, 22 Nov 2012 02:55:31 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.187]) by gabe.freedesktop.org (Postfix) with ESMTP id 59525E5E07 for ; Thu, 22 Nov 2012 02:51:06 -0800 (PST) Received: from debian (p5DCF0728.dip0.t-ipconnect.de [93.207.7.40]) by mrelayeu.kundenserver.de (node=mrbap0) with ESMTP (Nemesis) id 0MZwat-1TpakB3stz-00LcZo; Thu, 22 Nov 2012 11:51:05 +0100 Received: from sles11.fritz.box (sles11.fritz.box [192.168.178.22]) by debian (Postfix) with ESMTP id 5381A3F360; Thu, 22 Nov 2012 11:51:00 +0100 (CET) From: Egbert Eich To: dri-devel@lists.freedesktop.org Subject: [PATCH v2 06/18] DRM/KMS/EDID: Don't expect extension blocks for EDID Versions < 1.3. Date: Thu, 22 Nov 2012 05:22:56 -0500 Message-Id: <1353579788-30637-7-git-send-email-eich@suse.com> X-Mailer: git-send-email 1.7.7 In-Reply-To: <1353579788-30637-1-git-send-email-eich@suse.com> References: <1353356598-10634-1-git-send-email-eich@suse.de> <1353579788-30637-1-git-send-email-eich@suse.com> X-Provags-ID: V02:K0:973juTQTtLXDMfLzOfMRigydbc+eRJ7AX3bqM1f4i0M wqQSiPClSYblm7LaV26VElex3T8eWrqckhzXYa1dV2yt1LLmfR RgCUMWveBc5GYbjfXx+oqpdr7S1E6ZRvsxEuVUKiltbG8ljjmn qPRo5TcwZHvNem4Oip40kZhSFc2xaD1umJhqo7Ua9OcN0F9mcT G+r5g3ZCCxebt+Q0PrmdyiK7jZCbYHY3N5OKYKcD3+YXqHgXy0 ylFZmkTHeXq+zX+HKSeTCu4AtuPsrYqUHEvQQ1aabcBQfLhgrn Qt0TFqMn5BDk4DGfcOdueTtN5s3d5U/6KKvgEVDFjfTaM5etHU IgzSLfK5CXRV+tsvnAoE= Cc: Egbert Eich , tiwai@suse.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org EDID extension blogs are only expected for EDIDs version 1.3 or higher. If an EDID with a lower version is found fix the block count in the extension flags and return the base block. This should help to avoid issues with older displays with broken DDC implementations. Signed-off-by: Egbert Eich --- drivers/gpu/drm/drm_edid.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 5a0e331..da2f7fa 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -45,6 +45,8 @@ #define EDID_EXTENSION_FLAG_OFFSET offsetof(struct edid, extensions) #define EDID_CHECKSUM_OFFSET offsetof(struct edid, checksum) +#define EDID_VERSION_MAJOR_OFFSET offsetof(struct edid, version) +#define EDID_VERSION_MINOR_OFFSET offsetof(struct edid, revision) /* * EDID blocks out in the wild have a variety of bugs, try to collect * them here (note that userspace may work around broken monitors first, @@ -346,6 +348,10 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter) if (block[EDID_EXTENSION_FLAG_OFFSET] == 0) return block; + /* don't expect extension blocks in EDID Versions < 1.3: return base block with correct extension flag */ + if (block[EDID_VERSION_MINOR_OFFSET] < 3) + goto done_fix_extension_count; + new = krealloc(block, (block[EDID_EXTENSION_FLAG_OFFSET] + 1) * EDID_LENGTH, GFP_KERNEL); if (!new) { dev_warn(connector->dev->dev, "%s: cannot allocate memory for %d EDID blocks: truncating.\n",