From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752573AbdF2Jmf (ORCPT ); Thu, 29 Jun 2017 05:42:35 -0400 Received: from mailout4.w1.samsung.com ([210.118.77.14]:20324 "EHLO mailout4.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751758AbdF2Jm3 (ORCPT ); Thu, 29 Jun 2017 05:42:29 -0400 X-AuditID: cbfec7ef-f796a6d00000373c-50-5954cb84580b Subject: Re: [PATCH 5/8] drm/vc4: Delay DSI host registration until the panel has probed. To: Eric Anholt , dri-devel@lists.freedesktop.org, Archit Taneja , Laurent Pinchart , Thierry Reding Cc: linux-kernel@vger.kernel.org From: Andrzej Hajda Message-id: <957e63b0-0c95-a94b-57b3-aae3a18766b7@samsung.com> Date: Thu, 29 Jun 2017 11:42:24 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 MIME-version: 1.0 In-reply-to: <20170627195839.3338-6-eric@anholt.net> Content-type: text/plain; charset=utf-8 Content-transfer-encoding: 7bit Content-language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrFKsWRmVeSWpSXmKPExsWy7djP87otp0MiDabutLFo6njLanHl63s2 iwONlxktOicuYbe4vGsOm8XPXfNYHNg8mt4fY/O43NfL5LFz1l12j9kdM1k97ncfZ/L4vEku gC2KyyYlNSezLLVI3y6BK6PxaCdLwXKpis7dF9kaGG+LdDFyckgImEgcut/GBmGLSVy4tx7I 5uIQEljGKPHl5mF2COczo8T+i68ZYTqu7WxlhKs6tXcJE4TzjFHi3sQVzCBVwgLREotvTgSb JSJwkVFi4s2J7CAJZgEFiV/3NrGC2GwCmhJ/N98EKuLg4BWwk3iyIxMkzCKgKjH5+zGwOaIC ERKLJkG08goISvyYfI8FxOYEumLy0RWMECM1JV58mcQCYctLbF7zlhnCFpdobr3JAnH1NnaJ 80u1QVZJCMhKbDrADBF2kbg28QMrhC0s8er4FnYIW0ais+Mg2F8SAt2MEp/6T7BDOFMYJf59 mAHVbS1x+PhFVohlfBKTtk1nhljAK9HRJgRR4iFx89pjqBscJe59/w8N0o2MEkcnH2eawKgw C8lvs5D8MwvJP7OQ/LOAkWUVo0hqaXFuemqxoV5xYm5xaV66XnJ+7iZGYAo6/e/4+x2MT5tD DjEKcDAq8fAyrA2OFGJNLCuuzD3EKMHBrCTC694QEinEm5JYWZValB9fVJqTWnyIUZqDRUmc l/fUtQghgfTEktTs1NSC1CKYLBMHp1QDI6vp64n+P+o494lx1Kk+X+t2W/zKd42bip5rP1tx xsbPl68Ov9Opx7Fru92u3CPCogdmuEl2RDEeN2ab/PJ211K3KQ/ebFgXeU2dW2vRgt+rp+6e mdqzx/xr1NugpZVqLHJCvXt1RRbvfNLfytTo+mdB1569wvk9dr5S/z70bQs6HVh2/f5WKyWW 4oxEQy3mouJEAGOrx289AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrOIsWRmVeSWpSXmKPExsVy+t/xK7qNp0MiDU7et7Zo6njLanHl63s2 iwONlxktOicuYbe4vGsOm8XPXfNYHNg8mt4fY/O43NfL5LFz1l12j9kdM1k97ncfZ/L4vEku gC3KzSYjNTEltUghNS85PyUzL91WKTTETddCSSEvMTfVVilC1zckSEmhLDGnFMgzMkADDs4B 7sFK+nYJbhmNRztZCpZLVXTuvsjWwHhbpIuRk0NCwETi2s5WRghbTOLCvfVsXYxcHEICSxgl uhf/YIVwnjFKvP3wmh2kSlggWuLA163MILaIwEVGiTP/bEFsZgEFiV/3NkE1bGSUOLroFVgD m4CmxN/NN4HGcnDwCthJPNmRCRJmEVCVmPz9GNgcUYEIiV3XD7CC2LwCghI/Jt9jAbE5ga6b fHQFI0grs4C6xJQpuRCr5CU2r3nLDGGLSzS33mSZwCg4C0n3LISOWUg6ZiHpWMDIsopRJLW0 ODc9t9hQrzgxt7g0L10vOT93EyMwErcd+7l5B+OljcGHGAU4GJV4eFesCo4UYk0sK67MPcQo wcGsJMLr3hASKcSbklhZlVqUH19UmpNafIjRFOi1icxSosn5wCSRVxJvaGJobmloZGxhYW5k pCTOW/LhSriQQHpiSWp2ampBahFMHxMHp1QDo6jt/PmL3aQ3BrhsfVkcGhXadizqVNwh11MX l51SlU0o8WJh3Dmb+7yxRkn51P8aKyolj2WsMcmIZbuTVDH1pcEqJgXjAP7gx1f03Y/P387x 7o3+tOacS1X+/dp2i/3jUmazHs68umjGEeEdeh8u7p9+rWl/g8gEjYoHdRfcpvhNnlnWvG7j SSWW4oxEQy3mouJEAPQ8ae7aAgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170629094226eucas1p1e1ff1a3f497469ddd26dfb845d908338 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRvsgrw=?= =?UTF-8?B?7ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRtTYW1z?= =?UTF-8?B?dW5nIEVsZWN0cm9uaWNzG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDAyQ0QwMjczOTI=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170627195849epcas2p1148b2e6f2587f53ca378928a69abe8ec X-RootMTR: 20170627195849epcas2p1148b2e6f2587f53ca378928a69abe8ec References: <20170627195839.3338-1-eric@anholt.net> <20170627195839.3338-6-eric@anholt.net> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 27.06.2017 21:58, Eric Anholt wrote: > The vc4 driver was unusual in that it was delaying the panel lookup > until the attach step, while most DSI hosts will -EPROBE_DEFER until > they get a panel. > > Signed-off-by: Eric Anholt > --- > drivers/gpu/drm/vc4/vc4_dsi.c | 40 ++++++++++++++++------------------------ > 1 file changed, 16 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c > index fca4d7fd677e..31627522dd8c 100644 > --- a/drivers/gpu/drm/vc4/vc4_dsi.c > +++ b/drivers/gpu/drm/vc4/vc4_dsi.c > @@ -33,6 +33,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -504,7 +505,6 @@ struct vc4_dsi { > struct mipi_dsi_host dsi_host; > struct drm_encoder *encoder; > struct drm_bridge *bridge; > - bool is_panel_bridge; > > void __iomem *regs; > > @@ -1290,7 +1290,6 @@ static int vc4_dsi_host_attach(struct mipi_dsi_host *host, > struct mipi_dsi_device *device) > { > struct vc4_dsi *dsi = host_to_dsi(host); > - int ret = 0; > > dsi->lanes = device->lanes; > dsi->channel = device->channel; > @@ -1325,34 +1324,12 @@ static int vc4_dsi_host_attach(struct mipi_dsi_host *host, > return 0; > } > > - dsi->bridge = of_drm_find_bridge(device->dev.of_node); > - if (!dsi->bridge) { > - struct drm_panel *panel = > - of_drm_find_panel(device->dev.of_node); > - > - dsi->bridge = drm_panel_bridge_add(panel, > - DRM_MODE_CONNECTOR_DSI); > - if (IS_ERR(dsi->bridge)) { > - ret = PTR_ERR(dsi->bridge); > - dsi->bridge = NULL; > - return ret; > - } > - dsi->is_panel_bridge = true; > - } > - > return drm_bridge_attach(dsi->encoder, dsi->bridge, NULL); > } > > static int vc4_dsi_host_detach(struct mipi_dsi_host *host, > struct mipi_dsi_device *device) > { > - struct vc4_dsi *dsi = host_to_dsi(host); > - > - if (dsi->is_panel_bridge) { > - drm_panel_bridge_remove(dsi->bridge); > - dsi->bridge = NULL; > - } > - > return 0; > } > > @@ -1496,6 +1473,7 @@ static int vc4_dsi_bind(struct device *dev, struct device *master, void *data) > struct vc4_dev *vc4 = to_vc4_dev(drm); > struct vc4_dsi *dsi; > struct vc4_dsi_encoder *vc4_dsi_encoder; > + struct drm_panel *panel; > const struct of_device_id *match; > dma_cap_mask_t dma_mask; > int ret; > @@ -1599,6 +1577,20 @@ static int vc4_dsi_bind(struct device *dev, struct device *master, void *data) > return ret; > } > > + ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0, > + &panel, &dsi->bridge); > + if (ret) { > + dev_info(dev, "find panel: %d\n", ret); Message should probably mention also bridge. Beside this: Reviewed-by: Andrzej Hajda -- Regards Andrzej > + return ret; > + } > + > + if (panel) { > + dsi->bridge = devm_drm_panel_bridge_add(dev, panel, > + DRM_MODE_CONNECTOR_DSI); > + if (IS_ERR(dsi->bridge)) > + return PTR_ERR(dsi->bridge); > + } > + > /* The esc clock rate is supposed to always be 100Mhz. */ > ret = clk_set_rate(dsi->escape_clock, 100 * 1000000); > if (ret) {