[media] v4l: vsp1: Use media entity enumeration interface
authorSakari Ailus <sakari.ailus@linux.intel.com>
Wed, 16 Dec 2015 13:32:31 +0000 (11:32 -0200)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 11 Jan 2016 14:19:21 +0000 (12:19 -0200)
Instead of using a bitmap directly in a driver, use the new media entity
enumeration interface to perform the same.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/vsp1/vsp1_video.c

index a6b1bd1225efe27bf07d61c4b176aebf1022f60d..637d0d6f79fba5fb511b6fba37fb24875d913dbd 100644 (file)
@@ -282,24 +282,35 @@ static int vsp1_pipeline_validate_branch(struct vsp1_pipeline *pipe,
                                         struct vsp1_rwpf *output)
 {
        struct vsp1_entity *entity;
-       unsigned int entities = 0;
+       struct media_entity_enum ent_enum;
        struct media_pad *pad;
+       int rval;
        bool bru_found = false;
 
        input->location.left = 0;
        input->location.top = 0;
 
+       rval = media_entity_enum_init(
+               &ent_enum, input->entity.pads[RWPF_PAD_SOURCE].graph_obj.mdev);
+       if (rval)
+               return rval;
+
        pad = media_entity_remote_pad(&input->entity.pads[RWPF_PAD_SOURCE]);
 
        while (1) {
-               if (pad == NULL)
-                       return -EPIPE;
+               if (pad == NULL) {
+                       rval = -EPIPE;
+                       goto out;
+               }
 
                /* We've reached a video node, that shouldn't have happened. */
-               if (!is_media_entity_v4l2_subdev(pad->entity))
-                       return -EPIPE;
+               if (!is_media_entity_v4l2_subdev(pad->entity)) {
+                       rval = -EPIPE;
+                       goto out;
+               }
 
-               entity = to_vsp1_entity(media_entity_to_v4l2_subdev(pad->entity));
+               entity = to_vsp1_entity(
+                       media_entity_to_v4l2_subdev(pad->entity));
 
                /* A BRU is present in the pipeline, store the compose rectangle
                 * location in the input RPF for use when configuring the RPF.
@@ -322,15 +333,18 @@ static int vsp1_pipeline_validate_branch(struct vsp1_pipeline *pipe,
                        break;
 
                /* Ensure the branch has no loop. */
-               if (entities & (1 << media_entity_id(&entity->subdev.entity)))
-                       return -EPIPE;
-
-               entities |= 1 << media_entity_id(&entity->subdev.entity);
+               if (media_entity_enum_test_and_set(&ent_enum,
+                                                  &entity->subdev.entity)) {
+                       rval = -EPIPE;
+                       goto out;
+               }
 
                /* UDS can't be chained. */
                if (entity->type == VSP1_ENTITY_UDS) {
-                       if (pipe->uds)
-                               return -EPIPE;
+                       if (pipe->uds) {
+                               rval = -EPIPE;
+                               goto out;
+                       }
 
                        pipe->uds = entity;
                        pipe->uds_input = bru_found ? pipe->bru
@@ -348,9 +362,12 @@ static int vsp1_pipeline_validate_branch(struct vsp1_pipeline *pipe,
 
        /* The last entity must be the output WPF. */
        if (entity != &output->entity)
-               return -EPIPE;
+               rval = -EPIPE;
 
-       return 0;
+out:
+       media_entity_enum_cleanup(&ent_enum);
+
+       return rval;
 }
 
 static void __vsp1_pipeline_cleanup(struct vsp1_pipeline *pipe)