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