diff options
author | Rob Herring <robh@kernel.org> | 2015-03-25 01:41:08 -0400 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2015-03-25 01:41:08 -0400 |
commit | 8147e2e8f13d823307e1edf2add5a8df84180cca (patch) | |
tree | 476eae8727d98c56027ca1036a8f61ff261c9c51 /drivers/gpu | |
parent | bc465aa9d045feb0e13b4a8f32cc33c1943f62d6 (diff) | |
parent | bfe446e37c4efd8ade454911e8f80414bcbfc10d (diff) |
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.
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/imx/imx-drm-core.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/rcar-du/rcar_du_kms.c | 15 |
2 files changed, 5 insertions, 21 deletions
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c index a002f53aab0e..84cf99f8d957 100644 --- a/drivers/gpu/drm/imx/imx-drm-core.c +++ b/drivers/gpu/drm/imx/imx-drm-core.c | |||
@@ -431,15 +431,6 @@ int imx_drm_encoder_parse_of(struct drm_device *drm, | |||
431 | } | 431 | } |
432 | EXPORT_SYMBOL_GPL(imx_drm_encoder_parse_of); | 432 | EXPORT_SYMBOL_GPL(imx_drm_encoder_parse_of); |
433 | 433 | ||
434 | static struct device_node *imx_drm_of_get_next_endpoint( | ||
435 | const struct device_node *parent, struct device_node *prev) | ||
436 | { | ||
437 | struct device_node *node = of_graph_get_next_endpoint(parent, prev); | ||
438 | |||
439 | of_node_put(prev); | ||
440 | return node; | ||
441 | } | ||
442 | |||
443 | /* | 434 | /* |
444 | * @node: device tree node containing encoder input ports | 435 | * @node: device tree node containing encoder input ports |
445 | * @encoder: drm_encoder | 436 | * @encoder: drm_encoder |
@@ -457,7 +448,7 @@ int imx_drm_encoder_get_mux_id(struct device_node *node, | |||
457 | return -EINVAL; | 448 | return -EINVAL; |
458 | 449 | ||
459 | do { | 450 | do { |
460 | ep = imx_drm_of_get_next_endpoint(node, ep); | 451 | ep = of_graph_get_next_endpoint(node, ep); |
461 | if (!ep) | 452 | if (!ep) |
462 | break; | 453 | break; |
463 | 454 | ||
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index cc9136e8ee9c..68dab2601bf5 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c | |||
@@ -206,7 +206,7 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu, | |||
206 | enum rcar_du_encoder_type enc_type = RCAR_DU_ENCODER_NONE; | 206 | enum rcar_du_encoder_type enc_type = RCAR_DU_ENCODER_NONE; |
207 | struct device_node *connector = NULL; | 207 | struct device_node *connector = NULL; |
208 | struct device_node *encoder = NULL; | 208 | struct device_node *encoder = NULL; |
209 | struct device_node *prev = NULL; | 209 | struct device_node *ep_node = NULL; |
210 | struct device_node *entity_ep_node; | 210 | struct device_node *entity_ep_node; |
211 | struct device_node *entity; | 211 | struct device_node *entity; |
212 | int ret; | 212 | int ret; |
@@ -225,11 +225,7 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu, | |||
225 | entity_ep_node = of_parse_phandle(ep->local_node, "remote-endpoint", 0); | 225 | entity_ep_node = of_parse_phandle(ep->local_node, "remote-endpoint", 0); |
226 | 226 | ||
227 | while (1) { | 227 | while (1) { |
228 | struct device_node *ep_node; | 228 | ep_node = of_graph_get_next_endpoint(entity, ep_node); |
229 | |||
230 | ep_node = of_graph_get_next_endpoint(entity, prev); | ||
231 | of_node_put(prev); | ||
232 | prev = ep_node; | ||
233 | 229 | ||
234 | if (!ep_node) | 230 | if (!ep_node) |
235 | break; | 231 | break; |
@@ -300,7 +296,7 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu, | |||
300 | static int rcar_du_encoders_init(struct rcar_du_device *rcdu) | 296 | static int rcar_du_encoders_init(struct rcar_du_device *rcdu) |
301 | { | 297 | { |
302 | struct device_node *np = rcdu->dev->of_node; | 298 | struct device_node *np = rcdu->dev->of_node; |
303 | struct device_node *prev = NULL; | 299 | struct device_node *ep_node = NULL; |
304 | unsigned int num_encoders = 0; | 300 | unsigned int num_encoders = 0; |
305 | 301 | ||
306 | /* | 302 | /* |
@@ -308,15 +304,12 @@ static int rcar_du_encoders_init(struct rcar_du_device *rcdu) | |||
308 | * pipeline. | 304 | * pipeline. |
309 | */ | 305 | */ |
310 | while (1) { | 306 | while (1) { |
311 | struct device_node *ep_node; | ||
312 | enum rcar_du_output output; | 307 | enum rcar_du_output output; |
313 | struct of_endpoint ep; | 308 | struct of_endpoint ep; |
314 | unsigned int i; | 309 | unsigned int i; |
315 | int ret; | 310 | int ret; |
316 | 311 | ||
317 | ep_node = of_graph_get_next_endpoint(np, prev); | 312 | ep_node = of_graph_get_next_endpoint(np, ep_node); |
318 | of_node_put(prev); | ||
319 | prev = ep_node; | ||
320 | 313 | ||
321 | if (ep_node == NULL) | 314 | if (ep_node == NULL) |
322 | break; | 315 | break; |