@@ -701,15 +701,23 @@ void media_device_init(struct media_device *mdev)
}
EXPORT_SYMBOL_GPL(media_device_init);
-struct media_device *media_device_alloc(void)
+struct media_device *media_device_alloc(struct device *dev)
{
struct media_device *mdev;
+ dev = get_device(dev);
+ if (!dev)
+ return NULL;
+
mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
- if (!mdev)
+ if (!mdev) {
+ put_device(dev);
return NULL;
+ }
media_devnode_init(&mdev->devnode);
+
+ mdev->dev = dev;
media_device_init(mdev);
return mdev;
@@ -722,6 +730,7 @@ void media_device_cleanup(struct media_device *mdev)
mdev->entity_internal_idx_max = 0;
media_entity_graph_walk_cleanup(&mdev->pm_count_walk);
mutex_destroy(&mdev->graph_mutex);
+ put_device(mdev->dev);
}
EXPORT_SYMBOL_GPL(media_device_cleanup);
@@ -430,6 +430,8 @@ void media_device_init(struct media_device *mdev);
/**
* media_device_alloc() - Allocate and initialise a media device
*
+ * @dev: The associated struct device pointer
+ *
* Allocate and initialise a media device. Returns a media device.
* The media device is refcounted, and this function returns a media
* device the refcount of which is one (1).
@@ -437,7 +439,7 @@ void media_device_init(struct media_device *mdev);
* References are taken and given using media_device_get() and
* media_device_put().
*/
-struct media_device *media_device_alloc(void);
+struct media_device *media_device_alloc(struct device *dev);
/**
* media_device_get() - Get a reference to a media device
The media device always has a device around. Require one as an argument for media_device_alloc(). Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> --- drivers/media/media-device.c | 13 +++++++++++-- include/media/media-device.h | 4 +++- 2 files changed, 14 insertions(+), 3 deletions(-)