From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] drm/edid: fixup EDID 1.3 and 1.4 judge reduced-blanking timings logic Date: Wed, 27 Nov 2019 12:29:11 +0200 Message-ID: <87pnhdobns.fsf@intel.com> References: <1574761572-26585-1-git-send-email-allen.chen@ite.com.tw> Mime-Version: 1.0 Content-Type: text/plain Return-path: In-Reply-To: <1574761572-26585-1-git-send-email-allen.chen@ite.com.tw> Sender: linux-kernel-owner@vger.kernel.org Cc: Jau-Chih Tseng , Maxime Ripard , Allen Chen , open list , "open list:DRM DRIVERS" , David Airlie , Pi-Hsun Shih , Sean Paul List-Id: dri-devel@lists.freedesktop.org On Tue, 26 Nov 2019, allen wrote: > According to VESA ENHANCED EXTENDED DISPLAY IDENTIFICATION DATA STANDARD > (Defines EDID Structure Version 1, Revision 4) page: 39 > How to determine whether the monitor support RB timing or not? > EDID 1.4 > First: read detailed timing descriptor and make sure byte 0 = 0x00, > byte 1 = 0x00, byte 2 = 0x00 and byte 3 = 0xFD > Second: read EDID bit 0 in feature support byte at address 18h = 1 > and detailed timing descriptor byte 10 = 0x04 > Third: if EDID bit 0 in feature support byte = 1 && > detailed timing descriptor byte 10 = 0x04 > then we can check byte 15, if bit 4 in byte 15 = 1 is support RB > if EDID bit 0 in feature support byte != 1 || > detailed timing descriptor byte 10 != 0x04, > then byte 15 can not be used > > The linux code is_rb function not follow the VESA's rule > > Signed-off-by: Allen Chen > Reported-by: kbuild test robot > --- > drivers/gpu/drm/drm_edid.c | 36 ++++++++++++++++++++++++++++++------ > 1 file changed, 30 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c > index f5926bf..e11e585 100644 > --- a/drivers/gpu/drm/drm_edid.c > +++ b/drivers/gpu/drm/drm_edid.c > @@ -93,6 +93,12 @@ struct detailed_mode_closure { > int modes; > }; > > +struct edid_support_rb_closure { > + struct edid *edid; > + bool valid_support_rb; > + bool support_rb; > +}; > + > #define LEVEL_DMT 0 > #define LEVEL_GTF 1 > #define LEVEL_GTF2 2 > @@ -2017,23 +2023,41 @@ struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, > } > } > > +static bool > +is_display_descriptor(const u8 *r, u8 tag) > +{ > + return (!r[0] && !r[1] && !r[2] && r[3] == tag) ? true : false; > +} > + > static void > is_rb(struct detailed_timing *t, void *data) > { > u8 *r = (u8 *)t; > - if (r[3] == EDID_DETAIL_MONITOR_RANGE) > - if (r[15] & 0x10) > - *(bool *)data = true; > + struct edid_support_rb_closure *closure = data; > + struct edid *edid = closure->edid; > + > + if (is_display_descriptor(r, EDID_DETAIL_MONITOR_RANGE)) { > + if (edid->features & BIT(0) && r[10] == BIT(2)) { > + closure->valid_support_rb = true; > + closure->support_rb = (r[15] & 0x10) ? true : false; > + } > + } > } > > /* EDID 1.4 defines this explicitly. For EDID 1.3, we guess, badly. */ > static bool > drm_monitor_supports_rb(struct edid *edid) > { > + struct edid_support_rb_closure closure = { > + .edid = edid, > + .valid_support_rb = false, > + .support_rb = false, > + }; > + > if (edid->revision >= 4) { > - bool ret = false; > - drm_for_each_detailed_block((u8 *)edid, is_rb, &ret); > - return ret; > + drm_for_each_detailed_block((u8 *)edid, is_rb, &closure); > + if (closure.valid_support_rb) > + return closure.support_rb; Are you planning on extending the closure use somehow? I did not look up the spec, but purely on the code changes alone, you could just move the edid->features bit check at this level, and not pass it down, and nothing would change. I.e. don't iterate the EDID at all if the bit is not set. You also don't actually use the distinction between valid_support_rb vs. support_rb for anything, so the closure just adds code. BR, Jani. > } > > return ((edid->input & DRM_EDID_INPUT_DIGITAL) != 0); -- Jani Nikula, Intel Open Source Graphics Center From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CAE46C43215 for ; Wed, 27 Nov 2019 10:29:19 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 914EE20898 for ; Wed, 27 Nov 2019 10:29:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 914EE20898 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E8C0D6E503; Wed, 27 Nov 2019 10:29:18 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id DB4636E503 for ; Wed, 27 Nov 2019 10:29:17 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Nov 2019 02:29:17 -0800 X-IronPort-AV: E=Sophos;i="5.69,249,1571727600"; d="scan'208";a="199142767" Received: from jnikula-mobl3.fi.intel.com (HELO localhost) ([10.237.66.161]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Nov 2019 02:29:13 -0800 From: Jani Nikula To: allen Subject: Re: [PATCH] drm/edid: fixup EDID 1.3 and 1.4 judge reduced-blanking timings logic In-Reply-To: <1574761572-26585-1-git-send-email-allen.chen@ite.com.tw> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <1574761572-26585-1-git-send-email-allen.chen@ite.com.tw> Date: Wed, 27 Nov 2019 12:29:11 +0200 Message-ID: <87pnhdobns.fsf@intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jau-Chih Tseng , Maxime Ripard , Allen Chen , open list , "open list:DRM DRIVERS" , David Airlie , Pi-Hsun Shih , Sean Paul Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191127102911.wBuoT8XbncBuFCLu8quTFw5gBnv0-wUxChZXAtFTuek@z> T24gVHVlLCAyNiBOb3YgMjAxOSwgYWxsZW4gPGFsbGVuLmNoZW5AaXRlLmNvbS50dz4gd3JvdGU6 Cj4gQWNjb3JkaW5nIHRvIFZFU0EgRU5IQU5DRUQgRVhURU5ERUQgRElTUExBWSBJREVOVElGSUNB VElPTiBEQVRBIFNUQU5EQVJECj4gKERlZmluZXMgRURJRCBTdHJ1Y3R1cmUgVmVyc2lvbiAxLCBS ZXZpc2lvbiA0KSBwYWdlOiAzOQo+IEhvdyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgbW9uaXRv ciBzdXBwb3J0IFJCIHRpbWluZyBvciBub3Q/Cj4gRURJRCAxLjQKPiBGaXJzdDogIHJlYWQgZGV0 YWlsZWQgdGltaW5nIGRlc2NyaXB0b3IgYW5kIG1ha2Ugc3VyZSBieXRlIDAgPSAweDAwLAo+IAli eXRlIDEgPSAweDAwLCBieXRlIDIgPSAweDAwIGFuZCBieXRlIDMgPSAweEZECj4gU2Vjb25kOiBy ZWFkIEVESUQgYml0IDAgaW4gZmVhdHVyZSBzdXBwb3J0IGJ5dGUgYXQgYWRkcmVzcyAxOGggPSAx Cj4gCWFuZCBkZXRhaWxlZCB0aW1pbmcgZGVzY3JpcHRvciBieXRlIDEwID0gMHgwNAo+IFRoaXJk OiAgaWYgRURJRCBiaXQgMCBpbiBmZWF0dXJlIHN1cHBvcnQgYnl0ZSA9IDEgJiYKPiAJZGV0YWls ZWQgdGltaW5nIGRlc2NyaXB0b3IgYnl0ZSAxMCA9IDB4MDQKPiAJdGhlbiB3ZSBjYW4gY2hlY2sg Ynl0ZSAxNSwgaWYgYml0IDQgaW4gYnl0ZSAxNSA9IDEgaXMgc3VwcG9ydCBSQgo+ICAgICAgICAg aWYgRURJRCBiaXQgMCBpbiBmZWF0dXJlIHN1cHBvcnQgYnl0ZSAhPSAxIHx8Cj4gCWRldGFpbGVk IHRpbWluZyBkZXNjcmlwdG9yIGJ5dGUgMTAgIT0gMHgwNCwKPiAJdGhlbiBieXRlIDE1IGNhbiBu b3QgYmUgdXNlZAo+Cj4gVGhlIGxpbnV4IGNvZGUgaXNfcmIgZnVuY3Rpb24gbm90IGZvbGxvdyB0 aGUgVkVTQSdzIHJ1bGUKPgo+IFNpZ25lZC1vZmYtYnk6IEFsbGVuIENoZW4gPGFsbGVuLmNoZW5A aXRlLmNvbS50dz4KPiBSZXBvcnRlZC1ieToga2J1aWxkIHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5j b20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIHwgMzYgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25z KCspLCA2IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKPiBpbmRleCBmNTkyNmJmLi5lMTFl NTg1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9lZGlkLmMKPiBAQCAtOTMsNiArOTMsMTIgQEAgc3RydWN0IGRldGFp bGVkX21vZGVfY2xvc3VyZSB7Cj4gIAlpbnQgbW9kZXM7Cj4gIH07Cj4gIAo+ICtzdHJ1Y3QgZWRp ZF9zdXBwb3J0X3JiX2Nsb3N1cmUgewo+ICsJc3RydWN0IGVkaWQgKmVkaWQ7Cj4gKwlib29sIHZh bGlkX3N1cHBvcnRfcmI7Cj4gKwlib29sIHN1cHBvcnRfcmI7Cj4gK307Cj4gKwo+ICAjZGVmaW5l IExFVkVMX0RNVAkwCj4gICNkZWZpbmUgTEVWRUxfR1RGCTEKPiAgI2RlZmluZSBMRVZFTF9HVEYy CTIKPiBAQCAtMjAxNywyMyArMjAyMyw0MSBAQCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJt X21vZGVfZmluZF9kbXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCX0KPiAgfQo+ICAKPiAr c3RhdGljIGJvb2wKPiAraXNfZGlzcGxheV9kZXNjcmlwdG9yKGNvbnN0IHU4ICpyLCB1OCB0YWcp Cj4gK3sKPiArCXJldHVybiAoIXJbMF0gJiYgIXJbMV0gJiYgIXJbMl0gJiYgclszXSA9PSB0YWcp ID8gdHJ1ZSA6IGZhbHNlOwo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZAo+ICBpc19yYihzdHJ1Y3Qg ZGV0YWlsZWRfdGltaW5nICp0LCB2b2lkICpkYXRhKQo+ICB7Cj4gIAl1OCAqciA9ICh1OCAqKXQ7 Cj4gLQlpZiAoclszXSA9PSBFRElEX0RFVEFJTF9NT05JVE9SX1JBTkdFKQo+IC0JCWlmIChyWzE1 XSAmIDB4MTApCj4gLQkJCSooYm9vbCAqKWRhdGEgPSB0cnVlOwo+ICsJc3RydWN0IGVkaWRfc3Vw cG9ydF9yYl9jbG9zdXJlICpjbG9zdXJlID0gZGF0YTsKPiArCXN0cnVjdCBlZGlkICplZGlkID0g Y2xvc3VyZS0+ZWRpZDsKPiArCj4gKwlpZiAoaXNfZGlzcGxheV9kZXNjcmlwdG9yKHIsIEVESURf REVUQUlMX01PTklUT1JfUkFOR0UpKSB7Cj4gKwkJaWYgKGVkaWQtPmZlYXR1cmVzICYgQklUKDAp ICYmIHJbMTBdID09IEJJVCgyKSkgewo+ICsJCQljbG9zdXJlLT52YWxpZF9zdXBwb3J0X3JiID0g dHJ1ZTsKPiArCQkJY2xvc3VyZS0+c3VwcG9ydF9yYiA9IChyWzE1XSAmIDB4MTApID8gdHJ1ZSA6 IGZhbHNlOwo+ICsJCX0KPiArCX0KPiAgfQo+ICAKPiAgLyogRURJRCAxLjQgZGVmaW5lcyB0aGlz IGV4cGxpY2l0bHkuICBGb3IgRURJRCAxLjMsIHdlIGd1ZXNzLCBiYWRseS4gKi8KPiAgc3RhdGlj IGJvb2wKPiAgZHJtX21vbml0b3Jfc3VwcG9ydHNfcmIoc3RydWN0IGVkaWQgKmVkaWQpCj4gIHsK PiArCXN0cnVjdCBlZGlkX3N1cHBvcnRfcmJfY2xvc3VyZSBjbG9zdXJlID0gewo+ICsJCS5lZGlk ID0gZWRpZCwKPiArCQkudmFsaWRfc3VwcG9ydF9yYiA9IGZhbHNlLAo+ICsJCS5zdXBwb3J0X3Ji ID0gZmFsc2UsCj4gKwl9Owo+ICsKPiAgCWlmIChlZGlkLT5yZXZpc2lvbiA+PSA0KSB7Cj4gLQkJ Ym9vbCByZXQgPSBmYWxzZTsKPiAtCQlkcm1fZm9yX2VhY2hfZGV0YWlsZWRfYmxvY2soKHU4ICop ZWRpZCwgaXNfcmIsICZyZXQpOwo+IC0JCXJldHVybiByZXQ7Cj4gKwkJZHJtX2Zvcl9lYWNoX2Rl dGFpbGVkX2Jsb2NrKCh1OCAqKWVkaWQsIGlzX3JiLCAmY2xvc3VyZSk7Cj4gKwkJaWYgKGNsb3N1 cmUudmFsaWRfc3VwcG9ydF9yYikKPiArCQkJcmV0dXJuIGNsb3N1cmUuc3VwcG9ydF9yYjsKCkFy ZSB5b3UgcGxhbm5pbmcgb24gZXh0ZW5kaW5nIHRoZSBjbG9zdXJlIHVzZSBzb21laG93PwoKSSBk aWQgbm90IGxvb2sgdXAgdGhlIHNwZWMsIGJ1dCBwdXJlbHkgb24gdGhlIGNvZGUgY2hhbmdlcyBh bG9uZSwgeW91CmNvdWxkIGp1c3QgbW92ZSB0aGUgZWRpZC0+ZmVhdHVyZXMgYml0IGNoZWNrIGF0 IHRoaXMgbGV2ZWwsIGFuZCBub3QgcGFzcwppdCBkb3duLCBhbmQgbm90aGluZyB3b3VsZCBjaGFu Z2UuIEkuZS4gZG9uJ3QgaXRlcmF0ZSB0aGUgRURJRCBhdCBhbGwgaWYKdGhlIGJpdCBpcyBub3Qg c2V0LgoKWW91IGFsc28gZG9uJ3QgYWN0dWFsbHkgdXNlIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVu IHZhbGlkX3N1cHBvcnRfcmIKdnMuIHN1cHBvcnRfcmIgZm9yIGFueXRoaW5nLCBzbyB0aGUgY2xv c3VyZSBqdXN0IGFkZHMgY29kZS4KCkJSLApKYW5pLgoKCj4gIAl9Cj4gIAo+ICAJcmV0dXJuICgo ZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKSAhPSAwKTsKCi0tIApKYW5pIE5p a3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgR3JhcGhpY3MgQ2VudGVyCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4BC37C432C0 for ; Wed, 27 Nov 2019 10:29:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 26DF52084D for ; Wed, 27 Nov 2019 10:29:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727080AbfK0K3S (ORCPT ); Wed, 27 Nov 2019 05:29:18 -0500 Received: from mga14.intel.com ([192.55.52.115]:65447 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726520AbfK0K3R (ORCPT ); Wed, 27 Nov 2019 05:29:17 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Nov 2019 02:29:17 -0800 X-IronPort-AV: E=Sophos;i="5.69,249,1571727600"; d="scan'208";a="199142767" Received: from jnikula-mobl3.fi.intel.com (HELO localhost) ([10.237.66.161]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Nov 2019 02:29:13 -0800 From: Jani Nikula To: allen Cc: Jau-Chih Tseng , Maxime Ripard , Allen Chen , open list , "open list\:DRM DRIVERS" , David Airlie , Pi-Hsun Shih , Sean Paul Subject: Re: [PATCH] drm/edid: fixup EDID 1.3 and 1.4 judge reduced-blanking timings logic In-Reply-To: <1574761572-26585-1-git-send-email-allen.chen@ite.com.tw> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <1574761572-26585-1-git-send-email-allen.chen@ite.com.tw> Date: Wed, 27 Nov 2019 12:29:11 +0200 Message-ID: <87pnhdobns.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 26 Nov 2019, allen wrote: > According to VESA ENHANCED EXTENDED DISPLAY IDENTIFICATION DATA STANDARD > (Defines EDID Structure Version 1, Revision 4) page: 39 > How to determine whether the monitor support RB timing or not? > EDID 1.4 > First: read detailed timing descriptor and make sure byte 0 = 0x00, > byte 1 = 0x00, byte 2 = 0x00 and byte 3 = 0xFD > Second: read EDID bit 0 in feature support byte at address 18h = 1 > and detailed timing descriptor byte 10 = 0x04 > Third: if EDID bit 0 in feature support byte = 1 && > detailed timing descriptor byte 10 = 0x04 > then we can check byte 15, if bit 4 in byte 15 = 1 is support RB > if EDID bit 0 in feature support byte != 1 || > detailed timing descriptor byte 10 != 0x04, > then byte 15 can not be used > > The linux code is_rb function not follow the VESA's rule > > Signed-off-by: Allen Chen > Reported-by: kbuild test robot > --- > drivers/gpu/drm/drm_edid.c | 36 ++++++++++++++++++++++++++++++------ > 1 file changed, 30 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c > index f5926bf..e11e585 100644 > --- a/drivers/gpu/drm/drm_edid.c > +++ b/drivers/gpu/drm/drm_edid.c > @@ -93,6 +93,12 @@ struct detailed_mode_closure { > int modes; > }; > > +struct edid_support_rb_closure { > + struct edid *edid; > + bool valid_support_rb; > + bool support_rb; > +}; > + > #define LEVEL_DMT 0 > #define LEVEL_GTF 1 > #define LEVEL_GTF2 2 > @@ -2017,23 +2023,41 @@ struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, > } > } > > +static bool > +is_display_descriptor(const u8 *r, u8 tag) > +{ > + return (!r[0] && !r[1] && !r[2] && r[3] == tag) ? true : false; > +} > + > static void > is_rb(struct detailed_timing *t, void *data) > { > u8 *r = (u8 *)t; > - if (r[3] == EDID_DETAIL_MONITOR_RANGE) > - if (r[15] & 0x10) > - *(bool *)data = true; > + struct edid_support_rb_closure *closure = data; > + struct edid *edid = closure->edid; > + > + if (is_display_descriptor(r, EDID_DETAIL_MONITOR_RANGE)) { > + if (edid->features & BIT(0) && r[10] == BIT(2)) { > + closure->valid_support_rb = true; > + closure->support_rb = (r[15] & 0x10) ? true : false; > + } > + } > } > > /* EDID 1.4 defines this explicitly. For EDID 1.3, we guess, badly. */ > static bool > drm_monitor_supports_rb(struct edid *edid) > { > + struct edid_support_rb_closure closure = { > + .edid = edid, > + .valid_support_rb = false, > + .support_rb = false, > + }; > + > if (edid->revision >= 4) { > - bool ret = false; > - drm_for_each_detailed_block((u8 *)edid, is_rb, &ret); > - return ret; > + drm_for_each_detailed_block((u8 *)edid, is_rb, &closure); > + if (closure.valid_support_rb) > + return closure.support_rb; Are you planning on extending the closure use somehow? I did not look up the spec, but purely on the code changes alone, you could just move the edid->features bit check at this level, and not pass it down, and nothing would change. I.e. don't iterate the EDID at all if the bit is not set. You also don't actually use the distinction between valid_support_rb vs. support_rb for anything, so the closure just adds code. BR, Jani. > } > > return ((edid->input & DRM_EDID_INPUT_DIGITAL) != 0); -- Jani Nikula, Intel Open Source Graphics Center