diff options
| author | Philipp Zabel <p.zabel@pengutronix.de> | 2014-12-01 07:32:32 -0500 |
|---|---|---|
| committer | Philipp Zabel <p.zabel@pengutronix.de> | 2015-02-23 05:42:23 -0500 |
| commit | f033c0bcc53675562200680f4cb4a86710d9fbae (patch) | |
| tree | 0fceddf110155d73a39194e945b1c9b473a7e37f | |
| parent | c517d838eb7d07bbe9507871fab3931deccff539 (diff) | |
of: Decrement refcount of previous endpoint in of_graph_get_next_endpoint
Decrementing the reference count of the previous endpoint node allows to
use the of_graph_get_next_endpoint function in a for_each_... style macro.
All current users of this function that pass a non-NULL prev parameter
(that is, soc_camera and imx-drm) are changed to not decrement the passed
prev argument's refcount themselves.
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Acked-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Acked-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
| -rw-r--r-- | drivers/coresight/of_coresight.c | 13 | ||||
| -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 | ||||
| -rw-r--r-- | drivers/media/platform/am437x/am437x-vpfe.c | 1 | ||||
| -rw-r--r-- | drivers/media/platform/soc_camera/soc_camera.c | 3 | ||||
| -rw-r--r-- | drivers/of/base.c | 9 | ||||
| -rw-r--r-- | drivers/video/fbdev/omap2/dss/omapdss-boot-init.c | 7 |
7 files changed, 11 insertions, 48 deletions
diff --git a/drivers/coresight/of_coresight.c b/drivers/coresight/of_coresight.c index c3efa418a86d..6f75e9d5b6fb 100644 --- a/drivers/coresight/of_coresight.c +++ b/drivers/coresight/of_coresight.c | |||
| @@ -52,15 +52,6 @@ of_coresight_get_endpoint_device(struct device_node *endpoint) | |||
| 52 | endpoint, of_dev_node_match); | 52 | endpoint, of_dev_node_match); |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | static struct device_node *of_get_coresight_endpoint( | ||
| 56 | const struct device_node *parent, struct device_node *prev) | ||
| 57 | { | ||
| 58 | struct device_node *node = of_graph_get_next_endpoint(parent, prev); | ||
| 59 | |||
| 60 | of_node_put(prev); | ||
| 61 | return node; | ||
| 62 | } | ||
| 63 | |||
| 64 | static void of_coresight_get_ports(struct device_node *node, | 55 | static void of_coresight_get_ports(struct device_node *node, |
| 65 | int *nr_inport, int *nr_outport) | 56 | int *nr_inport, int *nr_outport) |
| 66 | { | 57 | { |
| @@ -68,7 +59,7 @@ static void of_coresight_get_ports(struct device_node *node, | |||
| 68 | int in = 0, out = 0; | 59 | int in = 0, out = 0; |
| 69 | 60 | ||
| 70 | do { | 61 | do { |
| 71 | ep = of_get_coresight_endpoint(node, ep); | 62 | ep = of_graph_get_next_endpoint(node, ep); |
| 72 | if (!ep) | 63 | if (!ep) |
| 73 | break; | 64 | break; |
| 74 | 65 | ||
| @@ -140,7 +131,7 @@ struct coresight_platform_data *of_get_coresight_platform_data( | |||
| 140 | /* Iterate through each port to discover topology */ | 131 | /* Iterate through each port to discover topology */ |
| 141 | do { | 132 | do { |
| 142 | /* Get a handle on a port */ | 133 | /* Get a handle on a port */ |
| 143 | ep = of_get_coresight_endpoint(node, ep); | 134 | ep = of_graph_get_next_endpoint(node, ep); |
| 144 | if (!ep) | 135 | if (!ep) |
| 145 | break; | 136 | break; |
| 146 | 137 | ||
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; |
diff --git a/drivers/media/platform/am437x/am437x-vpfe.c b/drivers/media/platform/am437x/am437x-vpfe.c index 56a5cb0d2152..0d07fca756fe 100644 --- a/drivers/media/platform/am437x/am437x-vpfe.c +++ b/drivers/media/platform/am437x/am437x-vpfe.c | |||
| @@ -2504,7 +2504,6 @@ vpfe_get_pdata(struct platform_device *pdev) | |||
| 2504 | GFP_KERNEL); | 2504 | GFP_KERNEL); |
| 2505 | pdata->asd[i]->match_type = V4L2_ASYNC_MATCH_OF; | 2505 | pdata->asd[i]->match_type = V4L2_ASYNC_MATCH_OF; |
| 2506 | pdata->asd[i]->match.of.node = rem; | 2506 | pdata->asd[i]->match.of.node = rem; |
| 2507 | of_node_put(endpoint); | ||
| 2508 | of_node_put(rem); | 2507 | of_node_put(rem); |
| 2509 | } | 2508 | } |
| 2510 | 2509 | ||
diff --git a/drivers/media/platform/soc_camera/soc_camera.c b/drivers/media/platform/soc_camera/soc_camera.c index cee7b56f8404..f2a3d960b1a6 100644 --- a/drivers/media/platform/soc_camera/soc_camera.c +++ b/drivers/media/platform/soc_camera/soc_camera.c | |||
| @@ -1694,7 +1694,6 @@ static void scan_of_host(struct soc_camera_host *ici) | |||
| 1694 | if (!i) | 1694 | if (!i) |
| 1695 | soc_of_bind(ici, epn, ren->parent); | 1695 | soc_of_bind(ici, epn, ren->parent); |
| 1696 | 1696 | ||
| 1697 | of_node_put(epn); | ||
| 1698 | of_node_put(ren); | 1697 | of_node_put(ren); |
| 1699 | 1698 | ||
| 1700 | if (i) { | 1699 | if (i) { |
| @@ -1702,6 +1701,8 @@ static void scan_of_host(struct soc_camera_host *ici) | |||
| 1702 | break; | 1701 | break; |
| 1703 | } | 1702 | } |
| 1704 | } | 1703 | } |
| 1704 | |||
| 1705 | of_node_put(epn); | ||
| 1705 | } | 1706 | } |
| 1706 | 1707 | ||
| 1707 | #else | ||
