diff options
author | Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> | 2017-06-15 11:17:26 +0200 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2017-06-20 14:09:37 +0200 |
commit | d295c6a460cd2ac63597691288ed044f5cfa8a6e (patch) | |
tree | 192d0a5e05bc2e27fd40281f95d0200ad535025b /drivers/media/media-entity.c | |
parent | [media] media: entity: Add get_fwnode_pad entity operation (diff) | |
download | linux-d295c6a460cd2ac63597691288ed044f5cfa8a6e.tar.xz linux-d295c6a460cd2ac63597691288ed044f5cfa8a6e.zip |
[media] media: entity: Add media_entity_get_fwnode_pad() function
This is a wrapper around the media entity get_fwnode_pad operation.
Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/media-entity.c')
-rw-r--r-- | drivers/media/media-entity.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c index bc44193efa47..82d6755bd5d0 100644 --- a/drivers/media/media-entity.c +++ b/drivers/media/media-entity.c @@ -18,6 +18,7 @@ #include <linux/bitmap.h> #include <linux/module.h> +#include <linux/property.h> #include <linux/slab.h> #include <media/media-entity.h> #include <media/media-device.h> @@ -386,6 +387,41 @@ struct media_entity *media_graph_walk_next(struct media_graph *graph) } EXPORT_SYMBOL_GPL(media_graph_walk_next); +int media_entity_get_fwnode_pad(struct media_entity *entity, + struct fwnode_handle *fwnode, + unsigned long direction_flags) +{ + struct fwnode_endpoint endpoint; + unsigned int i; + int ret; + + if (!entity->ops || !entity->ops->get_fwnode_pad) { + for (i = 0; i < entity->num_pads; i++) { + if (entity->pads[i].flags & direction_flags) + return i; + } + + return -ENXIO; + } + + ret = fwnode_graph_parse_endpoint(fwnode, &endpoint); + if (ret) + return ret; + + ret = entity->ops->get_fwnode_pad(&endpoint); + if (ret < 0) + return ret; + + if (ret >= entity->num_pads) + return -ENXIO; + + if (!(entity->pads[ret].flags & direction_flags)) + return -ENXIO; + + return ret; +} +EXPORT_SYMBOL_GPL(media_entity_get_fwnode_pad); + /* ----------------------------------------------------------------------------- * Pipeline management */ |