From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 2/4 v2] drm: introduce drm_connector_register_all() helper Date: Mon, 21 Mar 2016 15:33:13 +0200 Message-ID: <3480153.fsvGkg3hVW@avalon> References: <1458563320-30541-1-git-send-email-abrodkin@synopsys.com> <1458563320-30541-3-git-send-email-abrodkin@synopsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [IPv6:2001:4b98:dc2:45:216:3eff:febb:480d]) by gabe.freedesktop.org (Postfix) with ESMTPS id CE6886E164 for ; Mon, 21 Mar 2016 13:33:05 +0000 (UTC) In-Reply-To: <1458563320-30541-3-git-send-email-abrodkin@synopsys.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Alexey Brodkin , linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org SGkgQWxleGV5LAoKVGhhbmsgeW91IGZvciB0aGUgcGF0Y2guCgpPbiBNb25kYXkgMjEgTWFyIDIw MTYgMTU6Mjg6MzggQWxleGV5IEJyb2RraW4gd3JvdGU6Cj4gQXMgYSBwYWlyIHRvIGFscmVhZHkg ZXhpc3RpbmcgZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyX2FsbCgpIHdlJ3JlIGFkZGluZwo+IGdl bmVyaWMgaW1wbGVtZW50YXRpb24gb2Ygd2hhdCBpcyBhbHJlYWR5IGRvbmUgaW4gc29tZSBkcml2 ZXJzLgo+IAo+IE9uY2UgdGhpcyBoZWxwZXIgaXMgaW1wbGVtZW50ZWQgd2UnbGwgYmUgcmVhZHkg dG8gc3dpdGNoIGV4aXN0aW5nCj4gZHJpdmVyLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyB3aXRo IHRoZSBnZW5lcmljIG9uZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBbGV4ZXkgQnJvZGtpbiA8YWJy b2RraW5Ac3lub3BzeXMuY29tPgo+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+ Cj4gQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KPiAtLS0KPiAKPiBDaGFuZ2Vz IHYxIC0+IHYyOgo+ICAqIFJlbmFtZSBkcm1fY29ubmVjdG9yX3VucGx1Z19hbGwoKSB0byBkcm1f Y29ubmVjdG9yX3VucmVnaXN0ZXJfYWxsKCkKPiAgKiBVc2UgZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rv cigpIGluc3RlYWQgb2YgbGlzdF9mb3JfZWFjaF9lbnRyeSgpCj4gICogVXBkYXRlZCBrZXJuZWxk b2MgZm9yIGRybV9kZXZfcmVnaXN0ZXIoKQo+IAo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMu YyB8IDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KPiAgZHJp dmVycy9ncHUvZHJtL2RybV9kcnYuYyAgfCAgNiArKysrKy0KPiAgaW5jbHVkZS9kcm0vZHJtX2Ny dGMuaCAgICAgfCAgMyArKy0KPiAgMyBmaWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspLCA1 IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMu YyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCj4gaW5kZXggNzY0NTNjZC4uMmFkMGNlOSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fY3J0Yy5jCj4gQEAgLTEwODAsMTMgKzEwODAsNTcgQEAgdm9pZCBkcm1fY29u bmVjdG9yX3VucmVnaXN0ZXIoc3RydWN0IGRybV9jb25uZWN0b3IKPiAqY29ubmVjdG9yKSB9Cj4g IEVYUE9SVF9TWU1CT0woZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKTsKPiAKPiArLyoqCj4gKyAq IGRybV9jb25uZWN0b3JfcmVnaXN0ZXJfYWxsIC0gcmVnaXN0ZXIgYWxsIGNvbm5lY3RvcnMKPiAr ICogQGRldjogZHJtIGRldmljZQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGp1c3QgY2FsbHMg ZHJtX2Nvbm5lY3Rvcl9yZWdpc3RlcigpIGZvciBhbGwgY29ubmVjdG9ycy4KPiArICogU2hvdWxk IGJlIGNhbGxlZCB3aGVuIHRoZSBkZXZpY2UgaXMgZGlzY29ubmVjdGVkLCBlLmcuIGZyb20gYW4g dXNiCj4gZHJpdmVyJ3MKPiArICogLT5jb25uZWN0IGNhbGxiYWNrLgoKVGhlcmUncyBubyBzdWNo IHRoaW5nIGFzIGEgVVNCIGRyaXZlciBjb25uZWN0IGNhbGxiYWNrIDotKQoKPiArICoKPiArICog UmV0dXJuczoKPiArICogWmVybyBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4g KyAqLwo+ICtpbnQgZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcl9hbGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiArewo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgKmZhaWxlZDsK PiArCWludCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7 Cj4gKwo+ICsJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcihjb25uZWN0b3IsIGRldikgewo+ICsJCXJl dCA9IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoY29ubmVjdG9yKTsKPiArCQlpZiAocmV0KSB7Cj4g KwkJCWZhaWxlZCA9IGNvbm5lY3RvcjsKPiArCQkJZ290byBlcnI7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCgpPbmUgYmxhbmsgbGluZSBpcyBlbm91Z2guCgo+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPm1v ZGVfY29uZmlnLm11dGV4KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2VycjoKPiArCWRybV9m b3JfZWFjaF9jb25uZWN0b3IoY29ubmVjdG9yLCBkZXYpIHsKPiArCQlpZiAoZmFpbGVkID09IGNv bm5lY3RvcikKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihj b25uZWN0b3IpOwo+ICsJfQoKZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCkgY2FuIHNhZmVseSBi ZSBjYWxsZWQgb24gdW5yZWdpc3RlcmVkIGNvbm5lY3RvcnMsIHNvIAp5b3UgY291bGQgc2ltcGxp ZnkgdGhlIGltcGxlbWVudGF0aW9uIGJ5IGNhbGxpbmcgCmRybV9jb25uZWN0b3JfdW5yZWdpc3Rl cl9hbGwoKSBhYm92ZSBhbmQgcmVtb3ZlIHRoZSBnb3RvIGFuZCB0aGlzIHBpZWNlIG9mIAplcnJv ciBoYW5kbGluZyBjb2RlLgoKPiArCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRl eCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9jb25uZWN0 b3JfcmVnaXN0ZXJfYWxsKTsKPiAKPiAgLyoqCj4gICAqIGRybV9jb25uZWN0b3JfdW5yZWdpc3Rl cl9hbGwgLSB1bnJlZ2lzdGVyIGNvbm5lY3RvciB1c2Vyc3BhY2UgaW50ZXJmYWNlcwo+ICogQGRl djogZHJtIGRldmljZQo+ICAgKgo+ICAgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIGFsbCBj b25uZWN0b3IgdXNlcnNwYWNlIGludGVyZmFjZXMgaW4gc3lzZnMuCj4gU2hvdWxkCj4gLSAqIGJl IGNhbGwgd2hlbiB0aGUgZGV2aWNlIGlzIGRpc2Nvbm5lY3RlZCwgZS5nLiBmcm9tIGFuIHVzYiBk cml2ZXIncwo+ICsgKiBiZSBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGRpc2Nvbm5lY3RlZCwg ZS5nLiBmcm9tIGFuIHVzYiBkcml2ZXIncwo+ICAgKiAtPmRpc2Nvbm5lY3QgY2FsbGJhY2suCj4g ICAqLwo+ICB2b2lkIGRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcl9hbGwoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiBAQCAtMTA5NCw5ICsxMTM4LDkgQEAgdm9pZCBkcm1fY29ubmVjdG9yX3VucmVn aXN0ZXJfYWxsKHN0cnVjdCBkcm1fZGV2aWNlCj4gKmRldikgc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcjsKPiAKPiAgCS8qIEZJWE1FOiB0YWtpbmcgdGhlIG1vZGUgY29uZmlnIG11dGV4 IGVuZHMgdXAgaW4gYSBjbGFzaCB3aXRoIHN5c2ZzICovCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpCj4gKwlk cm1fZm9yX2VhY2hfY29ubmVjdG9yKGNvbm5lY3RvciwgZGV2KSB7Cj4gIAkJZHJtX2Nvbm5lY3Rv cl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7Cj4gLQo+ICsJfQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0wo ZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyX2FsbCk7CgpJIHdvdWxkIG1vdmUgdGhlc2UgdHdvIGh1 bmtzIHRvIHRoZSBwcmV2aW91cyBwYXRjaCBhcyB5b3UgYWxyZWFkeSB0b3VjaCAKZHJtX2Nvbm5l Y3Rvcl91bnJlZ2lzdGVyX2FsbCgpIHRoZXJlLCBidXQgdGhhdCdzIHVwIHRvIHlvdS4KCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2Rydi5jCj4gaW5kZXggMTY3YzhkMy4uNTU4MGE5MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwo+IEBAIC03 MTUsNyArNzE1LDExIEBAIEVYUE9SVF9TWU1CT0woZHJtX2Rldl91bnJlZik7Cj4gICAqCj4gICAq IFJlZ2lzdGVyIHRoZSBEUk0gZGV2aWNlIEBkZXYgd2l0aCB0aGUgc3lzdGVtLCBhZHZlcnRpc2Ug ZGV2aWNlIHRvCj4gdXNlci1zcGFjZSAqIGFuZCBzdGFydCBub3JtYWwgZGV2aWNlIG9wZXJhdGlv bi4gQGRldiBtdXN0IGJlIGFsbG9jYXRlZCB2aWEKPiBkcm1fZGV2X2FsbG9jKCkgLSAqIHByZXZp b3VzbHkuCj4gKyAqIHByZXZpb3VzbHkuIFJpZ2h0IGFmdGVyIGRybV9kZXZfcmVnaXN0ZXIoKSB0 aGUgZHJpdmVyIHNob3VsZCBjYWxsCj4gKyAqIGRybV9jb25uZWN0b3JfcGx1Z19hbGwoKSB0byBy ZWdpc3RlciBhbGwgY29ubmVjdG9ycyBpbiBzeXNmcy4gVGhpcyBpcwoKcy9kcm1fY29ubmVjdG9y X3BsdWdfYWxsL2RybV9jb25uZWN0b3JfcmVnaXN0ZXJfYWxsLwoKPiArICogYSBzZXBhcmF0ZSBj YWxsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZHJpdmVycyBzdGlsbCB1c2luZwo+ ICsgKiB0aGUgZGVwcmVjYXRlZCAtPmxvYWQoKSBjYWxsYmFjaywgd2hlcmUgY29ubmVjdG9ycyBh cmUgcmVnaXN0ZXJlZCBmcm9tCj4gd2l0aGluCj4gKyAqIHRoZSAtPmxvYWQoKSBjYWxsYmFjay4K PiAgICoKPiAgICogTmV2ZXIgY2FsbCB0aGlzIHR3aWNlIG9uIGFueSBkZXZpY2UhCj4gICAqCj4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0 Yy5oCj4gaW5kZXggNDJkOWY0ZC4uNmEzNDExNyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9k cm1fY3J0Yy5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAo+IEBAIC0yMjE0LDcgKzIy MTQsOCBAQCB2b2lkIGRybV9jb25uZWN0b3JfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cgo+ICpjb25uZWN0b3IpOwo+IAo+ICBleHRlcm4gdm9pZCBkcm1fY29ubmVjdG9yX2NsZWFudXAo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gIGV4dGVybiB1bnNpZ25lZCBpbnQg ZHJtX2Nvbm5lY3Rvcl9pbmRleChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiAt LyogaGVscGVyIHRvIHVucmVnaXN0ZXIgYWxsIGNvbm5lY3RvcnMgZnJvbSBzeXNmcyBmb3IgZGV2 aWNlICovCj4gKy8qIGhlbHBlcnMgdG8ge3VufXJlZ2lzdGVyIGFsbCBjb25uZWN0b3JzIGZyb20g c3lzZnMgZm9yIGRldmljZSAqLwo+ICtleHRlcm4gaW50IGRybV9jb25uZWN0b3JfcmVnaXN0ZXJf YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICBleHRlcm4gdm9pZCBkcm1fY29ubmVjdG9y X3VucmVnaXN0ZXJfYWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IAo+ICBleHRlcm4gaW50 IGRybV9icmlkZ2VfYWRkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpOwoKLS0gClJlZ2FyZHMs CgpMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756302AbcCUNdJ (ORCPT ); Mon, 21 Mar 2016 09:33:09 -0400 Received: from galahad.ideasonboard.com ([185.26.127.97]:36850 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755634AbcCUNdG (ORCPT ); Mon, 21 Mar 2016 09:33:06 -0400 From: Laurent Pinchart To: dri-devel@lists.freedesktop.org Cc: Alexey Brodkin , linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/4 v2] drm: introduce drm_connector_register_all() helper Date: Mon, 21 Mar 2016 15:33:13 +0200 Message-ID: <3480153.fsvGkg3hVW@avalon> User-Agent: KMail/4.14.10 (Linux/4.1.15-gentoo-r1; KDE/4.14.16; x86_64; ; ) In-Reply-To: <1458563320-30541-3-git-send-email-abrodkin@synopsys.com> References: <1458563320-30541-1-git-send-email-abrodkin@synopsys.com> <1458563320-30541-3-git-send-email-abrodkin@synopsys.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Alexey, Thank you for the patch. On Monday 21 Mar 2016 15:28:38 Alexey Brodkin wrote: > As a pair to already existing drm_connector_unregister_all() we're adding > generic implementation of what is already done in some drivers. > > Once this helper is implemented we'll be ready to switch existing > driver-specific implementations with the generic one. > > Signed-off-by: Alexey Brodkin > Cc: Daniel Vetter > Cc: David Airlie > --- > > Changes v1 -> v2: > * Rename drm_connector_unplug_all() to drm_connector_unregister_all() > * Use drm_for_each_connector() instead of list_for_each_entry() > * Updated kerneldoc for drm_dev_register() > > drivers/gpu/drm/drm_crtc.c | 50 ++++++++++++++++++++++++++++++++++++++++--- > drivers/gpu/drm/drm_drv.c | 6 +++++- > include/drm/drm_crtc.h | 3 ++- > 3 files changed, 54 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c > index 76453cd..2ad0ce9 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -1080,13 +1080,57 @@ void drm_connector_unregister(struct drm_connector > *connector) } > EXPORT_SYMBOL(drm_connector_unregister); > > +/** > + * drm_connector_register_all - register all connectors > + * @dev: drm device > + * > + * This function just calls drm_connector_register() for all connectors. > + * Should be called when the device is disconnected, e.g. from an usb > driver's > + * ->connect callback. There's no such thing as a USB driver connect callback :-) > + * > + * Returns: > + * Zero on success, error code on failure. > + */ > +int drm_connector_register_all(struct drm_device *dev) > +{ > + struct drm_connector *connector, *failed; > + int ret; > + > + mutex_lock(&dev->mode_config.mutex); > + > + drm_for_each_connector(connector, dev) { > + ret = drm_connector_register(connector); > + if (ret) { > + failed = connector; > + goto err; > + } > + } > + > + One blank line is enough. > + mutex_unlock(&dev->mode_config.mutex); > + > + return 0; > + > +err: > + drm_for_each_connector(connector, dev) { > + if (failed == connector) > + break; > + > + drm_connector_unregister(connector); > + } drm_connector_unregister() can safely be called on unregistered connectors, so you could simplify the implementation by calling drm_connector_unregister_all() above and remove the goto and this piece of error handling code. > + mutex_unlock(&dev->mode_config.mutex); > + > + return ret; > +} > +EXPORT_SYMBOL(drm_connector_register_all); > > /** > * drm_connector_unregister_all - unregister connector userspace interfaces > * @dev: drm device > * > * This function unregisters all connector userspace interfaces in sysfs. > Should > - * be call when the device is disconnected, e.g. from an usb driver's > + * be called when the device is disconnected, e.g. from an usb driver's > * ->disconnect callback. > */ > void drm_connector_unregister_all(struct drm_device *dev) > @@ -1094,9 +1138,9 @@ void drm_connector_unregister_all(struct drm_device > *dev) struct drm_connector *connector; > > /* FIXME: taking the mode config mutex ends up in a clash with sysfs */ > - list_for_each_entry(connector, &dev->mode_config.connector_list, head) > + drm_for_each_connector(connector, dev) { > drm_connector_unregister(connector); > - > + } > } > EXPORT_SYMBOL(drm_connector_unregister_all); I would move these two hunks to the previous patch as you already touch drm_connector_unregister_all() there, but that's up to you. > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c > index 167c8d3..5580a90 100644 > --- a/drivers/gpu/drm/drm_drv.c > +++ b/drivers/gpu/drm/drm_drv.c > @@ -715,7 +715,11 @@ EXPORT_SYMBOL(drm_dev_unref); > * > * Register the DRM device @dev with the system, advertise device to > user-space * and start normal device operation. @dev must be allocated via > drm_dev_alloc() - * previously. > + * previously. Right after drm_dev_register() the driver should call > + * drm_connector_plug_all() to register all connectors in sysfs. This is s/drm_connector_plug_all/drm_connector_register_all/ > + * a separate call for backward compatibility with drivers still using > + * the deprecated ->load() callback, where connectors are registered from > within > + * the ->load() callback. > * > * Never call this twice on any device! > * > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h > index 42d9f4d..6a34117 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -2214,7 +2214,8 @@ void drm_connector_unregister(struct drm_connector > *connector); > > extern void drm_connector_cleanup(struct drm_connector *connector); > extern unsigned int drm_connector_index(struct drm_connector *connector); > -/* helper to unregister all connectors from sysfs for device */ > +/* helpers to {un}register all connectors from sysfs for device */ > +extern int drm_connector_register_all(struct drm_device *dev); > extern void drm_connector_unregister_all(struct drm_device *dev); > > extern int drm_bridge_add(struct drm_bridge *bridge); -- Regards, Laurent Pinchart