From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752081AbdHDJER (ORCPT ); Fri, 4 Aug 2017 05:04:17 -0400 Received: from mail.free-electrons.com ([62.4.15.54]:52469 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751304AbdHDJEO (ORCPT ); Fri, 4 Aug 2017 05:04:14 -0400 Date: Fri, 4 Aug 2017 11:04:12 +0200 From: Boris Brezillon To: Eric Anholt Cc: dri-devel@lists.freedesktop.org, Archit Taneja , Andrzej Hajda , Laurent Pinchart , Thierry Reding , linux-kernel@vger.kernel.org Subject: Re: [PATCH v5 3/6] drm/vc4: Delay DSI host registration until the panel has probed. Message-ID: <20170804110412.6504cbe3@bbrezillon> In-Reply-To: <20170718210510.12229-3-eric@anholt.net> References: <20170718210510.12229-1-eric@anholt.net> <20170718210510.12229-3-eric@anholt.net> X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 18 Jul 2017 14:05:07 -0700 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. > > v2: Drop a debug message that slipped in. > > Signed-off-by: Eric Anholt > Reviewed-by: Andrzej Hajda (v1) Reviewed-by: Boris Brezillon > --- > drivers/gpu/drm/vc4/vc4_dsi.c | 38 ++++++++++++++------------------------ > 1 file changed, 14 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c > index 57213f4e3c72..769f247c52a9 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; > > @@ -1289,7 +1289,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; > @@ -1324,34 +1323,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; > } > > @@ -1495,6 +1472,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; > @@ -1598,6 +1576,18 @@ 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) > + 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) {