| /* SPDX-License-Identifier: GPL-2.0+ */ | 
 | /* | 
 |  * media.h - Media Controller specific ALSA driver code | 
 |  * | 
 |  * Copyright (c) 2019 Shuah Khan <shuah@kernel.org> | 
 |  * | 
 |  */ | 
 |  | 
 | /* | 
 |  * This file adds Media Controller support to the ALSA driver | 
 |  * to use the Media Controller API to share the tuner with DVB | 
 |  * and V4L2 drivers that control the media device. | 
 |  * | 
 |  * The media device is created based on the existing quirks framework. | 
 |  * Using this approach, the media controller API usage can be added for | 
 |  * a specific device. | 
 |  */ | 
 | #ifndef __MEDIA_H | 
 |  | 
 | #ifdef CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER | 
 |  | 
 | #include <linux/media.h> | 
 | #include <media/media-device.h> | 
 | #include <media/media-entity.h> | 
 | #include <media/media-dev-allocator.h> | 
 | #include <sound/asound.h> | 
 |  | 
 | struct media_ctl { | 
 | 	struct media_device *media_dev; | 
 | 	struct media_entity media_entity; | 
 | 	struct media_intf_devnode *intf_devnode; | 
 | 	struct media_link *intf_link; | 
 | 	struct media_pad media_pad; | 
 | 	struct media_pipeline media_pipe; | 
 | }; | 
 |  | 
 | /* | 
 |  * One source pad each for SNDRV_PCM_STREAM_CAPTURE and | 
 |  * SNDRV_PCM_STREAM_PLAYBACK. One for sink pad to link | 
 |  * to AUDIO Source | 
 |  */ | 
 | #define MEDIA_MIXER_PAD_MAX    (SNDRV_PCM_STREAM_LAST + 2) | 
 |  | 
 | struct media_mixer_ctl { | 
 | 	struct media_device *media_dev; | 
 | 	struct media_entity media_entity; | 
 | 	struct media_intf_devnode *intf_devnode; | 
 | 	struct media_link *intf_link; | 
 | 	struct media_pad media_pad[MEDIA_MIXER_PAD_MAX]; | 
 | 	struct media_pipeline media_pipe; | 
 | }; | 
 |  | 
 | int snd_media_device_create(struct snd_usb_audio *chip, | 
 | 			    struct usb_interface *iface); | 
 | void snd_media_device_delete(struct snd_usb_audio *chip); | 
 | int snd_media_stream_init(struct snd_usb_substream *subs, struct snd_pcm *pcm, | 
 | 			  int stream); | 
 | void snd_media_stream_delete(struct snd_usb_substream *subs); | 
 | int snd_media_start_pipeline(struct snd_usb_substream *subs); | 
 | void snd_media_stop_pipeline(struct snd_usb_substream *subs); | 
 | #else | 
 | static inline int snd_media_device_create(struct snd_usb_audio *chip, | 
 | 					  struct usb_interface *iface) | 
 | 						{ return 0; } | 
 | static inline void snd_media_device_delete(struct snd_usb_audio *chip) { } | 
 | static inline int snd_media_stream_init(struct snd_usb_substream *subs, | 
 | 					struct snd_pcm *pcm, int stream) | 
 | 						{ return 0; } | 
 | static inline void snd_media_stream_delete(struct snd_usb_substream *subs) { } | 
 | static inline int snd_media_start_pipeline(struct snd_usb_substream *subs) | 
 | 					{ return 0; } | 
 | static inline void snd_media_stop_pipeline(struct snd_usb_substream *subs) { } | 
 | #endif | 
 | #endif /* __MEDIA_H */ |