1#ifndef __USBAUDIO_H
2#define __USBAUDIO_H
3/*
4 *   (Tentative) USB Audio Driver for ALSA
5 *
6 *   Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>
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
33struct snd_usb_audio {
34	int index;
35	struct usb_device *dev;
36	struct snd_card *card;
37	u32 usb_id;
38	int shutdown;
39	unsigned int txfr_quirk:1; /* Subframe boundaries on transfers */
40	int num_interfaces;
41	int num_suspended_intf;
42
43	struct list_head pcm_list;	/* list of pcm streams */
44	int pcm_devs;
45
46	struct list_head midi_list;	/* list of midi interfaces */
47
48	struct list_head mixer_list;	/* list of mixer interfaces */
49
50	int setup;			/* from the 'device_setup' module param */
51	int nrpacks;			/* from the 'nrpacks' module param */
52	int async_unlink;		/* from the 'async_unlink' module param */
53
54	struct usb_host_interface *ctrl_intf;	/* the audio control interface */
55};
56
57/*
58 * Information about devices with broken descriptors
59 */
60
61/* special values for .ifnum */
62#define QUIRK_NO_INTERFACE		-2
63#define QUIRK_ANY_INTERFACE		-1
64
65enum quirk_type {
66	QUIRK_IGNORE_INTERFACE,
67	QUIRK_COMPOSITE,
68	QUIRK_MIDI_STANDARD_INTERFACE,
69	QUIRK_MIDI_FIXED_ENDPOINT,
70	QUIRK_MIDI_YAMAHA,
71	QUIRK_MIDI_MIDIMAN,
72	QUIRK_MIDI_NOVATION,
73	QUIRK_MIDI_FASTLANE,
74	QUIRK_MIDI_EMAGIC,
75	QUIRK_MIDI_CME,
76	QUIRK_MIDI_AKAI,
77	QUIRK_MIDI_US122L,
78	QUIRK_AUDIO_STANDARD_INTERFACE,
79	QUIRK_AUDIO_FIXED_ENDPOINT,
80	QUIRK_AUDIO_EDIROL_UAXX,
81	QUIRK_AUDIO_ALIGN_TRANSFER,
82
83	QUIRK_TYPE_COUNT
84};
85
86struct snd_usb_audio_quirk {
87	const char *vendor_name;
88	const char *product_name;
89	int16_t ifnum;
90	uint16_t type;
91	const void *data;
92};
93
94#define combine_word(s)    ((*(s)) | ((unsigned int)(s)[1] << 8))
95#define combine_triple(s)  (combine_word(s) | ((unsigned int)(s)[2] << 16))
96#define combine_quad(s)    (combine_triple(s) | ((unsigned int)(s)[3] << 24))
97
98#endif /* __USBAUDIO_H */
99