media: mc: entity: Add iterator helper for entity pads
Add an iterator helper to easily cycle through all pads in an entity and use it in media-entity and media-device code where appropriate. Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
Родитель
b7319e2bd7
Коммит
8db465f7d6
|
@ -581,7 +581,7 @@ static void __media_device_unregister_entity(struct media_entity *entity)
|
|||
struct media_device *mdev = entity->graph_obj.mdev;
|
||||
struct media_link *link, *tmp;
|
||||
struct media_interface *intf;
|
||||
unsigned int i;
|
||||
struct media_pad *iter;
|
||||
|
||||
ida_free(&mdev->entity_internal_idx, entity->internal_idx);
|
||||
|
||||
|
@ -597,8 +597,8 @@ static void __media_device_unregister_entity(struct media_entity *entity)
|
|||
__media_entity_remove_links(entity);
|
||||
|
||||
/* Remove all pads that belong to this entity */
|
||||
for (i = 0; i < entity->num_pads; i++)
|
||||
media_gobj_destroy(&entity->pads[i].graph_obj);
|
||||
media_entity_for_each_pad(entity, iter)
|
||||
media_gobj_destroy(&iter->graph_obj);
|
||||
|
||||
/* Remove the entity */
|
||||
media_gobj_destroy(&entity->graph_obj);
|
||||
|
@ -610,7 +610,7 @@ int __must_check media_device_register_entity(struct media_device *mdev,
|
|||
struct media_entity *entity)
|
||||
{
|
||||
struct media_entity_notify *notify, *next;
|
||||
unsigned int i;
|
||||
struct media_pad *iter;
|
||||
int ret;
|
||||
|
||||
if (entity->function == MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN ||
|
||||
|
@ -639,9 +639,8 @@ int __must_check media_device_register_entity(struct media_device *mdev,
|
|||
media_gobj_create(mdev, MEDIA_GRAPH_ENTITY, &entity->graph_obj);
|
||||
|
||||
/* Initialize objects at the pads */
|
||||
for (i = 0; i < entity->num_pads; i++)
|
||||
media_gobj_create(mdev, MEDIA_GRAPH_PAD,
|
||||
&entity->pads[i].graph_obj);
|
||||
media_entity_for_each_pad(entity, iter)
|
||||
media_gobj_create(mdev, MEDIA_GRAPH_PAD, &iter->graph_obj);
|
||||
|
||||
/* invoke entity_notify callbacks */
|
||||
list_for_each_entry_safe(notify, next, &mdev->entity_notify, list)
|
||||
|
|
|
@ -193,7 +193,8 @@ int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
|
|||
struct media_pad *pads)
|
||||
{
|
||||
struct media_device *mdev = entity->graph_obj.mdev;
|
||||
unsigned int i;
|
||||
struct media_pad *iter;
|
||||
unsigned int i = 0;
|
||||
|
||||
if (num_pads >= MEDIA_ENTITY_MAX_PADS)
|
||||
return -E2BIG;
|
||||
|
@ -204,12 +205,12 @@ int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
|
|||
if (mdev)
|
||||
mutex_lock(&mdev->graph_mutex);
|
||||
|
||||
for (i = 0; i < num_pads; i++) {
|
||||
pads[i].entity = entity;
|
||||
pads[i].index = i;
|
||||
media_entity_for_each_pad(entity, iter) {
|
||||
iter->entity = entity;
|
||||
iter->index = i++;
|
||||
if (mdev)
|
||||
media_gobj_create(mdev, MEDIA_GRAPH_PAD,
|
||||
&entity->pads[i].graph_obj);
|
||||
&iter->graph_obj);
|
||||
}
|
||||
|
||||
if (mdev)
|
||||
|
|
|
@ -316,6 +316,18 @@ struct media_entity {
|
|||
} info;
|
||||
};
|
||||
|
||||
/**
|
||||
* media_entity_for_each_pad - Iterate on all pads in an entity
|
||||
* @entity: The entity the pads belong to
|
||||
* @iter: The iterator pad
|
||||
*
|
||||
* Iterate on all pads in a media entity.
|
||||
*/
|
||||
#define media_entity_for_each_pad(entity, iter) \
|
||||
for (iter = (entity)->pads; \
|
||||
iter < &(entity)->pads[(entity)->num_pads]; \
|
||||
++iter)
|
||||
|
||||
/**
|
||||
* struct media_interface - A media interface graph object.
|
||||
*
|
||||
|
|
Загрузка…
Ссылка в новой задаче