From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2C019C43381 for ; Fri, 15 Mar 2019 13:48:20 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id EFA3E218C3 for ; Fri, 15 Mar 2019 13:48:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="jo0mC7w4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EFA3E218C3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=/UJ57/22RiMtb18JQU6J9iyoAgVopzaH92cT0FbFc1s=; b=jo0mC7w48wHBqY +4O+SPeacMOkG5jgNmTtzSJCziq3XvdZWZNZsKXlNukyWeI4i6Upvp6+7COkx9mj+CgKuUp+Pz2m+ OGbOJQj0peeUB9tHktGtMdJMkdHGkoCcEF87E/kJs8g6FFoayauFfhExmMA/0y88C+fXKopBfP6Br 1TumQ1ggQ1d1qxvwFU3oqFOxqhpF03NImD/efSHdUYdjQG1mNiBEgEchUu1ZZ7Di0WAYHuXQ46QID UwzvvdEBtJneE++tor3YDIOODrzGwYXXZWUOMBhYKmUrlpNv7lu+6qNJluPh1HJPAJjU5ORnwLmfo +b6HAV1fsRNZt4+/rpjw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h4nC4-0002F6-Fq; Fri, 15 Mar 2019 13:48:16 +0000 Received: from relay1-d.mail.gandi.net ([217.70.183.193]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h4nC1-0002El-ET for linux-arm-kernel@lists.infradead.org; Fri, 15 Mar 2019 13:48:14 +0000 X-Originating-IP: 90.88.22.102 Received: from aptenodytes (aaubervilliers-681-1-80-102.w90-88.abo.wanadoo.fr [90.88.22.102]) (Authenticated sender: paul.kocialkowski@bootlin.com) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 3D92224000E; Fri, 15 Mar 2019 13:48:08 +0000 (UTC) Message-ID: <3206b448f031ce22acc2db979781f19c1dded20c.camel@bootlin.com> Subject: Re: [linux-sunxi] [PATCH 3/6] drm/sun4i: dsi: Add bridge support From: Paul Kocialkowski To: Maxime Ripard Date: Fri, 15 Mar 2019 14:48:07 +0100 In-Reply-To: <20190315134555.ekpywymjx3xqmdhf@flea> References: <20190315130825.9005-1-jagan@amarulasolutions.com> <20190315130825.9005-4-jagan@amarulasolutions.com> <20190315134555.ekpywymjx3xqmdhf@flea> Organization: Bootlin User-Agent: Evolution 3.30.5 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190315_064813_779993_28D8A11A X-CRM114-Status: GOOD ( 26.03 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , devicetree@vger.kernel.org, David Airlie , linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Andrzej Hajda , Chen-Yu Tsai , Rob Herring , jagan@amarulasolutions.com, Daniel Vetter , Michael Trimarchi , linux-amarula@amarulasolutions.com, linux-arm-kernel@lists.infradead.org, Laurent Pinchart Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi, On Fri, 2019-03-15 at 14:45 +0100, Maxime Ripard wrote: > On Fri, Mar 15, 2019 at 02:32:55PM +0100, Paul Kocialkowski wrote: > > Hi, > > > > On Fri, 2019-03-15 at 18:38 +0530, Jagan Teki wrote: > > > Some display panels would come up with a non-DSI output which > > > can have an option to connect DSI interface by means of bridge > > > convertor. > > > > > > This DSI to non-DSI bridge convertor would require a bridge > > > driver that would communicate the DSI controller for bridge > > > functionalities. > > > > > > So, add support for bridge functionalities in Allwinner DSI > > > controller. > > > > See a few comments below. > > > > > Signed-off-by: Jagan Teki > > > --- > > > drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 65 +++++++++++++++++++------- > > > drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h | 1 + > > > 2 files changed, 49 insertions(+), 17 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c > > > index 0960b96b62cc..64d74313b842 100644 > > > --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c > > > +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c > > > @@ -781,6 +781,9 @@ static void sun6i_dsi_encoder_enable(struct drm_encoder *encoder) > > > if (!IS_ERR(dsi->panel)) > > > drm_panel_prepare(dsi->panel); > > > > > > + if (!IS_ERR(dsi->bridge)) > > > + drm_bridge_pre_enable(dsi->bridge); > > > + > > > /* > > > * FIXME: This should be moved after the switch to HS mode. > > > * > > > @@ -796,6 +799,9 @@ static void sun6i_dsi_encoder_enable(struct drm_encoder *encoder) > > > if (!IS_ERR(dsi->panel)) > > > drm_panel_enable(dsi->panel); > > > > > > + if (!IS_ERR(dsi->bridge)) > > > + drm_bridge_enable(dsi->bridge); > > > + > > > sun6i_dsi_start(dsi, DSI_START_HSC); > > > > > > udelay(1000); > > > @@ -812,6 +818,9 @@ static void sun6i_dsi_encoder_disable(struct drm_encoder *encoder) > > > if (!IS_ERR(dsi->panel)) { > > > drm_panel_disable(dsi->panel); > > > drm_panel_unprepare(dsi->panel); > > > + } else if (!IS_ERR(dsi->bridge)) { > > > + drm_bridge_disable(dsi->bridge); > > > + drm_bridge_post_disable(dsi->bridge); > > > } > > > > > > phy_power_off(dsi->dphy); > > > @@ -973,11 +982,16 @@ static int sun6i_dsi_attach(struct mipi_dsi_host *host, > > > struct sun6i_dsi *dsi = host_to_sun6i_dsi(host); > > > > > > dsi->device = device; > > > - dsi->panel = of_drm_find_panel(device->dev.of_node); > > > - if (IS_ERR(dsi->panel)) > > > - return PTR_ERR(dsi->panel); > > > > > > - dev_info(host->dev, "Attached device %s\n", device->name); > > > + dsi->bridge = of_drm_find_bridge(device->dev.of_node); > > > + if (!dsi->bridge) { > > > > You are using IS_ERR to check that the bridge is alive in the changes > > above, but switch to checking that it's non-NULL at this point. > > > > Are both guaranteed to be interchangeable? > > They aren't. Any ERR_PTR will be !NULL > > > > + dsi->panel = of_drm_find_panel(device->dev.of_node); > > > + if (IS_ERR(dsi->panel)) > > > + return PTR_ERR(dsi->panel); > > > + } > > > > You should probably use drm_of_find_panel_or_bridge instead of > > duplicating the logic here. > > Or we can even use the drm_panel_bridge_add to simplify things. Indeed, I was just looking at that and it seems to be specifically tailored for this use case. Cheers, Paul -- Paul Kocialkowski, Bootlin Embedded Linux and kernel engineering https://bootlin.com _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel