linux/sound/usb/media.h
<<
>>
Prefs
   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 */
  75