All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philipp Zabel <p.zabel@pengutronix.de>
To: Rob Herring <robh@kernel.org>
Cc: Liviu Dudau <liviu.dudau@arm.com>,
	David Airlie <airlied@linux.ie>,
	Daniel Vetter <daniel.vetter@intel.com>,
	Sean Paul <seanpaul@chromium.org>,
	dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Frank Rowand <frowand.list@gmail.com>,
	Boris Brezillon <boris.brezillon@free-electrons.com>,
	Archit Taneja <architt@codeaurora.org>,
	Jingoo Han <jingoohan1@gmail.com>,
	Inki Dae <inki.dae@samsung.com>,
	Joonyoung Shim <jy0922.shim@samsung.com>,
	Seung-Woo Kim <sw0312.kim@samsung.com>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Kukjin Kim <kgene@kernel.org>,
	Krzysztof Kozlowski <krzk@kernel.org>,
	Javier Martinez Canillas <javier@osg.samsung.com>,
	Stefan Agner <stefan@agner.ch>,
	Alison Wang <alison.wang@freescale.com>,
	Xinliang Liu <z.liuxinliang@hisilicon.com>,
	Rongrong Zou <zourongrong@gmail.com>,
	Xinwei Kong <kong.kongxinwei@hisilicon.com>,
	Chen Feng <puck.chen@hisilicon.com>, CK Hu <ck.hu@mediatek.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Marek Vasut <marex@denx.de>, Mark Yao <mark.yao@rock-chips.com>,
	Heiko Stuebner <heiko@sntech.de>,
	Maxime Ripard <maxime.ripard@free-electrons.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Mali DP Maintainers <malidp@foss.arm.com>,
	Neil Armstrong <narmstrong@baylibre.com>,
	Carlo Caione <carlo@caione.org>,
	Kevin Hilman <khilman@baylibre.com>,
	Rob Clark <robdclark@gmail.com>, Jyri Sarha <jsarha@ti.com>,
	Tomi Valkeinen <tomi.valkeinen@ti.com>,
	Eric Anholt <eric@anholt.net>,
	Russell King <rmk+kernel@armlinux.org.uk>
Subject: Re: [PATCH 2/5] drm: of: introduce drm_of_find_panel_or_bridge
Date: Mon, 06 Feb 2017 18:45:34 +0100	[thread overview]
Message-ID: <1486403134.3005.67.camel@pengutronix.de> (raw)
In-Reply-To: <20170206165323.255ltzlzmpfx4vl7@rob-hp-laptop>

On Mon, 2017-02-06 at 10:53 -0600, Rob Herring wrote:
> On Mon, Feb 06, 2017 at 11:42:48AM +0100, Philipp Zabel wrote:
> > On Fri, 2017-02-03 at 21:36 -0600, Rob Herring wrote:
> > > Many drivers have a common pattern of searching the OF graph for either an
> > > attached panel or bridge and then finding the DRM struct for the panel
> > > or bridge. Also, most drivers need to handle deferred probing when the
> > > DRM device is not yet instantiated. Create a common function,
> > > drm_of_find_panel_or_bridge, to find the connected node and the
> > > associated DRM panel or bridge device.
> 
> [...]
> 
> > > +int drm_of_find_panel_or_bridge(const struct device_node *np,
> > > +				int port, int endpoint,
> > > +				struct drm_panel **panel,
> > > +				struct drm_bridge **bridge)
> > > +{
> > > +	int ret = -ENODEV;
> > 
> > This is only returned if !panel && !bridge. I'd consider this invalid
> > usage of this function, so maybe use -EINVAL?
> 
> Yes.
> 
> > > +	struct device_node *remote;
> > > +
> > > +	remote = of_graph_get_remote_node(np, port, endpoint);
> > > +	if (!remote)
> > > +		return -ENODEV;
> > > +
> > > +	if (bridge)
> > > +		*bridge = NULL;
> > 
> > I would move this ^ ...
> > 
> > > +	if (panel) {
> > > +		*panel = of_drm_find_panel(remote);
> > > +		if (*panel) {
> > 
> > ... here.
> 
> Okay.
> 
> > > +			ret = 0;
> > > +			goto out_put;
> > > +		}
> > > +		ret = -EPROBE_DEFER;
> > > +	}
> > > +
> > > +	if (bridge) {
> > > +		*bridge = of_drm_find_bridge(remote);
> > > +		if (*bridge)
> > > +			ret = 0;
> > > +		else
> > > +			ret = -EPROBE_DEFER;
> > > +	}
> > > +out_put:
> > > +	of_node_put(remote);
> > > +	return ret;
> > > +}
> 
> I've ended up re-writing things a bit getting rid of the goto and the 
> result looks like this:

Looks good to me.

> int drm_of_find_panel_or_bridge(const struct device_node *np,
> 				int port, int endpoint,
> 				struct drm_panel **panel,
> 				struct drm_bridge **bridge)
> {
> 	int ret = -EPROBE_DEFER;
> 	struct device_node *remote;
> 
> 	if (!panel && !bridge)
> 		return -EINVAL;
> 
> 	remote = of_graph_get_remote_node(np, port, endpoint);
> 	if (!remote)
> 		return -ENODEV;
> 
> 	if (panel) {
> 		*panel = of_drm_find_panel(remote);
> 		if (*panel) {
> 			if (bridge)
> 				*bridge = NULL;

With the goto out_put gone, I'm conflicted whether I find this clearer
here, or ...

> 			ret = 0;
> 		}
> 	}
> 
> 	/* No panel found yet, check for a bridge next. */
> 	if (ret && bridge) {
> 		*bridge = of_drm_find_bridge(remote);
> 		if (*bridge)
> 			ret = 0;
> 	}

... even down here:

	if (bridge) {
		if (ret) {
			/* No panel found yet, check for a bridge next. */
			*bridge = of_drm_find_bridge(remote)
			if (*bridge)
				ret = 0;
		} else {
			*bridge = NULL;
		}
	}

That way bridge doesn't have to be checked twice and all the
modification of *bridge is in the same block.

> 
> 	of_node_put(remote);
> 	return ret;
> }

Either way,

Acked-by: Philipp Zabel <p.zabel@pengutronix.de>

regards
Philipp

WARNING: multiple messages have this Message-ID (diff)
From: Philipp Zabel <p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
To: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: Liviu Dudau <liviu.dudau-5wv7dgnIgG8@public.gmane.org>,
	David Airlie <airlied-cv59FeDIM0c@public.gmane.org>,
	Daniel Vetter
	<daniel.vetter-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Sean Paul <seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Frank Rowand
	<frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Boris Brezillon
	<boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	Archit Taneja <architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
	Jingoo Han <jingoohan1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Inki Dae <inki.dae-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Joonyoung Shim
	<jy0922.shim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Seung-Woo Kim
	<sw0312.kim-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Kyungmin Park
	<kyungmin.park-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Kukjin Kim <kgene-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Krzysztof Kozlowski
	<krzk-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Javier Martinez Canillas
	<javier-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org>,
	Stefan Agner <stefan-XLVq0VzYD2Y@public.gmane.org>,
	Alison Wang <alison.wang-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Subject: Re: [PATCH 2/5] drm: of: introduce drm_of_find_panel_or_bridge
Date: Mon, 06 Feb 2017 18:45:34 +0100	[thread overview]
Message-ID: <1486403134.3005.67.camel@pengutronix.de> (raw)
In-Reply-To: <20170206165323.255ltzlzmpfx4vl7@rob-hp-laptop>

On Mon, 2017-02-06 at 10:53 -0600, Rob Herring wrote:
> On Mon, Feb 06, 2017 at 11:42:48AM +0100, Philipp Zabel wrote:
> > On Fri, 2017-02-03 at 21:36 -0600, Rob Herring wrote:
> > > Many drivers have a common pattern of searching the OF graph for either an
> > > attached panel or bridge and then finding the DRM struct for the panel
> > > or bridge. Also, most drivers need to handle deferred probing when the
> > > DRM device is not yet instantiated. Create a common function,
> > > drm_of_find_panel_or_bridge, to find the connected node and the
> > > associated DRM panel or bridge device.
> 
> [...]
> 
> > > +int drm_of_find_panel_or_bridge(const struct device_node *np,
> > > +				int port, int endpoint,
> > > +				struct drm_panel **panel,
> > > +				struct drm_bridge **bridge)
> > > +{
> > > +	int ret = -ENODEV;
> > 
> > This is only returned if !panel && !bridge. I'd consider this invalid
> > usage of this function, so maybe use -EINVAL?
> 
> Yes.
> 
> > > +	struct device_node *remote;
> > > +
> > > +	remote = of_graph_get_remote_node(np, port, endpoint);
> > > +	if (!remote)
> > > +		return -ENODEV;
> > > +
> > > +	if (bridge)
> > > +		*bridge = NULL;
> > 
> > I would move this ^ ...
> > 
> > > +	if (panel) {
> > > +		*panel = of_drm_find_panel(remote);
> > > +		if (*panel) {
> > 
> > ... here.
> 
> Okay.
> 
> > > +			ret = 0;
> > > +			goto out_put;
> > > +		}
> > > +		ret = -EPROBE_DEFER;
> > > +	}
> > > +
> > > +	if (bridge) {
> > > +		*bridge = of_drm_find_bridge(remote);
> > > +		if (*bridge)
> > > +			ret = 0;
> > > +		else
> > > +			ret = -EPROBE_DEFER;
> > > +	}
> > > +out_put:
> > > +	of_node_put(remote);
> > > +	return ret;
> > > +}
> 
> I've ended up re-writing things a bit getting rid of the goto and the 
> result looks like this:

Looks good to me.

> int drm_of_find_panel_or_bridge(const struct device_node *np,
> 				int port, int endpoint,
> 				struct drm_panel **panel,
> 				struct drm_bridge **bridge)
> {
> 	int ret = -EPROBE_DEFER;
> 	struct device_node *remote;
> 
> 	if (!panel && !bridge)
> 		return -EINVAL;
> 
> 	remote = of_graph_get_remote_node(np, port, endpoint);
> 	if (!remote)
> 		return -ENODEV;
> 
> 	if (panel) {
> 		*panel = of_drm_find_panel(remote);
> 		if (*panel) {
> 			if (bridge)
> 				*bridge = NULL;

With the goto out_put gone, I'm conflicted whether I find this clearer
here, or ...

> 			ret = 0;
> 		}
> 	}
> 
> 	/* No panel found yet, check for a bridge next. */
> 	if (ret && bridge) {
> 		*bridge = of_drm_find_bridge(remote);
> 		if (*bridge)
> 			ret = 0;
> 	}

... even down here:

	if (bridge) {
		if (ret) {
			/* No panel found yet, check for a bridge next. */
			*bridge = of_drm_find_bridge(remote)
			if (*bridge)
				ret = 0;
		} else {
			*bridge = NULL;
		}
	}

That way bridge doesn't have to be checked twice and all the
modification of *bridge is in the same block.

> 
> 	of_node_put(remote);
> 	return ret;
> }

Either way,

Acked-by: Philipp Zabel <p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>

regards
Philipp

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2017-02-06 17:46 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-04  3:36 [PATCH 0/5] DRM OF graph clean-up Rob Herring
2017-02-04  3:36 ` Rob Herring
2017-02-04  3:36 ` [PATCH 1/5] of: introduce of_graph_get_remote_node Rob Herring
2017-02-04  3:36   ` Rob Herring
2017-02-04 16:10   ` Vladimir Zapolskiy
2017-02-04 16:10     ` Vladimir Zapolskiy
2017-02-06  8:50   ` Daniel Vetter
2017-02-06  8:50     ` Daniel Vetter
2017-02-06 13:41     ` Rob Herring
2017-02-06 13:41       ` Rob Herring
2017-02-06 10:32   ` Philipp Zabel
2017-02-06 10:32     ` Philipp Zabel
2017-02-06 13:54     ` Rob Herring
2017-02-06 13:54       ` Rob Herring
2017-02-06 14:03       ` Philipp Zabel
2017-02-06 14:03         ` Philipp Zabel
2017-02-04  3:36 ` [PATCH 2/5] drm: of: introduce drm_of_find_panel_or_bridge Rob Herring
2017-02-04  3:36   ` Rob Herring
2017-02-06 10:18   ` Liviu Dudau
2017-02-06 10:18     ` Liviu Dudau
2017-02-06 16:20     ` Rob Herring
2017-02-06 16:20       ` Rob Herring
2017-02-06 10:42   ` Philipp Zabel
2017-02-06 10:42     ` Philipp Zabel
2017-02-06 16:53     ` Rob Herring
2017-02-06 16:53       ` Rob Herring
2017-02-06 17:45       ` Philipp Zabel [this message]
2017-02-06 17:45         ` Philipp Zabel
2017-02-10 19:42   ` Frank Rowand
2017-02-10 19:42     ` Frank Rowand
2017-02-04  3:36 ` [PATCH 3/5] drm: convert drivers to use of_graph_get_remote_node Rob Herring
2017-02-04  3:36   ` Rob Herring
2017-02-06  8:31   ` Jyri Sarha
2017-02-06  8:31     ` Jyri Sarha
2017-02-06 10:17   ` Neil Armstrong
2017-02-06 10:17     ` Neil Armstrong
2017-02-06 10:29   ` Liviu Dudau
2017-02-06 10:29     ` Liviu Dudau
2017-02-06 17:09     ` Rob Herring
2017-02-06 17:09       ` Rob Herring
2017-02-06 17:23       ` Liviu Dudau
2017-02-06 17:23         ` Liviu Dudau
2017-02-06 17:34         ` Russell King - ARM Linux
2017-02-06 17:34           ` Russell King - ARM Linux
2017-02-06 17:55           ` Liviu Dudau
2017-02-06 17:55             ` Liviu Dudau
2017-02-06 18:09             ` Russell King - ARM Linux
2017-02-06 18:09               ` Russell King - ARM Linux
2017-02-06 17:42         ` Rob Herring
2017-02-06 17:42           ` Rob Herring
2017-02-06 10:52   ` Philipp Zabel
2017-02-06 10:52     ` Philipp Zabel
2017-02-06 13:40     ` Rob Herring
2017-02-06 13:40       ` Rob Herring
2017-02-08 11:57   ` Liviu Dudau
2017-02-08 11:57     ` Liviu Dudau
2017-02-08 20:44   ` Eric Anholt
2017-02-08 20:44     ` Eric Anholt
2017-02-04  3:36 ` [PATCH 4/5] drm: convert drivers to use drm_of_find_panel_or_bridge Rob Herring
2017-02-04  3:36   ` Rob Herring
2017-02-04 20:26   ` Fabio Estevam
2017-02-04 20:26     ` Fabio Estevam
2017-02-05 22:25     ` Rob Herring
2017-02-05 22:25       ` Rob Herring
2017-02-06  0:01       ` Fabio Estevam
2017-02-06  0:01         ` Fabio Estevam
2017-02-06  1:22         ` Fabio Estevam
2017-02-06  1:22           ` Fabio Estevam
2017-02-06 10:03   ` Maxime Ripard
2017-02-06 10:03     ` Maxime Ripard
2017-02-06 17:32     ` Rob Herring
2017-02-06 17:32       ` Rob Herring
2017-02-08  7:46       ` Maxime Ripard
2017-02-08  7:46         ` Maxime Ripard
2017-02-06 11:07   ` Philipp Zabel
2017-02-06 11:07     ` Philipp Zabel
2017-02-04  3:36 ` [PATCH 5/5] drm: omap: use common OF graph helpers Rob Herring
2017-02-04  3:36   ` Rob Herring
2017-02-04 10:47 ` [PATCH 0/5] DRM OF graph clean-up Russell King - ARM Linux
2017-02-04 10:47   ` Russell King - ARM Linux

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=1486403134.3005.67.camel@pengutronix.de \
    --to=p.zabel@pengutronix.de \
    --cc=airlied@linux.ie \
    --cc=alison.wang@freescale.com \
    --cc=architt@codeaurora.org \
    --cc=boris.brezillon@free-electrons.com \
    --cc=carlo@caione.org \
    --cc=ck.hu@mediatek.com \
    --cc=daniel.vetter@intel.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=eric@anholt.net \
    --cc=frowand.list@gmail.com \
    --cc=heiko@sntech.de \
    --cc=inki.dae@samsung.com \
    --cc=javier@osg.samsung.com \
    --cc=jingoohan1@gmail.com \
    --cc=jsarha@ti.com \
    --cc=jy0922.shim@samsung.com \
    --cc=kgene@kernel.org \
    --cc=khilman@baylibre.com \
    --cc=kong.kongxinwei@hisilicon.com \
    --cc=krzk@kernel.org \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=liviu.dudau@arm.com \
    --cc=malidp@foss.arm.com \
    --cc=marex@denx.de \
    --cc=mark.yao@rock-chips.com \
    --cc=matthias.bgg@gmail.com \
    --cc=maxime.ripard@free-electrons.com \
    --cc=narmstrong@baylibre.com \
    --cc=puck.chen@hisilicon.com \
    --cc=rmk+kernel@armlinux.org.uk \
    --cc=robdclark@gmail.com \
    --cc=robh@kernel.org \
    --cc=seanpaul@chromium.org \
    --cc=stefan@agner.ch \
    --cc=sw0312.kim@samsung.com \
    --cc=tomi.valkeinen@ti.com \
    --cc=wens@csie.org \
    --cc=z.liuxinliang@hisilicon.com \
    --cc=zourongrong@gmail.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.