]>
Commit | Line | Data |
---|---|---|
66354f18 SK |
1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
2 | /* | |
3 | * media.h - Media Controller specific ALSA driver code | |
4 | * | |
5 | * Copyright (c) 2019 Shuah Khan <[email protected]> | |
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 */ |