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