From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [RFC PATCH 2/3] drm: bridge: panel: allow override of the bus format Date: Tue, 20 Mar 2018 15:56:52 +0200 Message-ID: <7015227.p44CVkfgjM@avalon> References: <20180317221525.18534-1-peda@axentia.se> <20180317221525.18534-3-peda@axentia.se> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180317221525.18534-3-peda@axentia.se> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Peter Rosin Cc: Mark Rutland , devicetree@vger.kernel.org, David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rob Herring , Daniel Vetter List-Id: devicetree@vger.kernel.org SGkgUGV0ZXIsCgpUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4KCk9uIFN1bmRheSwgMTggTWFyY2gg MjAxOCAwMDoxNToyNCBFRVQgUGV0ZXIgUm9zaW4gd3JvdGU6Cj4gVXNlZnVsIGlmIHRoZSBicmlk Z2UgZG9lcyBzb21lIGtpbmQgb2YgY29udmVyc2lvbiBvZiB0aGUgYnVzIGZvcm1hdC4KPiAKPiBT aWduZWQtb2ZmLWJ5OiBQZXRlciBSb3NpbiA8cGVkYUBheGVudGlhLnNlPgo+IC0tLQo+ICBkcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3BhbmVsLmMgfCAyMiArKysrKysrKysrKysrKysrKysrKystCj4g IGluY2x1ZGUvZHJtL2RybV9icmlkZ2UuaCAgICAgICB8ICAxICsKPiAgMiBmaWxlcyBjaGFuZ2Vk LCAyMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvcGFuZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFuZWwu Ywo+IGluZGV4IDZkOTlkNGEzYmViMy4uY2NlZjAyODNmZjQxIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvcGFuZWwuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv cGFuZWwuYwo+IEBAIC0yMiw2ICsyMiw3IEBAIHN0cnVjdCBwYW5lbF9icmlkZ2Ugewo+ICAJc3Ry dWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOwo+ICAJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7 Cj4gIAl1MzIgY29ubmVjdG9yX3R5cGU7Cj4gKwl1MzIgYnVzX2Zvcm1hdDsKPiAgfTsKPiAKPiAg c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFuZWxfYnJpZGdlICoKPiBAQCAtNDAsOCArNDEsMTUgQEAg c3RhdGljIGludCBwYW5lbF9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QKPiBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpIHsKPiAgCXN0cnVjdCBwYW5lbF9icmlkZ2UgKnBhbmVsX2Jy aWRnZSA9Cj4gIAkJZHJtX2Nvbm5lY3Rvcl90b19wYW5lbF9icmlkZ2UoY29ubmVjdG9yKTsKPiAr CWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJtX3BhbmVsX2dldF9tb2RlcyhwYW5lbF9icmlkZ2Ut PnBhbmVsKTsKPiArCj4gKwlpZiAocGFuZWxfYnJpZGdlLT5idXNfZm9ybWF0KQo+ICsJCWRybV9k aXNwbGF5X2luZm9fc2V0X2J1c19mb3JtYXRzKCZjb25uZWN0b3ItPmRpc3BsYXlfaW5mbywKPiAr CQkJCQkJICZwYW5lbF9icmlkZ2UtPmJ1c19mb3JtYXQsIDEpOwoKV2hpbGUgSSBhZ3JlZSB3aXRo IHRoZSBwcm9ibGVtIHN0YXRlbWVudCBhbmQsIHRvIHNvbWUgZXh0ZW50LCB0aGUgRFQgYmluZGlu Z3MsIApJIGRvbid0IHRoaW5rIHRoaXMgaXMgdGhlIHJpZ2h0IGltcGxlbWVudGF0aW9uLiBZb3Un dmUgY29ycmVjdGx5IG5vdGVkIHRoYXQgCmRpc3BsYXkgY29udHJvbGxlciBzaG91bGRuJ3QgYmxp bmRseSB1c2UgdGhlIGZvcm1hdHMgcmVwb3J0ZWQgYnkgdGhlIHBhbmVsIAp0aHJvdWdoIHRoZSBj b25uZWN0b3IgZm9ybWF0cywgYW5kIHRoYXQgaGFja2luZyB0aGUgcGFuZWwgZHJpdmVyIHRvIG92 ZXJyaWRlIAp0aGUgZm9ybWF0cyBpc24ndCBhIGdvb2QgaWRlYSwgc28gSSB3b3VsZG4ndCBvdmVy cmlkZSB0aGUgZm9ybWF0cyByZXBvcnRlZCBieSAKdGhlIGNvbm5lY3Rvci4gSSB3b3VsZCBpbnN0 ZWFkIGV4dGVuZCB0aGUgZHJtX2JyaWRnZSBBUEkgdG8gcmVwb3J0IGZvcm1hdHMgYXQgCmJyaWRn ZSBpbnB1dHMuIFRoaXMgd291bGQgYmUgbW9yZSBnZW5lcmljIGFuZCBhbGxvdyBlYWNoIGJyaWRn ZSB0byBjb25maWd1cmUgCml0c2VsZiBhY2NvcmRpbmcgdG8gdGhlIG5leHQgYnJpZGdlIGluIHRo ZSBjaGFpbi4KCkknbSBub3Qgc3VyZSB3aGV0aGVyIHRoaXMgQVBJIGV4dGVuc2lvbiBzaG91bGQg YmUgaW4gdGhlIGZvcm0gb2YgYSBuZXcgYnJpZGdlIApmdW5jdGlvbiwgb3IgaWYgdGhlIGZvcm1h dHMgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgZHJtX2JyaWRnZSBzdHJ1Y3R1cmUgCmRpcmVjdGx5 IGFzIGRvbmUgZm9yIGNvbm5lY3RvcnMgaW4gdGhlIGRpc3BsYXkgaW5mbyBzdHJ1Y3R1cmUuIEkn bSB0ZW1wdGVkIGJ5IAp0aGUgZm9ybWVyLCBidXQgSSdtIG9wZW4gdG8gZGlzY3Vzc2lvbnMuCgo+ IC0JcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMocGFuZWxfYnJpZGdlLT5wYW5lbCk7Cj4gKwly ZXR1cm4gcmV0Owo+ICB9Cj4gCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MKPiBAQCAtMjAzLDYgKzIxMSwxOCBAQCB2b2lkIGRybV9wYW5lbF9icmlkZ2Vf cmVtb3ZlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gfQo+ICBFWFBPUlRfU1lNQk9MKGRy bV9wYW5lbF9icmlkZ2VfcmVtb3ZlKTsKPiAKPiArdm9pZCBkcm1fcGFuZWxfYnJpZGdlX3NldF9i dXNfZm9ybWF0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsIHUzMgo+IGJ1c19mb3JtYXQpICt7 Cj4gKwlzdHJ1Y3QgcGFuZWxfYnJpZGdlICpwYW5lbF9icmlkZ2U7Cj4gKwo+ICsJaWYgKCFicmlk Z2UpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXBhbmVsX2JyaWRnZSA9IGRybV9icmlkZ2VfdG9fcGFu ZWxfYnJpZGdlKGJyaWRnZSk7Cj4gKwlwYW5lbF9icmlkZ2UtPmJ1c19mb3JtYXQgPSBidXNfZm9y bWF0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX3BhbmVsX2JyaWRnZV9zZXRfYnVzX2Zvcm1h dCk7Cj4gKwo+ICBzdGF0aWMgdm9pZCBkZXZtX2RybV9wYW5lbF9icmlkZ2VfcmVsZWFzZShzdHJ1 Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcykKPiAgewo+ICAJc3RydWN0IGRybV9icmlkZ2UgKipi cmlkZ2UgPSByZXM7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9icmlkZ2UuaCBiL2lu Y2x1ZGUvZHJtL2RybV9icmlkZ2UuaAo+IGluZGV4IDY4MmQwMWJhOTIwYy4uODE5MDNiOTJmMTg3 IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9icmlkZ2UuaAo+ICsrKyBiL2luY2x1ZGUv ZHJtL2RybV9icmlkZ2UuaAo+IEBAIC0yNjgsNiArMjY4LDcgQEAgdm9pZCBkcm1fYnJpZGdlX2Vu YWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKPiAgc3RydWN0IGRybV9icmlkZ2UgKmRy bV9wYW5lbF9icmlkZ2VfYWRkKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsLAo+ICAJCQkJCXUzMiBj b25uZWN0b3JfdHlwZSk7Cj4gIHZvaWQgZHJtX3BhbmVsX2JyaWRnZV9yZW1vdmUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSk7Cj4gK3ZvaWQgZHJtX3BhbmVsX2JyaWRnZV9zZXRfYnVzX2Zvcm1h dChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLCB1MzIKPiBidXNfZm9ybWF0KTsKPiBzdHJ1Y3Qg ZHJtX2JyaWRnZSAqZGV2bV9kcm1fcGFuZWxfYnJpZGdlX2FkZChzdHJ1Y3QgZGV2aWNlCj4gKmRl diwKPiAgCQkJCQkgICAgIHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsLAo+ICAJCQkJCSAgICAgdTMy IGNvbm5lY3Rvcl90eXBlKTsKCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753672AbeCTNzx (ORCPT ); Tue, 20 Mar 2018 09:55:53 -0400 Received: from galahad.ideasonboard.com ([185.26.127.97]:34089 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753227AbeCTNzr (ORCPT ); Tue, 20 Mar 2018 09:55:47 -0400 From: Laurent Pinchart To: Peter Rosin Cc: linux-kernel@vger.kernel.org, David Airlie , Rob Herring , Mark Rutland , Archit Taneja , Andrzej Hajda , Daniel Vetter , Gustavo Padovan , Sean Paul , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org Subject: Re: [RFC PATCH 2/3] drm: bridge: panel: allow override of the bus format Date: Tue, 20 Mar 2018 15:56:52 +0200 Message-ID: <7015227.p44CVkfgjM@avalon> Organization: Ideas on Board Oy In-Reply-To: <20180317221525.18534-3-peda@axentia.se> References: <20180317221525.18534-1-peda@axentia.se> <20180317221525.18534-3-peda@axentia.se> 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 Peter, Thank you for the patch. On Sunday, 18 March 2018 00:15:24 EET Peter Rosin wrote: > Useful if the bridge does some kind of conversion of the bus format. > > Signed-off-by: Peter Rosin > --- > drivers/gpu/drm/bridge/panel.c | 22 +++++++++++++++++++++- > include/drm/drm_bridge.h | 1 + > 2 files changed, 22 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c > index 6d99d4a3beb3..ccef0283ff41 100644 > --- a/drivers/gpu/drm/bridge/panel.c > +++ b/drivers/gpu/drm/bridge/panel.c > @@ -22,6 +22,7 @@ struct panel_bridge { > struct drm_connector connector; > struct drm_panel *panel; > u32 connector_type; > + u32 bus_format; > }; > > static inline struct panel_bridge * > @@ -40,8 +41,15 @@ static int panel_bridge_connector_get_modes(struct > drm_connector *connector) { > struct panel_bridge *panel_bridge = > drm_connector_to_panel_bridge(connector); > + int ret; > + > + ret = drm_panel_get_modes(panel_bridge->panel); > + > + if (panel_bridge->bus_format) > + drm_display_info_set_bus_formats(&connector->display_info, > + &panel_bridge->bus_format, 1); While I agree with the problem statement and, to some extent, the DT bindings, I don't think this is the right implementation. You've correctly noted that display controller shouldn't blindly use the formats reported by the panel through the connector formats, and that hacking the panel driver to override the formats isn't a good idea, so I wouldn't override the formats reported by the connector. I would instead extend the drm_bridge API to report formats at bridge inputs. This would be more generic and allow each bridge to configure itself according to the next bridge in the chain. I'm not sure whether this API extension should be in the form of a new bridge function, or if the formats should be stored in the drm_bridge structure directly as done for connectors in the display info structure. I'm tempted by the former, but I'm open to discussions. > - return drm_panel_get_modes(panel_bridge->panel); > + return ret; > } > > static const struct drm_connector_helper_funcs > @@ -203,6 +211,18 @@ void drm_panel_bridge_remove(struct drm_bridge *bridge) > } > EXPORT_SYMBOL(drm_panel_bridge_remove); > > +void drm_panel_bridge_set_bus_format(struct drm_bridge *bridge, u32 > bus_format) +{ > + struct panel_bridge *panel_bridge; > + > + if (!bridge) > + return; > + > + panel_bridge = drm_bridge_to_panel_bridge(bridge); > + panel_bridge->bus_format = bus_format; > +} > +EXPORT_SYMBOL(drm_panel_bridge_set_bus_format); > + > static void devm_drm_panel_bridge_release(struct device *dev, void *res) > { > struct drm_bridge **bridge = res; > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index 682d01ba920c..81903b92f187 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -268,6 +268,7 @@ void drm_bridge_enable(struct drm_bridge *bridge); > struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel, > u32 connector_type); > void drm_panel_bridge_remove(struct drm_bridge *bridge); > +void drm_panel_bridge_set_bus_format(struct drm_bridge *bridge, u32 > bus_format); > struct drm_bridge *devm_drm_panel_bridge_add(struct device > *dev, > struct drm_panel *panel, > u32 connector_type); -- Regards, Laurent Pinchart