Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/usb/media.h
26378 views
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 */
75
76