Received: by 10.223.164.202 with SMTP id h10csp3001911wrb; Tue, 28 Nov 2017 04:53:06 -0800 (PST) X-Google-Smtp-Source: AGs4zMY+p2ErCSkggs0kV81rMFgfoOdYEBE1Fxe1Or2bFJpTBPbDrKCSha2g4itj9AU8B5f5q7Ux X-Received: by 10.84.197.35 with SMTP id m32mr7647310pld.214.1511873586788; Tue, 28 Nov 2017 04:53:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511873586; cv=none; d=google.com; s=arc-20160816; b=kAAEZxmu3MjQ7aovVYOVPTUxcL6SwhjalGHN+siE7SsyuH6D9WNvk4NAeMZ+qubAhX xhaRg4nNUrg+JFdq7tYczQ03iE8flm/Wt/muJqLLLvguAPKr5gCe53Jl67k8WEqQZm6Z 5KWt9yPLDd6Xysd+ZLmumsGRwr/65THqn7rE+Qw3G94KpsJzbTnVESUNA0olDWpQ2vex Ht2ruRtDvK9m6dOh0o+hW4c9dfjXQWQP6rqT9feyfFV2NQMwbz9PTdPUUhwEE/flwj4z uUcKB//8lLqU83VW6YFne5HOP++daCOkOJ7mb71ThCNZbSES5RBkEGV997Fw0+XgRM5o xWKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:organization:message-id:date:subject:cc:to :from:dkim-signature:arc-authentication-results; bh=5SOmfXmsBqa0QZWLk3gQCj8zoG/+qqDL4/1QTPgPbkg=; b=K1UpkMJkbjDRKlAyh/yEMuqp/34xQVX+UF3clOwyvh2qJgWAWIM4ym2ZvintOVEr0E xkfLi0b0HoK7jQXEs44m9oA0Bovo6l6FFriERGMF1qZ80WwbG7mDaDAhQLFAgm1N94d9 aEuTIYFcKRpCwdKrrgcg+tr+WP8XTZD4+AsYnYY3Tx6iVdY/g13XlRu7bcw3yCkZNfwu uen6YyamNa8kKnX/d88gQrD5vHuFluDbxB/9PbCob4x64ajmAaBg0MhrraYwPzA/ObMe 3XP28bUf4wFC4/k4nM9BDPulPoOPKO0n6ZTi7t1NaoxozqqKWydsW0ieWa3qA6V/J5BA kbNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=ZuDtjA5z; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v10si24634161plz.525.2017.11.28.04.52.54; Tue, 28 Nov 2017 04:53:06 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=ZuDtjA5z; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751505AbdK1Mvm (ORCPT + 76 others); Tue, 28 Nov 2017 07:51:42 -0500 Received: from galahad.ideasonboard.com ([185.26.127.97]:57234 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750829AbdK1Mvl (ORCPT ); Tue, 28 Nov 2017 07:51:41 -0500 Received: from avalon.localnet (dfj612ybrt5fhg77mgycy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:2e86:4862:ef6a:2804]) by galahad.ideasonboard.com (Postfix) with ESMTPSA id D31B02017E; Tue, 28 Nov 2017 13:50:03 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1511873403; bh=F2ySM3QSNmtaIYh2G+yTKKj0dYKW3DLDE4Q4jLMo9+Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZuDtjA5zkIhWQiFB4jxhwBe8RJhheVAOSSre28EIrEIoHXgaWzP7U/YZbNIde4LjV 2XznrgaqAu7+7FF6O8skDKBoAZGXSevVz9+653dml5A/TI+5WCy1TqBKEm+1+cRzpN JE4hxy/fX319VTZOXyC/KxsuYQdtNercYqA5b5N4= From: Laurent Pinchart To: Brian Norris Cc: Archit Taneja , Andrzej Hajda , David Airlie , Yannick Fertre , Philippe Cornu , Benjamin Gaignard , Vincent Abriou , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sean Paul , Nickey Yang , hl@rock-chips.com, linux-rockchip@lists.infradead.org, mka@chromium.org Subject: Re: [PATCH] drm/bridge/synopsis: stop clobbering drvdata Date: Tue, 28 Nov 2017 14:51:46 +0200 Message-ID: <1743921.AofnJoQ8Rz@avalon> Organization: Ideas on Board Oy In-Reply-To: <20171128010538.119114-1-briannorris@chromium.org> References: <20171128010538.119114-1-briannorris@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Brian, Thank you for the patch. I'd mention dw-mipi-dsi in the subject line as the directory contains the dw- hdmi driver as well that this patch doesn't touch. On Tuesday, 28 November 2017 03:05:38 EET Brian Norris wrote: > Bridge drivers/helpers shouldn't be clobbering the drvdata, since a > parent driver might need to own this. By parent driver I assume you mean a glue driver that binds to the SoC- specific compatible string for the DSI transmitter. > Instead, let's return our > 'dw_mipi_dsi' object and have callers pass that back to us for removal. > > Signed-off-by: Brian Norris Wouldn't it be cleaner to embed the dw_mipi_dsi structure in the parent- specific data structure (struct dw_mipi_dsi_stm and struct dw_mipi_dsi_rockchip when the "[PATCH v3 0/5] Update ROCKCHIP DSI driver that uses dw-mipi-dsi bridge" patch series will land) instead of allocating it dynamically ? We would then have a single object to track. > --- > drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 36 ++++++++++-------------- > drivers/gpu/drm/stm/dw_mipi_dsi-stm.c | 14 +++++++---- > include/drm/bridge/dw_mipi_dsi.h | 17 ++++++++----- > 3 files changed, 33 insertions(+), 34 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c > b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c index > d9cca4fd66ec..c39c7dce20ed 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c > @@ -922,8 +922,6 @@ __dw_mipi_dsi_probe(struct platform_device *pdev, > dsi->bridge.of_node = pdev->dev.of_node; > #endif > > - dev_set_drvdata(dev, dsi); > - > return dsi; > } > > @@ -935,23 +933,16 @@ static void __dw_mipi_dsi_remove(struct dw_mipi_dsi > *dsi) /* > * Probe/remove API, used from platforms based on the DRM bridge API. > */ > -int dw_mipi_dsi_probe(struct platform_device *pdev, > - const struct dw_mipi_dsi_plat_data *plat_data) > +struct dw_mipi_dsi * > +dw_mipi_dsi_probe(struct platform_device *pdev, > + const struct dw_mipi_dsi_plat_data *plat_data) > { > - struct dw_mipi_dsi *dsi; > - > - dsi = __dw_mipi_dsi_probe(pdev, plat_data); > - if (IS_ERR(dsi)) > - return PTR_ERR(dsi); > - > - return 0; > + return __dw_mipi_dsi_probe(pdev, plat_data); > } > EXPORT_SYMBOL_GPL(dw_mipi_dsi_probe); > > -void dw_mipi_dsi_remove(struct platform_device *pdev) > +void dw_mipi_dsi_remove(struct dw_mipi_dsi *dsi) > { > - struct dw_mipi_dsi *dsi = platform_get_drvdata(pdev); > - > mipi_dsi_host_unregister(&dsi->dsi_host); > > __dw_mipi_dsi_remove(dsi); > @@ -961,31 +952,30 @@ EXPORT_SYMBOL_GPL(dw_mipi_dsi_remove); > /* > * Bind/unbind API, used from platforms based on the component framework. > */ > -int dw_mipi_dsi_bind(struct platform_device *pdev, struct drm_encoder > *encoder, - const struct dw_mipi_dsi_plat_data *plat_data) > +struct dw_mipi_dsi * > +dw_mipi_dsi_bind(struct platform_device *pdev, struct drm_encoder *encoder, > + const struct dw_mipi_dsi_plat_data *plat_data) > { > struct dw_mipi_dsi *dsi; > int ret; > > dsi = __dw_mipi_dsi_probe(pdev, plat_data); > if (IS_ERR(dsi)) > - return PTR_ERR(dsi); > + return dsi; > > ret = drm_bridge_attach(encoder, &dsi->bridge, NULL); > if (ret) { > - dw_mipi_dsi_remove(pdev); > + dw_mipi_dsi_remove(dsi); > DRM_ERROR("Failed to initialize bridge with drm\n"); > - return ret; > + return ERR_PTR(ret); > } > > - return 0; > + return dsi; > } > EXPORT_SYMBOL_GPL(dw_mipi_dsi_bind); > > -void dw_mipi_dsi_unbind(struct device *dev) > +void dw_mipi_dsi_unbind(struct dw_mipi_dsi *dsi) > { > - struct dw_mipi_dsi *dsi = dev_get_drvdata(dev); > - > __dw_mipi_dsi_remove(dsi); > } > EXPORT_SYMBOL_GPL(dw_mipi_dsi_unbind); > diff --git a/drivers/gpu/drm/stm/dw_mipi_dsi-stm.c > b/drivers/gpu/drm/stm/dw_mipi_dsi-stm.c index e5b6310240fe..7ed0ef7f6ec2 > 100644 > --- a/drivers/gpu/drm/stm/dw_mipi_dsi-stm.c > +++ b/drivers/gpu/drm/stm/dw_mipi_dsi-stm.c > @@ -66,6 +66,7 @@ enum dsi_color { > struct dw_mipi_dsi_stm { > void __iomem *base; > struct clk *pllref_clk; > + struct dw_mipi_dsi *dsi; > }; > > static inline void dsi_write(struct dw_mipi_dsi_stm *dsi, u32 reg, u32 val) > @@ -318,21 +319,24 @@ static int dw_mipi_dsi_stm_probe(struct > platform_device *pdev) dw_mipi_dsi_stm_plat_data.base = dsi->base; > dw_mipi_dsi_stm_plat_data.priv_data = dsi; > > - ret = dw_mipi_dsi_probe(pdev, &dw_mipi_dsi_stm_plat_data); > - if (ret) { > + platform_set_drvdata(pdev, dsi); > + > + dsi->dsi = dw_mipi_dsi_probe(pdev, &dw_mipi_dsi_stm_plat_data); > + if (IS_ERR(dsi->dsi)) { > DRM_ERROR("Failed to initialize mipi dsi host\n"); > clk_disable_unprepare(dsi->pllref_clk); > + return PTR_ERR(dsi->dsi); > } > > - return ret; > + return 0; > } > > static int dw_mipi_dsi_stm_remove(struct platform_device *pdev) > { > - struct dw_mipi_dsi_stm *dsi = dw_mipi_dsi_stm_plat_data.priv_data; > + struct dw_mipi_dsi_stm *dsi = platform_get_drvdata(pdev); > > clk_disable_unprepare(dsi->pllref_clk); > - dw_mipi_dsi_remove(pdev); > + dw_mipi_dsi_remove(dsi->dsi); > > return 0; > } > diff --git a/include/drm/bridge/dw_mipi_dsi.h > b/include/drm/bridge/dw_mipi_dsi.h index 9b30fec302c8..d9c6d549f971 100644 > --- a/include/drm/bridge/dw_mipi_dsi.h > +++ b/include/drm/bridge/dw_mipi_dsi.h > @@ -10,6 +10,8 @@ > #ifndef __DW_MIPI_DSI__ > #define __DW_MIPI_DSI__ > > +struct dw_mipi_dsi; > + > struct dw_mipi_dsi_phy_ops { > int (*init)(void *priv_data); > int (*get_lane_mbps)(void *priv_data, struct drm_display_mode *mode, > @@ -29,11 +31,14 @@ struct dw_mipi_dsi_plat_data { > void *priv_data; > }; > > -int dw_mipi_dsi_probe(struct platform_device *pdev, > - const struct dw_mipi_dsi_plat_data *plat_data); > -void dw_mipi_dsi_remove(struct platform_device *pdev); > -int dw_mipi_dsi_bind(struct platform_device *pdev, struct drm_encoder > *encoder, - const struct dw_mipi_dsi_plat_data *plat_data); > -void dw_mipi_dsi_unbind(struct device *dev); > +struct dw_mipi_dsi *dw_mipi_dsi_probe(struct platform_device *pdev, > + const struct dw_mipi_dsi_plat_data > + *plat_data); > +void dw_mipi_dsi_remove(struct dw_mipi_dsi *dsi); > +struct dw_mipi_dsi *dw_mipi_dsi_bind(struct platform_device *pdev, > + struct drm_encoder *encoder, > + const struct dw_mipi_dsi_plat_data > + *plat_data); > +void dw_mipi_dsi_unbind(struct dw_mipi_dsi *dsi); > > #endif /* __DW_MIPI_DSI__ */ -- Regards, Laurent Pinchart From 1585302045774392576@xxx Tue Nov 28 09:37:24 +0000 2017 X-GM-THRID: 1585270011925582235 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread