hc
2024-08-16 a24a44ff9ca902811b99aa9663d697cf452e08ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* 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 */