/* 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;

#if defined(CONFIG_MEDIA_CONTROLLER) && IS_ENABLED(CONFIG_USB)
/**
 * 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 */
