Linux Audio

Check our new training course

Linux debugging, profiling, tracing and performance analysis training

Mar 24-27, 2025, special US time zones
Register
Loading...
Note: File does not exist in v4.6.
 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
28struct 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
44struct 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
53int snd_media_device_create(struct snd_usb_audio *chip,
54			    struct usb_interface *iface);
55void snd_media_device_delete(struct snd_usb_audio *chip);
56int snd_media_stream_init(struct snd_usb_substream *subs, struct snd_pcm *pcm,
57			  int stream);
58void snd_media_stream_delete(struct snd_usb_substream *subs);
59int snd_media_start_pipeline(struct snd_usb_substream *subs);
60void snd_media_stop_pipeline(struct snd_usb_substream *subs);
61#else
62static inline int snd_media_device_create(struct snd_usb_audio *chip,
63					  struct usb_interface *iface)
64						{ return 0; }
65static inline void snd_media_device_delete(struct snd_usb_audio *chip) { }
66static inline int snd_media_stream_init(struct snd_usb_substream *subs,
67					struct snd_pcm *pcm, int stream)
68						{ return 0; }
69static inline void snd_media_stream_delete(struct snd_usb_substream *subs) { }
70static inline int snd_media_start_pipeline(struct snd_usb_substream *subs)
71					{ return 0; }
72static inline void snd_media_stop_pipeline(struct snd_usb_substream *subs) { }
73#endif
74#endif /* __MEDIA_H */