All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiko Stuebner <heiko@sntech.de>
To: Andrzej Hajda <a.hajda@samsung.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
	briannorris@chromium.org, hoegsberg@gmail.com,
	philippe.cornu@st.com, dri-devel@lists.freedesktop.org,
	yannick.fertre@st.com, linux-rockchip@lists.infradead.org,
	nickey.yang@rock-chips.com, robh+dt@kernel.org,
	thierry.reding@gmail.com, laurent.pinchart@ideasonboard.com,
	mka@chromium.org
Subject: Re: [PATCH v2 6/8] drm/dsi: add helper function to find the second host in a dual-dsi setup
Date: Wed, 04 Jul 2018 12:47:29 +0200	[thread overview]
Message-ID: <2112691.6xyttTyCZ2@phil> (raw)
In-Reply-To: <20180703150650eucas1p28f06bae066a5c83cf820c7993764bcaa~95D_j3hK30626506265eucas1p25@eucas1p2.samsung.com>

Am Dienstag, 3. Juli 2018, 17:06:48 CEST schrieb Andrzej Hajda:
> On 18.06.2018 12:28, Heiko Stuebner wrote:
> > >From a specified output port of one dsi controller this function allows to
> > iterate over the list of registered dsi controllers trying to find a second
> > instance connected to the same display, like it is used in dual-dsi setups.
> >
> > Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> 
> The code looks hacky to me - it iterates over external nodes, it assumes
> all graph links are dedicated exclusively to dsi

The loop iterates over all registered dsi controllers and checks the same
port/endpoint combination as on the primary host.

One assumption is that the dsi controllers are identical, but that is
also an argument

As the splitting of the output to two DSI-controllers is a special
feature of the socs CRTC, I'd think the chances are very slim that
there will be two completely different DSI controllers used for
something like this.

> it assumes that there
> is no additional node between dsi host and the panel.

Yep.


Heiko


> > ---
> >  drivers/gpu/drm/drm_mipi_dsi.c | 56 ++++++++++++++++++++++++++++++++++
> >  include/drm/drm_mipi_dsi.h     |  2 ++
> >  2 files changed, 58 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
> > index bc73b7f5b9fc..0c3c9c7aa3b8 100644
> > --- a/drivers/gpu/drm/drm_mipi_dsi.c
> > +++ b/drivers/gpu/drm/drm_mipi_dsi.c
> > @@ -30,6 +30,7 @@
> >  #include <linux/device.h>
> >  #include <linux/module.h>
> >  #include <linux/of_device.h>
> > +#include <linux/of_graph.h>
> >  #include <linux/pm_runtime.h>
> >  #include <linux/slab.h>
> >  
> > @@ -282,6 +283,61 @@ struct mipi_dsi_host *of_find_mipi_dsi_host_by_node(struct device_node *node)
> >  }
> >  EXPORT_SYMBOL(of_find_mipi_dsi_host_by_node);
> >  
> > +struct device_node *of_mipi_dsi_find_second_host(struct device_node *first_np,
> > +						 int port, int endpoint)
> > +{
> > +	struct mipi_dsi_host *first, *host;
> > +	struct device_node *remote, *np, *second_np = NULL;
> > +	int num = 0;
> > +
> > +	first = of_find_mipi_dsi_host_by_node(first_np);
> > +	if (!first) {
> > +		pr_err("no dsi-host for node %s\n", first_np->full_name);
> > +		return ERR_PTR(-ENODEV);
> > +	}
> > +
> > +	/* output-node of the known dsi-host */
> > +	remote = of_graph_get_remote_node(first_np, port, endpoint);
> > +	if (!remote) {
> > +		dev_err(first->dev, "no output node found\n");
> > +		return ERR_PTR(-ENODEV);
> > +	}
> > +
> > +	mutex_lock(&host_lock);
> > +
> > +	list_for_each_entry(host, &host_list, list) {
> > +		np = of_graph_get_remote_node(host->dev->of_node,
> > +					      port, endpoint);
> > +
> > +		/* found a host connected to this panel */
> > +		if (np == remote)
> > +			num++;
> > +
> > +		/* found one second host */
> > +		if (host->dev->of_node != first_np)
> > +			second_np = host->dev->of_node;
> > +
> > +		of_node_put(np);
> > +	}
> > +
> > +	/* of_node_get the node under host_lock */
> > +	if (num == 2)
> > +		of_node_get(second_np);
> > +
> > +	mutex_unlock(&host_lock);
> > +
> > +	of_node_put(remote);
> > +
> > +	if (num > 2) {
> > +		dev_err(first->dev,
> > +			      "too many DSI links for output: %d links\n", num);
> > +		return ERR_PTR(-EINVAL);
> > +	}
> > +
> > +	return second_np;
> > +}
> > +EXPORT_SYMBOL(of_mipi_dsi_find_second_host);
> > +
> >  int mipi_dsi_host_register(struct mipi_dsi_host *host)
> >  {
> >  	struct device_node *node;
> > diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h
> > index 4fef19064b0f..89532ae69c91 100644
> > --- a/include/drm/drm_mipi_dsi.h
> > +++ b/include/drm/drm_mipi_dsi.h
> > @@ -107,6 +107,8 @@ struct mipi_dsi_host {
> >  int mipi_dsi_host_register(struct mipi_dsi_host *host);
> >  void mipi_dsi_host_unregister(struct mipi_dsi_host *host);
> >  struct mipi_dsi_host *of_find_mipi_dsi_host_by_node(struct device_node *node);
> > +struct device_node *of_mipi_dsi_find_second_host(struct device_node *first_np,
> > +						 int port, int endpoint);
> >  
> >  /* DSI mode flags */
> >  
> 
> 
> 




_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2018-07-04 10:47 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-18 10:27 [PATCH v2 0/8] drm/rockchip: migrate to common dw-mipi-dsi bridge and dual-dsi Heiko Stuebner
2018-06-18 10:27 ` [PATCH v2 1/8] drm/bridge/synopsys: dsi: move mipi_dsi_host_unregister to __dw_mipi_dsi_remove Heiko Stuebner
2018-07-03 10:40   ` Andrzej Hajda
2018-07-03 11:58   ` Philippe CORNU
2018-06-18 10:28 ` [PATCH v2 2/8] drm/bridge/synopsys: dsi: don't call __dw_mipi_dsi_probe from dw_mipi_dsi_bind Heiko Stuebner
2018-07-03 12:16   ` Andrzej Hajda
2018-07-03 12:32     ` Heiko Stübner
2018-07-04 12:23     ` Heiko Stuebner
2018-06-18 10:28 ` [PATCH v2 3/8] drm/bridge/synopsys: dsi: defer probing if panel not available in bridge-attach Heiko Stuebner
2018-07-03 11:57   ` Philippe CORNU
2018-07-03 12:42   ` Andrzej Hajda
2018-07-04 10:36     ` Heiko Stuebner
2018-06-18 10:28 ` [PATCH v2 4/8] dt-bindings: display: rockchip: update DSI controller Heiko Stuebner
2018-06-18 10:30   ` Heiko Stuebner
2018-06-18 10:28 ` [PATCH v2 5/8] drm/rockchip: dsi: migrate to use dw-mipi-dsi bridge driver Heiko Stuebner
2018-07-03 13:06   ` Andrzej Hajda
2018-06-18 10:28 ` [PATCH v2 6/8] drm/dsi: add helper function to find the second host in a dual-dsi setup Heiko Stuebner
2018-07-03 15:06   ` Andrzej Hajda
2018-07-04 10:47     ` Heiko Stuebner [this message]
2018-06-18 10:28 ` [PATCH v2 7/8] drm/bridge/synopsys: dsi: add dual-dsi support Heiko Stuebner
2018-07-03 11:57   ` Philippe CORNU
2018-07-03 17:07   ` Andrzej Hajda
2018-07-09 13:45     ` Heiko Stuebner
2018-07-09 16:02       ` Andrzej Hajda
2018-06-18 10:28 ` [PATCH v2 8/8] drm/rockchip: dsi: add dual mipi support Heiko Stuebner
2018-07-03 12:05 ` [PATCH v2 0/8] drm/rockchip: migrate to common dw-mipi-dsi bridge and dual-dsi Philippe CORNU

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2112691.6xyttTyCZ2@phil \
    --to=heiko@sntech.de \
    --cc=a.hajda@samsung.com \
    --cc=briannorris@chromium.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=hoegsberg@gmail.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=mark.rutland@arm.com \
    --cc=mka@chromium.org \
    --cc=nickey.yang@rock-chips.com \
    --cc=philippe.cornu@st.com \
    --cc=robh+dt@kernel.org \
    --cc=thierry.reding@gmail.com \
    --cc=yannick.fertre@st.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.