From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH v2 1/2] drm: Introduce crtc->mode_valid() callback Date: Wed, 3 May 2017 15:05:23 -0700 Message-ID: <20170503220523.GE3176@intel.com> References: <5316810123fc13dd9f5caac4188b9a9b8ab07240.1493386261.git.joabreu@synopsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3BD2589B45 for ; Wed, 3 May 2017 22:00:50 +0000 (UTC) Content-Disposition: inline In-Reply-To: <5316810123fc13dd9f5caac4188b9a9b8ab07240.1493386261.git.joabreu@synopsys.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jose Abreu Cc: Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Carlos Palminha List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBBcHIgMjgsIDIwMTcgYXQgMDI6NDc6MTFQTSArMDEwMCwgSm9zZSBBYnJldSB3cm90 ZToKPiBTb21lIGNydGMncyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgaW4gdGhlIG1vZGUgdGhleSBj YW4gZGlzcGxheS4gSW4KPiB0aGlzIHBhdGNoIGEgbmV3IGNhbGxiYWNrIChjcnRjLT5tb2RlX3Zh bGlkKCkpIGlzIGludHJvZHVjZWQgdGhhdAo+IGlzIGNhbGxlZCBhdCB0aGUgc2FtZSBzdGFnZSBv ZiBjb25uZWN0b3ItPm1vZGVfdmFsaWQoKSBjYWxsYmFjay4KPiAKPiBUaGlzIHNoYWxsIGJlIGlt cGxlbWVudGVkIGlmIHRoZSBjcnRjIGhhcyBzb21lIHNvcnQgb2YgcmVzdHJpY3Rpb24KPiBzbyB0 aGF0IHdlIGRvbid0IHByb2JlIG1vZGVzIHRoYXQgd2lsbCBmYWlsIGluIHRoZSBjb21taXQoKSBz dGFnZS4KPiBGb3IgZXhhbXBsZTogQSBnaXZlbiBjcnRjIG1heSBiZSByZXNwb25zaWJsZSB0byBz ZXQgYSBjbG9jayB2YWx1ZS4KPiBJZiB0aGUgY2xvY2sgY2FuIG5vdCBwcm9kdWNlIGFsbCB0aGUg dmFsdWVzIGZvciB0aGUgYXZhaWxhYmxlCj4gbW9kZXMgdGhlbiB0aGlzIGNhbGxiYWNrIGNhbiBi ZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YKPiBwcm9iYmVkIG1vZGVzIHRvIG9ubHkg dGhlIG9uZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkLgo+IAo+IElmIHRoZSBjcnRjIGRvZXMgbm90 IGltcGxlbWVudCB0aGUgY2FsbGJhY2sgdGhlbiB0aGUgYmVoYXZpb3VyIHdpbGwKPiByZW1haW4g dGhlIHNhbWUuIEFsc28sIGZvciBhIGdpdmVuIHNldCBvZiBjcnRjcyB0aGF0IGNhbiBiZSBib3Vu ZCB0bwo+IHRoZSBjb25uZWN0b3IsIGlmIGF0IGxlYXN0IG9uZSBjYW4gZGlzcGxheSB0aGUgbW9k ZSB0aGVuIHRoZSBtb2RlCj4gd2lsbCBiZSBwcm9iYmVkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEpv c2UgQWJyZXUgPGpvYWJyZXVAc3lub3BzeXMuY29tPgo+IENjOiBDYXJsb3MgUGFsbWluaGEgPHBh bG1pbmhhQHN5bm9wc3lzLmNvbT4KPiBDYzogQWxleGV5IEJyb2RraW4gPGFicm9ka2luQHN5bm9w c3lzLmNvbT4KPiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVs LmNvbT4KPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiBDYzog RGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+Cj4gQ2M6IEFuZHJ6ZWogSGFqZGEgPGEuaGFq ZGFAc2Ftc3VuZy5jb20+Cj4gLS0tCj4gCj4gQ2hhbmdlcyB2MS0+djI6Cj4gCS0gQ29ycmVjdCBp bmRlbnRhdGlvbgo+IAktIENoYW5nZSBmdW5jdGlvbiBuYW1lIHRvIGRybV92YWxpZGF0ZV9jb25u ZWN0b3IKPiAJLSBNb3ZlIGNvbm5uZWN0b3ItPm1vZGVfdmFsaWQoKSB0byBuZXcgZnVuY3Rpb24K PiAJLSBDaGFuZ2UgY3J0Yy0+bW9kZV92YWxpZCgpICJtb2RlIiBmaWVsZCB0byBjb25zdAo+IAkt IENvZGUgcmVvZ2Fybml6YXRpb24KPiAJLSBSZXR1cm4gZWFybGllciBpZiBjcnRjIGFjY2VwdHMg bW9kZQo+IAo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2JlX2hlbHBlci5jICAgICAgIHwgNTAg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KPiAgaW5jbHVkZS9kcm0vZHJtX21vZGVz ZXRfaGVscGVyX3Z0YWJsZXMuaCB8IDI2ICsrKysrKysrKysrKysrKysrCj4gIDIgZmlsZXMgY2hh bmdlZCwgNzQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2RybV9wcm9iZV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f cHJvYmVfaGVscGVyLmMKPiBpbmRleCAxYjBjMTRhLi4wNzQxZjM2IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fcHJvYmVfaGVscGVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX3Byb2JlX2hlbHBlci5jCj4gQEAgLTgwLDYgKzgwLDUyIEBACj4gIAlyZXR1cm4gTU9ERV9P SzsKPiAgfQo+ICAKPiArc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCj4gK2RybV9tb2RlX3Zh bGlkYXRlX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkg ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBk cm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAqY29ubmVjdG9yX2Z1bmNzID0KPiArCQljb25uZWN0 b3ItPmhlbHBlcl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rv ci0+ZGV2Owo+ICsJdWludDMyX3QgKmlkcyA9IGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZHM7Cj4gKwll bnVtIGRybV9tb2RlX3N0YXR1cyByZXQgPSBNT0RFX09LOwo+ICsJdW5zaWduZWQgaW50IGk7Cj4g Kwo+ICsJLyogU3RlcCAxOiBWYWxpZGF0ZSBhZ2FpbnN0IGNvbm5lY3RvciAqLwo+ICsJaWYgKGNv bm5lY3Rvcl9mdW5jcy0+bW9kZV92YWxpZCkKPiArCQlyZXQgPSBjb25uZWN0b3JfZnVuY3MtPm1v ZGVfdmFsaWQoY29ubmVjdG9yLCBtb2RlKTsKPiArCj4gKwlpZiAocmV0ICE9IE1PREVfT0spCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBTdGVwIDI6IFZhbGlkYXRlIGFnYWluc3QgY3J0Yydz ICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsgaSsrKSB7 Cj4gKwkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gZHJtX2VuY29kZXJfZmluZChkZXYs IGlkc1tpXSk7Cj4gKwkJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsKPiArCQlpZiAoIWVuY29k ZXIpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlkcm1fZm9yX2VhY2hfY3J0YyhjcnRjLCBkZXYp IHsKPiArCQkJY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jczsK PiArCj4gKwkJCWlmICghZHJtX2VuY29kZXJfY3J0Y19vayhlbmNvZGVyLCBjcnRjKSkKPiArCQkJ CWNvbnRpbnVlOwo+ICsKPiArCQkJY3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOwo+ ICsJCQlpZiAoIWNydGNfZnVuY3MgfHwgIWNydGNfZnVuY3MtPm1vZGVfdmFsaWQpCj4gKwkJCQly ZXR1cm4gTU9ERV9PSzsgLyogY3J0YyBhY2NlcHRzIGV2ZXJ5dGhpbmcgKi8KPiArCj4gKwkJCXJl dCA9IGNydGNfZnVuY3MtPm1vZGVfdmFsaWQoY3J0YywgbW9kZSk7Cj4gKwkJCWlmIChyZXQgPT0g TU9ERV9PSykKPiArCQkJCXJldHVybiByZXQ7Cgo+ICsJCX0KPiArCX0KPiArCj4gKwkvKiBOT1RF OiBJZiBubyBjcnRjIG9yIGVuY29kZXIgaXMgZm91bmQgdGhlbiB3ZSByZXR1cm4gTU9ERV9PSyAq LwoKSSB0aGluayB0aGlzIGNvbW1lbnQgaXMgbWlzbGVhZGluZyBiZWNhdXNlIGhlcmUgcmV0IGlz IG5vdCBhbHd5YXMgTU9ERV9PSy4KSXQgd2lsbCBiZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gY3J0 Y19mdW5jLT5tb2RlX3ZhbGlkIHdoaWNoIGNvdWxkIGFsc28KYmUgTU9ERV9OT0NMT0NLCgpNYW5h c2kKCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IGRybV9oZWxwZXJfcHJv YmVfYWRkX2NtZGxpbmVfbW9kZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICB7 Cj4gIAlzdHJ1Y3QgZHJtX2NtZGxpbmVfbW9kZSAqY21kbGluZV9tb2RlOwo+IEBAIC00MjgsOCAr NDc0LDggQEAgaW50IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcyhzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICAJCWlmIChtb2RlLT5zdGF0dXMgPT0gTU9E RV9PSykKPiAgCQkJbW9kZS0+c3RhdHVzID0gZHJtX21vZGVfdmFsaWRhdGVfZmxhZyhtb2RlLCBt b2RlX2ZsYWdzKTsKPiAgCj4gLQkJaWYgKG1vZGUtPnN0YXR1cyA9PSBNT0RFX09LICYmIGNvbm5l Y3Rvcl9mdW5jcy0+bW9kZV92YWxpZCkKPiAtCQkJbW9kZS0+c3RhdHVzID0gY29ubmVjdG9yX2Z1 bmNzLT5tb2RlX3ZhbGlkKGNvbm5lY3RvciwKPiArCQlpZiAobW9kZS0+c3RhdHVzID09IE1PREVf T0spCj4gKwkJCW1vZGUtPnN0YXR1cyA9IGRybV9tb2RlX3ZhbGlkYXRlX2Nvbm5lY3Rvcihjb25u ZWN0b3IsCj4gIAkJCQkJCQkJICAgbW9kZSk7Cj4gIAl9Cj4gIAo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oIGIvaW5jbHVkZS9kcm0vZHJtX21v ZGVzZXRfaGVscGVyX3Z0YWJsZXMuaAo+IGluZGV4IGMwMWMzMjguLmVjYjA1NWMgMTAwNjQ0Cj4g LS0tIGEvaW5jbHVkZS9kcm0vZHJtX21vZGVzZXRfaGVscGVyX3Z0YWJsZXMuaAo+ICsrKyBiL2lu Y2x1ZGUvZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmgKPiBAQCAtMTA2LDYgKzEwNiwz MiBAQCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIHsKPiAgCXZvaWQgKCpjb21taXQpKHN0 cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gIAo+ICAJLyoqCj4gKwkgKiBAbW9kZV92YWxpZDoKPiAr CSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpZiB0aGUgY3J0 YyBoYXMgc29tZSBzb3J0IG9mCj4gKwkgKiByZXN0cmljdGlvbiBpbiB0aGUgbW9kZXMgaXQgY2Fu IGRpc3BsYXkuIEZvciBleGFtcGxlLCBhIGdpdmVuIGNydGMKPiArCSAqIG1heSBiZSByZXNwb25z aWJsZSB0byBzZXQgYSBjbG9jayB2YWx1ZS4gSWYgdGhlIGNsb2NrIGNhbiBub3QKPiArCSAqIHBy b2R1Y2UgYWxsIHRoZSB2YWx1ZXMgZm9yIHRoZSBhdmFpbGFibGUgbW9kZXMgdGhlbiB0aGlzIGNh bGxiYWNrCj4gKwkgKiBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0aGUgbnVtYmVyIG9mIHByb2Ji ZWQgbW9kZXMgdG8gb25seSB0aGUgb25lcwo+ICsJICogdGhhdCBjYW4gYmUgZGlzcGxheWVkLgo+ ICsJICoKPiArCSAqIFRoaXMgaXMgZGlyZWN0bHkgY2FsbGVkIGF0IHRoZSBzYW1lIHN0YWdlIG9m IGNvbm5lY3Rvci0+bW9kZV92YWxpZAo+ICsJICogY2FsbGJhY2suCj4gKwkgKgo+ICsJICogTk9U RToKPiArCSAqCj4gKwkgKiBGb3IgYSBnaXZlbiBzZXQgb2YgY3J0YydzIGluIGEgZHJtX2Rldmlj ZSwgaWYgYXQgbGVhc3Qgb25lIGRvZXMgbm90Cj4gKwkgKiBoYXZlIHRoZSBtb2RlX3ZhbGlkIGNh bGxiYWNrLCBvciwgYXQgbGVhc3Qgb25lIHJldHVybnMgTU9ERV9PSyB0aGVuCj4gKwkgKiB0aGUg bW9kZSB3aWxsIGJlIHByb2JiZWQuCj4gKwkgKgo+ICsJICogUkVUVVJOUzoKPiArCSAqCj4gKwkg KiBkcm1fbW9kZV9zdGF0dXMgRW51bQo+ICsJICovCj4gKwllbnVtIGRybV9tb2RlX3N0YXR1cyAo Km1vZGVfdmFsaWQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCQkgICBjb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cj4gKwo+ICsJLyoqCj4gIAkgKiBAbW9kZV9maXh1 cDoKPiAgCSAqCj4gIAkgKiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gdmFsaWRhdGUgYSBtb2Rl LiBUaGUgcGFyYW1ldGVyIG1vZGUgaXMgdGhlCj4gLS0gCj4gMS45LjEKPiAKPiAKPiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWls aW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752707AbdECWAz (ORCPT ); Wed, 3 May 2017 18:00:55 -0400 Received: from mga01.intel.com ([192.55.52.88]:49963 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751216AbdECWAr (ORCPT ); Wed, 3 May 2017 18:00:47 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.38,284,1491289200"; d="scan'208";a="83385527" Date: Wed, 3 May 2017 15:05:23 -0700 From: Manasi Navare To: Jose Abreu Cc: dri-devel@lists.freedesktop.org, Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, Carlos Palminha Subject: Re: [PATCH v2 1/2] drm: Introduce crtc->mode_valid() callback Message-ID: <20170503220523.GE3176@intel.com> References: <5316810123fc13dd9f5caac4188b9a9b8ab07240.1493386261.git.joabreu@synopsys.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <5316810123fc13dd9f5caac4188b9a9b8ab07240.1493386261.git.joabreu@synopsys.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Apr 28, 2017 at 02:47:11PM +0100, Jose Abreu wrote: > Some crtc's may have restrictions in the mode they can display. In > this patch a new callback (crtc->mode_valid()) is introduced that > is called at the same stage of connector->mode_valid() callback. > > This shall be implemented if the crtc has some sort of restriction > so that we don't probe modes that will fail in the commit() stage. > For example: A given crtc may be responsible to set a clock value. > If the clock can not produce all the values for the available > modes then this callback can be used to restrict the number of > probbed modes to only the ones that can be displayed. > > If the crtc does not implement the callback then the behaviour will > remain the same. Also, for a given set of crtcs that can be bound to > the connector, if at least one can display the mode then the mode > will be probbed. > > Signed-off-by: Jose Abreu > Cc: Carlos Palminha > Cc: Alexey Brodkin > Cc: Ville Syrjälä > Cc: Daniel Vetter > Cc: Dave Airlie > Cc: Andrzej Hajda > --- > > Changes v1->v2: > - Correct indentation > - Change function name to drm_validate_connector > - Move connnector->mode_valid() to new function > - Change crtc->mode_valid() "mode" field to const > - Code reogarnization > - Return earlier if crtc accepts mode > > drivers/gpu/drm/drm_probe_helper.c | 50 ++++++++++++++++++++++++++++++-- > include/drm/drm_modeset_helper_vtables.h | 26 +++++++++++++++++ > 2 files changed, 74 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c > index 1b0c14a..0741f36 100644 > --- a/drivers/gpu/drm/drm_probe_helper.c > +++ b/drivers/gpu/drm/drm_probe_helper.c > @@ -80,6 +80,52 @@ > return MODE_OK; > } > > +static enum drm_mode_status > +drm_mode_validate_connector(struct drm_connector *connector, > + struct drm_display_mode *mode) > +{ > + const struct drm_connector_helper_funcs *connector_funcs = > + connector->helper_private; > + struct drm_device *dev = connector->dev; > + uint32_t *ids = connector->encoder_ids; > + enum drm_mode_status ret = MODE_OK; > + unsigned int i; > + > + /* Step 1: Validate against connector */ > + if (connector_funcs->mode_valid) > + ret = connector_funcs->mode_valid(connector, mode); > + > + if (ret != MODE_OK) > + return ret; > + > + /* Step 2: Validate against crtc's */ > + for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { > + struct drm_encoder *encoder = drm_encoder_find(dev, ids[i]); > + struct drm_crtc *crtc; > + > + if (!encoder) > + continue; > + > + drm_for_each_crtc(crtc, dev) { > + const struct drm_crtc_helper_funcs *crtc_funcs; > + > + if (!drm_encoder_crtc_ok(encoder, crtc)) > + continue; > + > + crtc_funcs = crtc->helper_private; > + if (!crtc_funcs || !crtc_funcs->mode_valid) > + return MODE_OK; /* crtc accepts everything */ > + > + ret = crtc_funcs->mode_valid(crtc, mode); > + if (ret == MODE_OK) > + return ret; > + } > + } > + > + /* NOTE: If no crtc or encoder is found then we return MODE_OK */ I think this comment is misleading because here ret is not alwyas MODE_OK. It will be the return value from crtc_func->mode_valid which could also be MODE_NOCLOCK Manasi > + return ret; > +} > + > static int drm_helper_probe_add_cmdline_mode(struct drm_connector *connector) > { > struct drm_cmdline_mode *cmdline_mode; > @@ -428,8 +474,8 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, > if (mode->status == MODE_OK) > mode->status = drm_mode_validate_flag(mode, mode_flags); > > - if (mode->status == MODE_OK && connector_funcs->mode_valid) > - mode->status = connector_funcs->mode_valid(connector, > + if (mode->status == MODE_OK) > + mode->status = drm_mode_validate_connector(connector, > mode); > } > > diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h > index c01c328..ecb055c 100644 > --- a/include/drm/drm_modeset_helper_vtables.h > +++ b/include/drm/drm_modeset_helper_vtables.h > @@ -106,6 +106,32 @@ struct drm_crtc_helper_funcs { > void (*commit)(struct drm_crtc *crtc); > > /** > + * @mode_valid: > + * > + * This callback should be implemented if the crtc has some sort of > + * restriction in the modes it can display. For example, a given crtc > + * may be responsible to set a clock value. If the clock can not > + * produce all the values for the available modes then this callback > + * can be used to restrict the number of probbed modes to only the ones > + * that can be displayed. > + * > + * This is directly called at the same stage of connector->mode_valid > + * callback. > + * > + * NOTE: > + * > + * For a given set of crtc's in a drm_device, if at least one does not > + * have the mode_valid callback, or, at least one returns MODE_OK then > + * the mode will be probbed. > + * > + * RETURNS: > + * > + * drm_mode_status Enum > + */ > + enum drm_mode_status (*mode_valid)(struct drm_crtc *crtc, > + const struct drm_display_mode *mode); > + > + /** > * @mode_fixup: > * > * This callback is used to validate a mode. The parameter mode is the > -- > 1.9.1 > > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel