|
@@ -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
|
|
|
*/
|