From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lothar =?UTF-8?B?V2HDn21hbm4=?= Subject: Re: [PATCH] drm/bridge: Fix lvds-encoder since the panel_bridge rework. Date: Wed, 15 Nov 2017 10:59:58 +0100 Message-ID: <20171115105958.4941720c@karo-electronics.de> References: <20171114191647.22207-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtprelay09.ispgateway.de (smtprelay09.ispgateway.de [134.119.228.112]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B3306E267 for ; Wed, 15 Nov 2017 10:00:06 +0000 (UTC) In-Reply-To: <20171114191647.22207-1-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt Cc: Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org SGksCgpPbiBUdWUsIDE0IE5vdiAyMDE3IDExOjE2OjQ3IC0wODAwIEVyaWMgQW5ob2x0IHdyb3Rl Ogo+IFRoZSBwYW5lbF9icmlkZ2UgYnJpZGdlIGF0dGFjaGVzIHRvIHRoZSBwYW5lbCdzIE9GIG5v ZGUsIG5vdCB0aGUKPiBsdmRzLWVuY29kZXIncyBub2RlLiAgUHV0IGluIGEgbGl0dGxlIG5vLW9w IGJyaWRnZSBvZiBvdXIgb3duIHNvIHRoYXQKPiBvdXIgY29uc3VtZXJzIGNhbiBzdGlsbCBmaW5k IGEgYnJpZGdlIHdoZXJlIHRoZXkgZXhwZWN0Lgo+IAo+IFRoaXMgYWxzbyBmaXhlcyBhbiB1bmlu dGVuZGVkIHVucmVnaXN0cmF0aW9uIGFuZCBsZWFrIG9mIHRoZQo+IHBhbmVsLWJyaWRnZSBvbiBt b2R1bGUgcmVtb3ZlLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9s dC5uZXQ+Cj4gRml4ZXM6IDEzZGZjMDU0MGE1NyAoImRybS9icmlkZ2U6IFJlZmFjdG9yIG91dCB0 aGUgcGFuZWwgd3JhcHBlciBmcm9tIHRoZSBsdmRzLWVuY29kZXIgYnJpCj4gZGdlLiIpCj4gLS0t Cj4gCj4gTm90ZTogSSBoYXZlbid0IGFjdHVhbGx5IHRlc3RlZCB0aGlzIHBhdGNoISAgSG9wZSBp dCBoZWxwcywgdGhvdWdoLgo+IAo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2x2ZHMtZW5jb2Rl ci5jIHwgNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KPiAgMSBmaWxlIGNo YW5nZWQsIDQxIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbHZkcy1lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL2x2ZHMtZW5jb2Rlci5jCj4gaW5kZXggMDkwM2JhNTc0ZjYxLi43NWIwZDNmNmU0ZGUg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sdmRzLWVuY29kZXIuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbHZkcy1lbmNvZGVyLmMKPiBAQCAtMTMsMTMgKzEz LDM3IEBACj4gIAo+ICAjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KPiAgCj4gK3N0cnVjdCBs dmRzX2VuY29kZXIgewo+ICsJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOwo+ICsJc3RydWN0IGRy bV9icmlkZ2UgKnBhbmVsX2JyaWRnZTsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbHZkc19lbmNv ZGVyX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgbHZk c19lbmNvZGVyICpsdmRzX2VuY29kZXIgPSBjb250YWluZXJfb2YoYnJpZGdlLAo+ICsJCQkJCQkJ IHN0cnVjdCBsdmRzX2VuY29kZXIsCj4gKwkJCQkJCQkgYnJpZGdlKTsKPiArCj4gKwlyZXR1cm4g ZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBsdmRzX2VuY29kZXItPnBhbmVsX2Jy aWRnZSwKPiArCQkJCSBicmlkZ2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9icmlk Z2VfZnVuY3MgZnVuY3MgPSB7Cj4gKwkuYXR0YWNoID0gbHZkc19lbmNvZGVyX2F0dGFjaCwKPiAr fTsKPiArCj4gIHN0YXRpYyBpbnQgbHZkc19lbmNvZGVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gIHsKPiAgCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydDsKPiAgCXN0cnVj dCBkZXZpY2Vfbm9kZSAqZW5kcG9pbnQ7Cj4gIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhbmVsX25v ZGU7Cj4gIAlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKPiAtCXN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2U7Cj4gKwlzdHJ1Y3QgbHZkc19lbmNvZGVyICpsdmRzX2VuY29kZXI7Cj4gKwo+ICsJbHZk c19lbmNvZGVyID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbHZkc19lbmNvZGVy KSwKPiArCQkJCSAgICBHRlBfS0VSTkVMKTsKPiArCWlmICghbHZkc19lbmNvZGVyKQo+ICsJCXJl dHVybiAtRU5PTUVNOwo+ICAKPiAgCS8qIExvY2F0ZSB0aGUgcGFuZWwgRFQgbm9kZS4gKi8KPiAg CXBvcnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChwZGV2LT5kZXYub2Zfbm9kZSwgMSk7Cj4g QEAgLTQ5LDIwICs3MywzMCBAQCBzdGF0aWMgaW50IGx2ZHNfZW5jb2Rlcl9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+ICAJfQo+ ICAKPiAtCWJyaWRnZSA9IGRybV9wYW5lbF9icmlkZ2VfYWRkKHBhbmVsLCBEUk1fTU9ERV9DT05O RUNUT1JfTFZEUyk7Cj4gLQlpZiAoSVNfRVJSKGJyaWRnZSkpCj4gLQkJcmV0dXJuIFBUUl9FUlIo YnJpZGdlKTsKPiArCWx2ZHNfZW5jb2Rlci0+cGFuZWxfYnJpZGdlID0KPiArCQlkZXZtX2RybV9w YW5lbF9icmlkZ2VfYWRkKCZwZGV2LT5kZXYsCj4gKwkJCQkJICBwYW5lbCwgRFJNX01PREVfQ09O TkVDVE9SX0xWRFMpOwo+ICsJaWYgKElTX0VSUihsdmRzX2VuY29kZXItPnBhbmVsX2JyaWRnZSkp Cj4gKwkJcmV0dXJuIFBUUl9FUlIobHZkc19lbmNvZGVyLT5wYW5lbF9icmlkZ2UpOwo+ICsKPiAr CS8qIFRoZSBwYW5lbF9icmlkZ2UgYnJpZGdlIGlzIGF0dGFjaGVkIHRvIHRoZSBwYW5lbCdzIG9m X25vZGUsCj4gKwkgKiBidXQgd2UgbmVlZCBhIGJyaWRnZSBhdHRhY2hlZCB0byBvdXIgb2Zfbm9k ZSBmb3Igb3VyIHVzZXIKPiArCSAqIHRvIGxvb2sgdXAuCj4gKwkgKi8KPiArCWx2ZHNfZW5jb2Rl ci0+YnJpZGdlLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKPiArCWx2ZHNfZW5jb2Rlci0+ YnJpZGdlLmZ1bmNzID0gJmZ1bmNzOwo+ICsJZHJtX2JyaWRnZV9hZGQoJmx2ZHNfZW5jb2Rlci0+ YnJpZGdlKTsKPiAgCj4gLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBicmlkZ2UpOwo+ICsJ cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbHZkc19lbmNvZGVyKTsKPiAgCj4gIAlyZXR1cm4g MDsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBsdmRzX2VuY29kZXJfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIHsKPiAtCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCXN0cnVjdCBsdmRzX2VuY29kZXIgKmx2ZHNf ZW5jb2RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICAKPiAtCWRybV9icmlkZ2Vf cmVtb3ZlKGJyaWRnZSk7Cj4gKwlkcm1fYnJpZGdlX3JlbW92ZSgmbHZkc19lbmNvZGVyLT5icmlk Z2UpOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4KVGVzdGVkLWJ5OiBMb3RoYXIgV2HDn21hbm4g PExXQEtBUk8tZWxlY3Ryb25pY3MuZGU+CgoKTG90aGFyIFdhw59tYW5uCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757038AbdKOKAL convert rfc822-to-8bit (ORCPT ); Wed, 15 Nov 2017 05:00:11 -0500 Received: from smtprelay09.ispgateway.de ([134.119.228.112]:32801 "EHLO smtprelay09.ispgateway.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753385AbdKOKAH (ORCPT ); Wed, 15 Nov 2017 05:00:07 -0500 Date: Wed, 15 Nov 2017 10:59:58 +0100 From: Lothar =?UTF-8?B?V2HDn21hbm4=?= To: Eric Anholt Cc: dri-devel@lists.freedesktop.org, Archit Taneja , Andrzej Hajda , Laurent Pinchart , linux-kernel@vger.kernel.org Subject: Re: [PATCH] drm/bridge: Fix lvds-encoder since the panel_bridge rework. Message-ID: <20171115105958.4941720c@karo-electronics.de> In-Reply-To: <20171114191647.22207-1-eric@anholt.net> References: <20171114191647.22207-1-eric@anholt.net> Organization: Ka-Ro electronics GmbH MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT X-Df-Sender: bHdAa2Fyby1lbGVjdHJvbmljcy5kZQ== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On Tue, 14 Nov 2017 11:16:47 -0800 Eric Anholt wrote: > The panel_bridge bridge attaches to the panel's OF node, not the > lvds-encoder's node. Put in a little no-op bridge of our own so that > our consumers can still find a bridge where they expect. > > This also fixes an unintended unregistration and leak of the > panel-bridge on module remove. > > Signed-off-by: Eric Anholt > Fixes: 13dfc0540a57 ("drm/bridge: Refactor out the panel wrapper from the lvds-encoder bri > dge.") > --- > > Note: I haven't actually tested this patch! Hope it helps, though. > > drivers/gpu/drm/bridge/lvds-encoder.c | 48 ++++++++++++++++++++++++++++++----- > 1 file changed, 41 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/lvds-encoder.c b/drivers/gpu/drm/bridge/lvds-encoder.c > index 0903ba574f61..75b0d3f6e4de 100644 > --- a/drivers/gpu/drm/bridge/lvds-encoder.c > +++ b/drivers/gpu/drm/bridge/lvds-encoder.c > @@ -13,13 +13,37 @@ > > #include > > +struct lvds_encoder { > + struct drm_bridge bridge; > + struct drm_bridge *panel_bridge; > +}; > + > +static int lvds_encoder_attach(struct drm_bridge *bridge) > +{ > + struct lvds_encoder *lvds_encoder = container_of(bridge, > + struct lvds_encoder, > + bridge); > + > + return drm_bridge_attach(bridge->encoder, lvds_encoder->panel_bridge, > + bridge); > +} > + > +static struct drm_bridge_funcs funcs = { > + .attach = lvds_encoder_attach, > +}; > + > static int lvds_encoder_probe(struct platform_device *pdev) > { > struct device_node *port; > struct device_node *endpoint; > struct device_node *panel_node; > struct drm_panel *panel; > - struct drm_bridge *bridge; > + struct lvds_encoder *lvds_encoder; > + > + lvds_encoder = devm_kzalloc(&pdev->dev, sizeof(*lvds_encoder), > + GFP_KERNEL); > + if (!lvds_encoder) > + return -ENOMEM; > > /* Locate the panel DT node. */ > port = of_graph_get_port_by_id(pdev->dev.of_node, 1); > @@ -49,20 +73,30 @@ static int lvds_encoder_probe(struct platform_device *pdev) > return -EPROBE_DEFER; > } > > - bridge = drm_panel_bridge_add(panel, DRM_MODE_CONNECTOR_LVDS); > - if (IS_ERR(bridge)) > - return PTR_ERR(bridge); > + lvds_encoder->panel_bridge = > + devm_drm_panel_bridge_add(&pdev->dev, > + panel, DRM_MODE_CONNECTOR_LVDS); > + if (IS_ERR(lvds_encoder->panel_bridge)) > + return PTR_ERR(lvds_encoder->panel_bridge); > + > + /* The panel_bridge bridge is attached to the panel's of_node, > + * but we need a bridge attached to our of_node for our user > + * to look up. > + */ > + lvds_encoder->bridge.of_node = pdev->dev.of_node; > + lvds_encoder->bridge.funcs = &funcs; > + drm_bridge_add(&lvds_encoder->bridge); > > - platform_set_drvdata(pdev, bridge); > + platform_set_drvdata(pdev, lvds_encoder); > > return 0; > } > > static int lvds_encoder_remove(struct platform_device *pdev) > { > - struct drm_bridge *bridge = platform_get_drvdata(pdev); > + struct lvds_encoder *lvds_encoder = platform_get_drvdata(pdev); > > - drm_bridge_remove(bridge); > + drm_bridge_remove(&lvds_encoder->bridge); > > return 0; > } > Tested-by: Lothar Waßmann Lothar Waßmann