Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/sound/usb/usbaudio.h
10814 views
1
#ifndef __USBAUDIO_H
2
#define __USBAUDIO_H
3
/*
4
* (Tentative) USB Audio Driver for ALSA
5
*
6
* Copyright (c) 2002 by Takashi Iwai <[email protected]>
7
*
8
*
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation; either version 2 of the License, or
12
* (at your option) any later version.
13
*
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
18
*
19
* You should have received a copy of the GNU General Public License
20
* along with this program; if not, write to the Free Software
21
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
*/
23
24
/* handling of USB vendor/product ID pairs as 32-bit numbers */
25
#define USB_ID(vendor, product) (((vendor) << 16) | (product))
26
#define USB_ID_VENDOR(id) ((id) >> 16)
27
#define USB_ID_PRODUCT(id) ((u16)(id))
28
29
/*
30
*
31
*/
32
33
struct snd_usb_audio {
34
int index;
35
struct usb_device *dev;
36
struct snd_card *card;
37
struct usb_interface *pm_intf;
38
u32 usb_id;
39
struct mutex shutdown_mutex;
40
unsigned int shutdown:1;
41
unsigned int probing:1;
42
unsigned int autosuspended:1;
43
unsigned int txfr_quirk:1; /* Subframe boundaries on transfers */
44
45
int num_interfaces;
46
int num_suspended_intf;
47
48
struct list_head pcm_list; /* list of pcm streams */
49
int pcm_devs;
50
51
struct list_head midi_list; /* list of midi interfaces */
52
53
struct list_head mixer_list; /* list of mixer interfaces */
54
55
int setup; /* from the 'device_setup' module param */
56
int nrpacks; /* from the 'nrpacks' module param */
57
int async_unlink; /* from the 'async_unlink' module param */
58
59
struct usb_host_interface *ctrl_intf; /* the audio control interface */
60
};
61
62
/*
63
* Information about devices with broken descriptors
64
*/
65
66
/* special values for .ifnum */
67
#define QUIRK_NO_INTERFACE -2
68
#define QUIRK_ANY_INTERFACE -1
69
70
enum quirk_type {
71
QUIRK_IGNORE_INTERFACE,
72
QUIRK_COMPOSITE,
73
QUIRK_MIDI_STANDARD_INTERFACE,
74
QUIRK_MIDI_FIXED_ENDPOINT,
75
QUIRK_MIDI_YAMAHA,
76
QUIRK_MIDI_MIDIMAN,
77
QUIRK_MIDI_NOVATION,
78
QUIRK_MIDI_RAW_BYTES,
79
QUIRK_MIDI_EMAGIC,
80
QUIRK_MIDI_CME,
81
QUIRK_MIDI_AKAI,
82
QUIRK_MIDI_US122L,
83
QUIRK_AUDIO_STANDARD_INTERFACE,
84
QUIRK_AUDIO_FIXED_ENDPOINT,
85
QUIRK_AUDIO_EDIROL_UAXX,
86
QUIRK_AUDIO_ALIGN_TRANSFER,
87
QUIRK_AUDIO_STANDARD_MIXER,
88
89
QUIRK_TYPE_COUNT
90
};
91
92
struct snd_usb_audio_quirk {
93
const char *vendor_name;
94
const char *product_name;
95
int16_t ifnum;
96
uint16_t type;
97
const void *data;
98
};
99
100
#define combine_word(s) ((*(s)) | ((unsigned int)(s)[1] << 8))
101
#define combine_triple(s) (combine_word(s) | ((unsigned int)(s)[2] << 16))
102
#define combine_quad(s) (combine_triple(s) | ((unsigned int)(s)[3] << 24))
103
104
#endif /* __USBAUDIO_H */
105
106