PAD embedded objects also need to be initialized. Those are currently created via media_entity_init() and, once created, never change. While this will likely change in the future, for now we can just initialize those objects once, when registering the entity. Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxx> diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c index 960a4e30c68d..56724f7853bf 100644 --- a/drivers/media/media-device.c +++ b/drivers/media/media-device.c @@ -430,6 +430,8 @@ EXPORT_SYMBOL_GPL(media_device_unregister); int __must_check media_device_register_entity(struct media_device *mdev, struct media_entity *entity) { + int i; + /* Warn if we apparently re-register an entity */ WARN_ON(entity->parent != NULL); entity->parent = mdev; @@ -438,6 +440,11 @@ int __must_check media_device_register_entity(struct media_device *mdev, /* Initialize media_graph_obj embedded at the entity */ graph_obj_init(mdev, MEDIA_GRAPH_ENTITY, &entity->graph_obj); + /* Initialize objects at the pads */ + for (i = 0; entity->num_pads; i++) + graph_obj_init(mdev, MEDIA_GRAPH_PAD, + &entity->pads[i].graph_obj); + /* * FIXME: should it use the unique object ID or would it * break support on the legacy MC API? @@ -462,6 +469,7 @@ EXPORT_SYMBOL_GPL(media_device_register_entity); */ void media_device_unregister_entity(struct media_entity *entity) { + int i; struct media_device *mdev = entity->parent; if (mdev == NULL) @@ -469,6 +477,8 @@ void media_device_unregister_entity(struct media_entity *entity) spin_lock(&mdev->lock); graph_obj_remove(&entity->graph_obj); + for (i = 0; entity->num_pads; i++) + graph_obj_remove(&entity->pads[i].graph_obj); list_del(&entity->list); spin_unlock(&mdev->lock); entity->parent = NULL; -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html