xref: /openbmc/linux/sound/usb/media.h (revision 3e26a691)
1 /*
2  * media.h - Media Controller specific ALSA driver code
3  *
4  * Copyright (c) 2016 Shuah Khan <shuahkh@osg.samsung.com>
5  * Copyright (c) 2016 Samsung Electronics Co., Ltd.
6  *
7  * This file is released under the GPLv2.
8  */
9 
10 /*
11  * This file adds Media Controller support to ALSA driver
12  * to use the Media Controller API to share tuner with DVB
13  * and V4L2 drivers that control media device. Media device
14  * is created based on existing quirks framework. Using this
15  * 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 <media/media-device.h>
23 #include <media/media-entity.h>
24 #include <sound/asound.h>
25 
26 struct media_ctl {
27 	struct media_device *media_dev;
28 	struct media_entity media_entity;
29 	struct media_intf_devnode *intf_devnode;
30 	struct media_link *intf_link;
31 	struct media_pad media_pad;
32 	struct media_pipeline media_pipe;
33 };
34 
35 /*
36  * One source pad each for SNDRV_PCM_STREAM_CAPTURE and
37  * SNDRV_PCM_STREAM_PLAYBACK. One for sink pad to link
38  * to AUDIO Source
39 */
40 #define MEDIA_MIXER_PAD_MAX    (SNDRV_PCM_STREAM_LAST + 2)
41 
42 struct media_mixer_ctl {
43 	struct media_device *media_dev;
44 	struct media_entity media_entity;
45 	struct media_intf_devnode *intf_devnode;
46 	struct media_link *intf_link;
47 	struct media_pad media_pad[MEDIA_MIXER_PAD_MAX];
48 	struct media_pipeline media_pipe;
49 };
50 
51 int media_snd_device_create(struct snd_usb_audio *chip,
52 			    struct usb_interface *iface);
53 void media_snd_device_delete(struct snd_usb_audio *chip);
54 int media_snd_stream_init(struct snd_usb_substream *subs, struct snd_pcm *pcm,
55 			  int stream);
56 void media_snd_stream_delete(struct snd_usb_substream *subs);
57 int media_snd_start_pipeline(struct snd_usb_substream *subs);
58 void media_snd_stop_pipeline(struct snd_usb_substream *subs);
59 #else
60 static inline int media_snd_device_create(struct snd_usb_audio *chip,
61 					  struct usb_interface *iface)
62 						{ return 0; }
63 static inline void media_snd_device_delete(struct snd_usb_audio *chip) { }
64 static inline int media_snd_stream_init(struct snd_usb_substream *subs,
65 					struct snd_pcm *pcm, int stream)
66 						{ return 0; }
67 static inline void media_snd_stream_delete(struct snd_usb_substream *subs) { }
68 static inline int media_snd_start_pipeline(struct snd_usb_substream *subs)
69 					{ return 0; }
70 static inline void media_snd_stop_pipeline(struct snd_usb_substream *subs) { }
71 #endif
72 #endif /* __MEDIA_H */
73