Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be3fe0f9 authored by Chen-Yu Tsai's avatar Chen-Yu Tsai Committed by Maxime Ripard
Browse files

drm/sun4i: tcon: Simplify sun4i_tcon_find_engine_traverse for one input



Now that sun4i_tcon_find_engine_traverse() usage is restricted to the
single input case, we can remove the for_each_available_child_of_node
loop.

While at it, consolidate all the of_node_put calls into a common exit
path.

Signed-off-by: default avatarChen-Yu Tsai <wens@csie.org>
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20170908075016.18657-6-wens@csie.org
parent e8d5bbf7
Loading
Loading
Loading
Loading
+25 −26
Original line number Diff line number Diff line
@@ -468,7 +468,7 @@ sun4i_tcon_find_engine_traverse(struct sun4i_drv *drv,
				struct device_node *node)
{
	struct device_node *port, *ep, *remote;
	struct sunxi_engine *engine;
	struct sunxi_engine *engine = ERR_PTR(-EINVAL);

	port = of_graph_get_port_by_id(node, 0);
	if (!port)
@@ -483,35 +483,34 @@ sun4i_tcon_find_engine_traverse(struct sun4i_drv *drv,
	 *
	 * Bail out if there are multiple input connections.
	 */
	if (of_get_available_child_count(port) != 1) {
		of_node_put(port);
		return ERR_PTR(-EINVAL);
	}
	if (of_get_available_child_count(port) != 1)
		goto out_put_port;

	/* Get the first connection without specifying an ID */
	ep = of_get_next_available_child(port, NULL);
	if (!ep)
		goto out_put_port;

	for_each_available_child_of_node(port, ep) {
	remote = of_graph_get_remote_port_parent(ep);
	if (!remote)
			continue;
		goto out_put_ep;

	/* does this node match any registered engines? */
		list_for_each_entry(engine, &drv->engine_list, list) {
			if (remote == engine->node) {
				of_node_put(remote);
				of_node_put(port);
				return engine;
			}
		}
	list_for_each_entry(engine, &drv->engine_list, list)
		if (remote == engine->node)
			goto out_put_remote;

	/* keep looking through upstream ports */
	engine = sun4i_tcon_find_engine_traverse(drv, remote);
		if (!IS_ERR(engine)) {

out_put_remote:
	of_node_put(remote);
out_put_ep:
	of_node_put(ep);
out_put_port:
	of_node_put(port);
			return engine;
		}
	}

	return ERR_PTR(-EINVAL);
	return engine;
}

/*