blob: 5b4fe9efb8f1c5b9b72039cc1e2cd4d9415f0d8c [file] [log] [blame]
Bryan Wuc6994e62009-06-03 09:17:58 -04001/*
Jassi Brar18b5b3b2012-02-02 21:59:53 +05302 * u_uac1.h -- interface to USB gadget "ALSA AUDIO" utilities
Bryan Wuc6994e62009-06-03 09:17:58 -04003 *
4 * Copyright (C) 2008 Bryan Wu <cooloney@kernel.org>
5 * Copyright (C) 2008 Analog Devices, Inc
6 *
7 * Enter bugs at http://blackfin.uclinux.org/
8 *
9 * Licensed under the GPL-2 or later.
10 */
11
12#ifndef __U_AUDIO_H
13#define __U_AUDIO_H
14
15#include <linux/device.h>
16#include <linux/err.h>
17#include <linux/usb/audio.h>
18#include <linux/usb/composite.h>
19
20#include <sound/core.h>
21#include <sound/pcm.h>
22#include <sound/pcm_params.h>
23
24#include "gadget_chips.h"
25
26/*
27 * This represents the USB side of an audio card device, managed by a USB
28 * function which provides control and stream interfaces.
29 */
30
31struct gaudio_snd_dev {
32 struct gaudio *card;
33 struct file *filp;
34 struct snd_pcm_substream *substream;
35 int access;
36 int format;
37 int channels;
38 int rate;
39};
40
41struct gaudio {
42 struct usb_function func;
43 struct usb_gadget *gadget;
44
45 /* ALSA sound device interfaces */
46 struct gaudio_snd_dev control;
47 struct gaudio_snd_dev playback;
48 struct gaudio_snd_dev capture;
49
50 /* TODO */
51};
52
Andrzej Pietrasiewiczf3a34062014-07-22 19:58:38 +020053struct f_uac1_opts {
54 struct usb_function_instance func_inst;
55 int req_buf_size;
56 int req_count;
57 int audio_buf_size;
58 char *fn_play;
59 char *fn_cap;
60 char *fn_cntl;
61 bool bound;
62 struct gaudio *card;
63};
64
Bryan Wuc6994e62009-06-03 09:17:58 -040065int gaudio_setup(struct gaudio *card);
Andrzej Pietrasiewiczf3a34062014-07-22 19:58:38 +020066#ifdef USBF_UAC1_INCLUDED
Cliff Caifeef1d92009-12-09 22:28:39 -050067void gaudio_cleanup(void);
Andrzej Pietrasiewiczf3a34062014-07-22 19:58:38 +020068#else
69void gaudio_cleanup(struct gaudio *the_card);
70#endif
71
72size_t u_audio_playback(struct gaudio *card, void *buf, size_t count);
73int u_audio_get_playback_channels(struct gaudio *card);
74int u_audio_get_playback_rate(struct gaudio *card);
Bryan Wuc6994e62009-06-03 09:17:58 -040075
76#endif /* __U_AUDIO_H */