2019-04-01 20:40:19 -04:00
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* media - dev - allocator . h - Media Controller Device Allocator API
*
* Copyright ( c ) 2019 Shuah Khan < shuah @ kernel . org >
*
* Credits : Suggested by Laurent Pinchart < laurent . pinchart @ ideasonboard . com >
*/
/*
* This file adds a global ref - counted Media Controller Device Instance API .
* A system wide global media device list is managed and each media device
* includes a kref count . The last put on the media device releases the media
* device instance .
*/
# ifndef _MEDIA_DEV_ALLOCATOR_H
# define _MEDIA_DEV_ALLOCATOR_H
struct usb_device ;
2021-06-16 17:19:06 +02:00
# if defined(CONFIG_MEDIA_CONTROLLER) && IS_ENABLED(CONFIG_USB)
2019-04-01 20:40:19 -04:00
/**
* media_device_usb_allocate ( ) - Allocate and return struct & media device
*
* @ udev : struct & usb_device pointer
* @ module_name : should be filled with % KBUILD_MODNAME
* @ owner : struct module pointer % THIS_MODULE for the driver .
* % THIS_MODULE is null for a built - in driver .
* It is safe even when % THIS_MODULE is null .
*
* This interface should be called to allocate a Media Device when multiple
* drivers share usb_device and the media device . This interface allocates
* & media_device structure and calls media_device_usb_init ( ) to initialize
* it .
*
*/
struct media_device * media_device_usb_allocate ( struct usb_device * udev ,
const char * module_name ,
struct module * owner ) ;
/**
* media_device_delete ( ) - Release media device . Calls kref_put ( ) .
*
* @ mdev : struct & media_device pointer
* @ module_name : should be filled with % KBUILD_MODNAME
* @ owner : struct module pointer % THIS_MODULE for the driver .
* % THIS_MODULE is null for a built - in driver .
* It is safe even when % THIS_MODULE is null .
*
* This interface should be called to put Media Device Instance kref .
*/
void media_device_delete ( struct media_device * mdev , const char * module_name ,
struct module * owner ) ;
# else
static inline struct media_device * media_device_usb_allocate (
struct usb_device * udev , const char * module_name ,
struct module * owner )
{ return NULL ; }
static inline void media_device_delete (
struct media_device * mdev , const char * module_name ,
struct module * owner ) { }
# endif /* CONFIG_MEDIA_CONTROLLER && CONFIG_USB */
# endif /* _MEDIA_DEV_ALLOCATOR_H */