1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * media.h - Media Controller specific ALSA driver code 4 * 5 * Copyright (c) 2019 Shuah Khan <shuah@kernel.org> 6 * 7 */ 8 9 /* 10 * This file adds Media Controller support to the ALSA driver 11 * to use the Media Controller API to share the tuner with DVB 12 * and V4L2 drivers that control the media device. 13 * 14 * The media device is created based on the existing quirks framework. 15 * Using this approach, the media controller API usage can be added for 16 * a specific device. 17 */ 18 #ifndef __MEDIA_H 19 20 #ifdef CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER 21 22 #include <linux/media.h> 23 #include <media/media-device.h> 24 #include <media/media-entity.h> 25 #include <media/media-dev-allocator.h> 26 #include <sound/asound.h> 27 28 struct media_ctl { 29 struct media_device *media_dev; 30 struct media_entity media_entity; 31 struct media_intf_devnode *intf_devnode; 32 struct media_link *intf_link; 33 struct media_pad media_pad; 34 struct media_pipeline media_pipe; 35 }; 36 37 /* 38 * One source pad each for SNDRV_PCM_STREAM_CAPTURE and 39 * SNDRV_PCM_STREAM_PLAYBACK. One for sink pad to link 40 * to AUDIO Source 41 */ 42 #define MEDIA_MIXER_PAD_MAX (SNDRV_PCM_STREAM_LAST + 2) 43 44 struct media_mixer_ctl { 45 struct media_device *media_dev; 46 struct media_entity media_entity; 47 struct media_intf_devnode *intf_devnode; 48 struct media_link *intf_link; 49 struct media_pad media_pad[MEDIA_MIXER_PAD_MAX]; 50 struct media_pipeline media_pipe; 51 }; 52 53 int snd_media_device_create(struct snd_usb_audio *chip, 54 struct usb_interface *iface); 55 void snd_media_device_delete(struct snd_usb_audio *chip); 56 int snd_media_stream_init(struct snd_usb_substream *subs, struct snd_pcm *pcm, 57 int stream); 58 void snd_media_stream_delete(struct snd_usb_substream *subs); 59 int snd_media_start_pipeline(struct snd_usb_substream *subs); 60 void snd_media_stop_pipeline(struct snd_usb_substream *subs); 61 #else 62 static inline int snd_media_device_create(struct snd_usb_audio *chip, 63 struct usb_interface *iface) 64 { return 0; } 65 static inline void snd_media_device_delete(struct snd_usb_audio *chip) { } 66 static inline int snd_media_stream_init(struct snd_usb_substream *subs, 67 struct snd_pcm *pcm, int stream) 68 { return 0; } 69 static inline void snd_media_stream_delete(struct snd_usb_substream *subs) { } 70 static inline int snd_media_start_pipeline(struct snd_usb_substream *subs) 71 { return 0; } 72 static inline void snd_media_stop_pipeline(struct snd_usb_substream *subs) { } 73 #endif 74 #endif /* __MEDIA_H */ 75