]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
[media] media-entity: init pads on entity init if was registered before
authorJavier Martinez Canillas <javier@osg.samsung.com>
Tue, 8 Sep 2015 17:10:56 +0000 (14:10 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 11 Jan 2016 14:19:02 +0000 (12:19 -0200)
If an entity is registered with a media device before is initialized
with media_device_register_entity(), the number of pads won't be set
so media_device_register_entity() won't create pad objects and add
it to the media device pads list.

Do this at entity initialization time if the entity was registered
before so the graph is complete and correct regardless of the order
in which the entities are initialized and registered.

Suggested-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/media-entity.c

index 5f61642b2a977a8d3b076a7653645225e0f86ea3..07f2dc6c2df6b81919702e72cb1818192515e01f 100644 (file)
@@ -222,6 +222,7 @@ int
 media_entity_init(struct media_entity *entity, u16 num_pads,
                  struct media_pad *pads)
 {
+       struct media_device *mdev = entity->graph_obj.mdev;
        unsigned int i;
 
        entity->group_id = 0;
@@ -230,11 +231,20 @@ media_entity_init(struct media_entity *entity, u16 num_pads,
        entity->num_pads = num_pads;
        entity->pads = pads;
 
+       if (mdev)
+               spin_lock(&mdev->lock);
+
        for (i = 0; i < num_pads; i++) {
                pads[i].entity = entity;
                pads[i].index = i;
+               if (mdev)
+                       media_gobj_init(mdev, MEDIA_GRAPH_PAD,
+                                       &entity->pads[i].graph_obj);
        }
 
+       if (mdev)
+               spin_unlock(&mdev->lock);
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(media_entity_init);