On Tue, Nov 8, 2016 at 6:55 AM, Sakari Ailus
<[email protected]> wrote:
> From: Sakari Ailus <[email protected]>
>
> Allow allocating the media device dynamically. As the struct media_device
> embeds struct media_devnode, the lifetime of that object is that same than
> that of the media_device.
>
> Signed-off-by: Sakari Ailus <[email protected]>
> ---
> drivers/media/media-device.c | 15 +++++++++++++++
> include/media/media-device.h | 13 +++++++++++++
> 2 files changed, 28 insertions(+)
>
> diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
> index a31329d..496195e 100644
> --- a/drivers/media/media-device.c
> +++ b/drivers/media/media-device.c
> @@ -684,6 +684,21 @@ void media_device_init(struct media_device *mdev)
> }
> EXPORT_SYMBOL_GPL(media_device_init);
>
> +struct media_device *media_device_alloc(struct device *dev)
> +{
> + struct media_device *mdev;
> +
> + mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
> + if (!mdev)
> + return NULL;
> +
> + mdev->dev = dev;
> + media_device_init(mdev);
> +
> + return mdev;
> +}
> +EXPORT_SYMBOL_GPL(media_device_alloc);
> +
One problem with this allocation is, this media device can't be shared across
drivers. For au0828 and snd-usb-audio should be able to share the
media_device. That is what the Media Allocator API patch series does.
This a quick review and I will review the patch series and get back to
you.
thanks,
-- Shuah
> void media_device_cleanup(struct media_device *mdev)
> {
> ida_destroy(&mdev->entity_internal_idx);
> diff --git a/include/media/media-device.h b/include/media/media-device.h
> index 96de915..c9b5798 100644
> --- a/include/media/media-device.h
> +++ b/include/media/media-device.h
> @@ -207,6 +207,15 @@ static inline __must_check int media_entity_enum_init(
> 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.
> + */
> +struct media_device *media_device_alloc(struct device *dev);
> +
> +/**
> * media_device_cleanup() - Cleanups a media device element
> *
> * @mdev: pointer to struct &media_device
> @@ -451,6 +460,10 @@ void __media_device_usb_init(struct media_device *mdev,
> const char *driver_name);
>
> #else
> +static inline struct media_device *media_device_alloc(struct device *dev)
> +{
> + return NULL;
> +}
> static inline int media_device_register(struct media_device *mdev)
> {
> return 0;
> --
> 2.1.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html