1*2e759738SNishad Kamdar /* SPDX-License-Identifier: GPL-2.0+ */ 2d355339eSRuslan Bilovol /* 3d355339eSRuslan Bilovol * u_uac1.h -- interface to USB gadget "ALSA AUDIO" utilities 4d355339eSRuslan Bilovol * 5d355339eSRuslan Bilovol * Copyright (C) 2008 Bryan Wu <cooloney@kernel.org> 6d355339eSRuslan Bilovol * Copyright (C) 2008 Analog Devices, Inc 7d355339eSRuslan Bilovol */ 8d355339eSRuslan Bilovol 9d355339eSRuslan Bilovol #ifndef __U_UAC1_LEGACY_H 10d355339eSRuslan Bilovol #define __U_UAC1_LEGACY_H 11d355339eSRuslan Bilovol 12d355339eSRuslan Bilovol #include <linux/device.h> 13d355339eSRuslan Bilovol #include <linux/err.h> 14d355339eSRuslan Bilovol #include <linux/usb/audio.h> 15d355339eSRuslan Bilovol #include <linux/usb/composite.h> 16d355339eSRuslan Bilovol 17d355339eSRuslan Bilovol #include <sound/core.h> 18d355339eSRuslan Bilovol #include <sound/pcm.h> 19d355339eSRuslan Bilovol #include <sound/pcm_params.h> 20d355339eSRuslan Bilovol 21d355339eSRuslan Bilovol #define FILE_PCM_PLAYBACK "/dev/snd/pcmC0D0p" 22d355339eSRuslan Bilovol #define FILE_PCM_CAPTURE "/dev/snd/pcmC0D0c" 23d355339eSRuslan Bilovol #define FILE_CONTROL "/dev/snd/controlC0" 24d355339eSRuslan Bilovol 25d355339eSRuslan Bilovol #define UAC1_OUT_EP_MAX_PACKET_SIZE 200 26d355339eSRuslan Bilovol #define UAC1_REQ_COUNT 256 27d355339eSRuslan Bilovol #define UAC1_AUDIO_BUF_SIZE 48000 28d355339eSRuslan Bilovol 29d355339eSRuslan Bilovol /* 30d355339eSRuslan Bilovol * This represents the USB side of an audio card device, managed by a USB 31d355339eSRuslan Bilovol * function which provides control and stream interfaces. 32d355339eSRuslan Bilovol */ 33d355339eSRuslan Bilovol 34d355339eSRuslan Bilovol struct gaudio_snd_dev { 35d355339eSRuslan Bilovol struct gaudio *card; 36d355339eSRuslan Bilovol struct file *filp; 37d355339eSRuslan Bilovol struct snd_pcm_substream *substream; 38d355339eSRuslan Bilovol int access; 39d355339eSRuslan Bilovol int format; 40d355339eSRuslan Bilovol int channels; 41d355339eSRuslan Bilovol int rate; 42d355339eSRuslan Bilovol }; 43d355339eSRuslan Bilovol 44d355339eSRuslan Bilovol struct gaudio { 45d355339eSRuslan Bilovol struct usb_function func; 46d355339eSRuslan Bilovol struct usb_gadget *gadget; 47d355339eSRuslan Bilovol 48d355339eSRuslan Bilovol /* ALSA sound device interfaces */ 49d355339eSRuslan Bilovol struct gaudio_snd_dev control; 50d355339eSRuslan Bilovol struct gaudio_snd_dev playback; 51d355339eSRuslan Bilovol struct gaudio_snd_dev capture; 52d355339eSRuslan Bilovol 53d355339eSRuslan Bilovol /* TODO */ 54d355339eSRuslan Bilovol }; 55d355339eSRuslan Bilovol 56d355339eSRuslan Bilovol struct f_uac1_legacy_opts { 57d355339eSRuslan Bilovol struct usb_function_instance func_inst; 58d355339eSRuslan Bilovol int req_buf_size; 59d355339eSRuslan Bilovol int req_count; 60d355339eSRuslan Bilovol int audio_buf_size; 61d355339eSRuslan Bilovol char *fn_play; 62d355339eSRuslan Bilovol char *fn_cap; 63d355339eSRuslan Bilovol char *fn_cntl; 64d355339eSRuslan Bilovol unsigned bound:1; 65d355339eSRuslan Bilovol unsigned fn_play_alloc:1; 66d355339eSRuslan Bilovol unsigned fn_cap_alloc:1; 67d355339eSRuslan Bilovol unsigned fn_cntl_alloc:1; 68d355339eSRuslan Bilovol struct mutex lock; 69d355339eSRuslan Bilovol int refcnt; 70d355339eSRuslan Bilovol }; 71d355339eSRuslan Bilovol 72d355339eSRuslan Bilovol int gaudio_setup(struct gaudio *card); 73d355339eSRuslan Bilovol void gaudio_cleanup(struct gaudio *the_card); 74d355339eSRuslan Bilovol 75d355339eSRuslan Bilovol size_t u_audio_playback(struct gaudio *card, void *buf, size_t count); 76d355339eSRuslan Bilovol int u_audio_get_playback_channels(struct gaudio *card); 77d355339eSRuslan Bilovol int u_audio_get_playback_rate(struct gaudio *card); 78d355339eSRuslan Bilovol 79d355339eSRuslan Bilovol #endif /* __U_UAC1_LEGACY_H */ 80