aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorJavier Martinez Canillas <javier@osg.samsung.com>2015-12-11 20:57:07 -0200
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2016-01-11 12:19:14 -0200
commit223d19c56651a0204253035f9ed28834653d2b4b (patch)
treed9e66a98fc4d237f2d073ea1b6257f204aa19c8d /drivers/media
parent[media] media-entity: cache media_device on object removal (diff)
downloadlinux-dev-223d19c56651a0204253035f9ed28834653d2b4b.tar.xz
linux-dev-223d19c56651a0204253035f9ed28834653d2b4b.zip
[media] media-device: check before unregister if mdev was registered
Most media functions that unregister, check if the corresponding register function succeed before. So these functions can safely be called even if a registration was never made or the component as already been unregistered. Add the same check to media_device_unregister() function for consistency. This will also allow to split the media_device_register() function in an initialization and registration functions without the need to change the generic cleanup functions and error code paths for all the media drivers. Suggested-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/media-device.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
index ca16bd3091bd..da4126863ecc 100644
--- a/drivers/media/media-device.c
+++ b/drivers/media/media-device.c
@@ -577,6 +577,8 @@ EXPORT_SYMBOL_GPL(__media_device_register);
* media_device_unregister - unregister a media device
* @mdev: The media device
*
+ * It is safe to call this function on an unregistered
+ * (but initialised) media device.
*/
void media_device_unregister(struct media_device *mdev)
{
@@ -584,6 +586,10 @@ void media_device_unregister(struct media_device *mdev)
struct media_entity *next;
struct media_interface *intf, *tmp_intf;
+ /* Check if mdev was ever registered at all */
+ if (!media_devnode_is_registered(&mdev->devnode))
+ return;
+
/* Remove all entities from the media device */
list_for_each_entry_safe(entity, next, &mdev->entities, graph_obj.list)
media_device_unregister_entity(entity);