diff options
author | Mauro Carvalho Chehab | 2015-08-24 13:46:46 +0200 |
---|---|---|
committer | Mauro Carvalho Chehab | 2016-01-11 15:18:54 +0100 |
commit | 7c4696a910d404eda3477e76a35c155a6b83ca3e (patch) | |
tree | ae45edea906b8c513642fa5fb324200b981e6d29 | |
parent | [media] media-device: add support for MEDIA_IOC_G_TOPOLOGY ioctl (diff) | |
download | kernel-qcow2-linux-7c4696a910d404eda3477e76a35c155a6b83ca3e.tar.gz kernel-qcow2-linux-7c4696a910d404eda3477e76a35c155a6b83ca3e.tar.xz kernel-qcow2-linux-7c4696a910d404eda3477e76a35c155a6b83ca3e.zip |
[media] media-entity: unregister entity links
Add functions to explicitly unregister all entity links.
This function is called automatically when an entity
link is destroyed.
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
-rw-r--r-- | drivers/media/media-entity.c | 23 | ||||
-rw-r--r-- | include/media/media-entity.h | 3 |
2 files changed, 26 insertions, 0 deletions
diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c index 1b2fd724cdbf..ceae708bdad4 100644 --- a/drivers/media/media-entity.c +++ b/drivers/media/media-entity.c @@ -891,6 +891,7 @@ EXPORT_SYMBOL_GPL(media_devnode_create); void media_devnode_remove(struct media_intf_devnode *devnode) { + media_remove_intf_links(&devnode->intf); media_gobj_remove(&devnode->intf.graph_obj); kfree(devnode); } @@ -932,3 +933,25 @@ void media_remove_intf_link(struct media_link *link) mutex_unlock(&link->graph_obj.mdev->graph_mutex); } EXPORT_SYMBOL_GPL(media_remove_intf_link); + +void __media_remove_intf_links(struct media_interface *intf) +{ + struct media_link *link, *tmp; + + list_for_each_entry_safe(link, tmp, &intf->links, list) + __media_remove_intf_link(link); + +} +EXPORT_SYMBOL_GPL(__media_remove_intf_links); + +void media_remove_intf_links(struct media_interface *intf) +{ + /* Do nothing if the intf is not registered. */ + if (intf->graph_obj.mdev == NULL) + return; + + mutex_lock(&intf->graph_obj.mdev->graph_mutex); + __media_remove_intf_links(intf); + mutex_unlock(&intf->graph_obj.mdev->graph_mutex); +} +EXPORT_SYMBOL_GPL(media_remove_intf_links); diff --git a/include/media/media-entity.h b/include/media/media-entity.h index f9058601440a..0753f3029d06 100644 --- a/include/media/media-entity.h +++ b/include/media/media-entity.h @@ -326,6 +326,9 @@ struct media_link *media_create_intf_link(struct media_entity *entity, struct media_interface *intf, u32 flags); void media_remove_intf_link(struct media_link *link); +void __media_remove_intf_links(struct media_interface *intf); +void media_remove_intf_links(struct media_interface *intf); + #define media_entity_call(entity, operation, args...) \ (((entity)->ops && (entity)->ops->operation) ? \ |