On Tue, Nov 8, 2016 at 6:55 AM, Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> wrote: > From: Sakari Ailus <sakari.ailus@xxxxxx> > > 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 <sakari.ailus@xxxxxxxxxxxxxxx> > --- > 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 majordomo@xxxxxxxxxxxxxxx > 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html