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

Commit 8147e2e8 authored by Rob Herring's avatar Rob Herring
Browse files

Merge tag 'of-graph-for-4.0' of git://git.pengutronix.de/git/pza/linux into for-next

Pull of-graph helpers from Philipp Zabel:
of: Add of-graph helpers to loop over endpoints and find ports by id

This series converts of_graph_get_next_endpoint to decrement the refcount of
the passed prev parameter. This allows to add a for_each_endpoint_of_node
helper macro to loop over all endpoints in a device tree node.
The of_graph_get_port_by_id function is added to retrieve a port by its known
port id (contained in the reg property) from the device tree.
parents bc465aa9 bfe446e3
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -52,15 +52,6 @@ of_coresight_get_endpoint_device(struct device_node *endpoint)
			       endpoint, of_dev_node_match);
}

static struct device_node *of_get_coresight_endpoint(
		const struct device_node *parent, struct device_node *prev)
{
	struct device_node *node = of_graph_get_next_endpoint(parent, prev);

	of_node_put(prev);
	return node;
}

static void of_coresight_get_ports(struct device_node *node,
				   int *nr_inport, int *nr_outport)
{
@@ -68,7 +59,7 @@ static void of_coresight_get_ports(struct device_node *node,
	int in = 0, out = 0;

	do {
		ep = of_get_coresight_endpoint(node, ep);
		ep = of_graph_get_next_endpoint(node, ep);
		if (!ep)
			break;

@@ -140,7 +131,7 @@ struct coresight_platform_data *of_get_coresight_platform_data(
		/* Iterate through each port to discover topology */
		do {
			/* Get a handle on a port */
			ep = of_get_coresight_endpoint(node, ep);
			ep = of_graph_get_next_endpoint(node, ep);
			if (!ep)
				break;

+1 −10
Original line number Diff line number Diff line
@@ -431,15 +431,6 @@ int imx_drm_encoder_parse_of(struct drm_device *drm,
}
EXPORT_SYMBOL_GPL(imx_drm_encoder_parse_of);

static struct device_node *imx_drm_of_get_next_endpoint(
		const struct device_node *parent, struct device_node *prev)
{
	struct device_node *node = of_graph_get_next_endpoint(parent, prev);

	of_node_put(prev);
	return node;
}

/*
 * @node: device tree node containing encoder input ports
 * @encoder: drm_encoder
@@ -457,7 +448,7 @@ int imx_drm_encoder_get_mux_id(struct device_node *node,
		return -EINVAL;

	do {
		ep = imx_drm_of_get_next_endpoint(node, ep);
		ep = of_graph_get_next_endpoint(node, ep);
		if (!ep)
			break;

+4 −11
Original line number Diff line number Diff line
@@ -206,7 +206,7 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu,
	enum rcar_du_encoder_type enc_type = RCAR_DU_ENCODER_NONE;
	struct device_node *connector = NULL;
	struct device_node *encoder = NULL;
	struct device_node *prev = NULL;
	struct device_node *ep_node = NULL;
	struct device_node *entity_ep_node;
	struct device_node *entity;
	int ret;
@@ -225,11 +225,7 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu,
	entity_ep_node = of_parse_phandle(ep->local_node, "remote-endpoint", 0);

	while (1) {
		struct device_node *ep_node;

		ep_node = of_graph_get_next_endpoint(entity, prev);
		of_node_put(prev);
		prev = ep_node;
		ep_node = of_graph_get_next_endpoint(entity, ep_node);

		if (!ep_node)
			break;
@@ -300,7 +296,7 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu,
static int rcar_du_encoders_init(struct rcar_du_device *rcdu)
{
	struct device_node *np = rcdu->dev->of_node;
	struct device_node *prev = NULL;
	struct device_node *ep_node = NULL;
	unsigned int num_encoders = 0;

	/*
@@ -308,15 +304,12 @@ static int rcar_du_encoders_init(struct rcar_du_device *rcdu)
	 * pipeline.
	 */
	while (1) {
		struct device_node *ep_node;
		enum rcar_du_output output;
		struct of_endpoint ep;
		unsigned int i;
		int ret;

		ep_node = of_graph_get_next_endpoint(np, prev);
		of_node_put(prev);
		prev = ep_node;
		ep_node = of_graph_get_next_endpoint(np, ep_node);

		if (ep_node == NULL)
			break;
+0 −1
Original line number Diff line number Diff line
@@ -2504,7 +2504,6 @@ vpfe_get_pdata(struct platform_device *pdev)
					     GFP_KERNEL);
		pdata->asd[i]->match_type = V4L2_ASYNC_MATCH_OF;
		pdata->asd[i]->match.of.node = rem;
		of_node_put(endpoint);
		of_node_put(rem);
	}

+2 −1
Original line number Diff line number Diff line
@@ -1694,7 +1694,6 @@ static void scan_of_host(struct soc_camera_host *ici)
		if (!i)
			soc_of_bind(ici, epn, ren->parent);

		of_node_put(epn);
		of_node_put(ren);

		if (i) {
@@ -1702,6 +1701,8 @@ static void scan_of_host(struct soc_camera_host *ici)
			break;
		}
	}

	of_node_put(epn);
}

#else
Loading