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