summaryrefslogtreecommitdiff
path: root/drivers/media/media-device.c
diff options
context:
space:
mode:
authorShuah Khan <shuahkh@osg.samsung.com>2015-06-03 18:12:53 +0300
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2016-01-11 17:05:48 +0300
commitd062f91193dbd5a0c1d8469c8517ec8dd552c3f2 (patch)
tree0fc61740f5da65f8c599bb7658d92d25f5ff019c /drivers/media/media-device.c
parent768acf46e1320d6c41ed1b7c4952bab41c1cde79 (diff)
downloadlinux-d062f91193dbd5a0c1d8469c8517ec8dd552c3f2.tar.xz
[media] media: new media controller API for device resource support
Add new media controller API to allocate media device as a device resource. When a media device is created on the main struct device which is the parent device for the interface device, it will be available to all drivers associated with that interface. For example, if a usb media device driver creates the media device on the main struct device which is common for all the drivers that control the media device, including the non-media ALSA driver, media controller API can be used to share access to the resources on the media device. This new interface provides the above described feature. A second interface that finds and returns the media device is added to allow drivers to find the media device created by any of the drivers associated with the device. Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/media-device.c')
-rw-r--r--drivers/media/media-device.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
index 7b39440192d6..a4d5b2488c05 100644
--- a/drivers/media/media-device.c
+++ b/drivers/media/media-device.c
@@ -462,3 +462,36 @@ void media_device_unregister_entity(struct media_entity *entity)
entity->parent = NULL;
}
EXPORT_SYMBOL_GPL(media_device_unregister_entity);
+
+static void media_device_release_devres(struct device *dev, void *res)
+{
+}
+
+/*
+ * media_device_get_devres() - get media device as device resource
+ * creates if one doesn't exist
+*/
+struct media_device *media_device_get_devres(struct device *dev)
+{
+ struct media_device *mdev;
+
+ mdev = devres_find(dev, media_device_release_devres, NULL, NULL);
+ if (mdev)
+ return mdev;
+
+ mdev = devres_alloc(media_device_release_devres,
+ sizeof(struct media_device), GFP_KERNEL);
+ if (!mdev)
+ return NULL;
+ return devres_get(dev, mdev, NULL, NULL);
+}
+EXPORT_SYMBOL_GPL(media_device_get_devres);
+
+/*
+ * media_device_find_devres() - find media device as device resource
+*/
+struct media_device *media_device_find_devres(struct device *dev)
+{
+ return devres_find(dev, media_device_release_devres, NULL, NULL);
+}
+EXPORT_SYMBOL_GPL(media_device_find_devres);