Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/usb/mixer_us16x08.h
26378 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#ifndef __USB_MIXER_US16X08_H
3
#define __USB_MIXER_US16X08_H
4
5
#define SND_US16X08_MAX_CHANNELS 16
6
7
/* define some bias, cause some alsa-mixers wont work with
8
* negative ranges or if mixer-min != 0
9
*/
10
#define SND_US16X08_NO_BIAS 0
11
#define SND_US16X08_FADER_BIAS 127
12
#define SND_US16X08_EQ_HIGHFREQ_BIAS 0x20
13
#define SND_US16X08_COMP_THRESHOLD_BIAS 0x20
14
#define SND_US16X08_COMP_ATTACK_BIAS 2
15
#define SND_US16X08_COMP_RELEASE_BIAS 1
16
17
/* get macro for components of kcontrol private_value */
18
#define SND_US16X08_KCBIAS(x) (((x)->private_value >> 24) & 0xff)
19
#define SND_US16X08_KCSTEP(x) (((x)->private_value >> 16) & 0xff)
20
#define SND_US16X08_KCMIN(x) (((x)->private_value >> 8) & 0xff)
21
#define SND_US16X08_KCMAX(x) (((x)->private_value >> 0) & 0xff)
22
/* set macro for kcontrol private_value */
23
#define SND_US16X08_KCSET(bias, step, min, max) \
24
(((bias) << 24) | ((step) << 16) | ((min) << 8) | (max))
25
26
/* the URB request/type to control Tascam mixers */
27
#define SND_US16X08_URB_REQUEST 0x1D
28
#define SND_US16X08_URB_REQUESTTYPE 0x40
29
30
/* the URB params to retrieve meter ranges */
31
#define SND_US16X08_URB_METER_REQUEST 0x1e
32
#define SND_US16X08_URB_METER_REQUESTTYPE 0xc0
33
34
#define MUA0(x, y) ((x)[(y) * 10 + 4])
35
#define MUA1(x, y) ((x)[(y) * 10 + 5])
36
#define MUA2(x, y) ((x)[(y) * 10 + 6])
37
#define MUB0(x, y) ((x)[(y) * 10 + 7])
38
#define MUB1(x, y) ((x)[(y) * 10 + 8])
39
#define MUB2(x, y) ((x)[(y) * 10 + 9])
40
#define MUC0(x, y) ((x)[(y) * 10 + 10])
41
#define MUC1(x, y) ((x)[(y) * 10 + 11])
42
#define MUC2(x, y) ((x)[(y) * 10 + 12])
43
#define MUC3(x, y) ((x)[(y) * 10 + 13])
44
45
/* Common Channel control IDs */
46
#define SND_US16X08_ID_BYPASS 0x45
47
#define SND_US16X08_ID_BUSS_OUT 0x44
48
#define SND_US16X08_ID_PHASE 0x85
49
#define SND_US16X08_ID_MUTE 0x83
50
#define SND_US16X08_ID_FADER 0x81
51
#define SND_US16X08_ID_PAN 0x82
52
#define SND_US16X08_ID_METER 0xB1
53
54
#define SND_US16X08_ID_EQ_BAND_COUNT 4
55
#define SND_US16X08_ID_EQ_PARAM_COUNT 4
56
57
/* EQ level IDs */
58
#define SND_US16X08_ID_EQLOWLEVEL 0x01
59
#define SND_US16X08_ID_EQLOWMIDLEVEL 0x02
60
#define SND_US16X08_ID_EQHIGHMIDLEVEL 0x03
61
#define SND_US16X08_ID_EQHIGHLEVEL 0x04
62
63
/* EQ frequence IDs */
64
#define SND_US16X08_ID_EQLOWFREQ 0x11
65
#define SND_US16X08_ID_EQLOWMIDFREQ 0x12
66
#define SND_US16X08_ID_EQHIGHMIDFREQ 0x13
67
#define SND_US16X08_ID_EQHIGHFREQ 0x14
68
69
/* EQ width IDs */
70
#define SND_US16X08_ID_EQLOWMIDWIDTH 0x22
71
#define SND_US16X08_ID_EQHIGHMIDWIDTH 0x23
72
73
#define SND_US16X08_ID_EQENABLE 0x30
74
75
#define EQ_STORE_BAND_IDX(x) ((x) & 0xf)
76
#define EQ_STORE_PARAM_IDX(x) (((x) & 0xf0) >> 4)
77
78
#define SND_US16X08_ID_ROUTE 0x00
79
80
/* Compressor Ids */
81
#define SND_US16X08_ID_COMP_BASE 0x32
82
#define SND_US16X08_ID_COMP_THRESHOLD SND_US16X08_ID_COMP_BASE
83
#define SND_US16X08_ID_COMP_RATIO (SND_US16X08_ID_COMP_BASE + 1)
84
#define SND_US16X08_ID_COMP_ATTACK (SND_US16X08_ID_COMP_BASE + 2)
85
#define SND_US16X08_ID_COMP_RELEASE (SND_US16X08_ID_COMP_BASE + 3)
86
#define SND_US16X08_ID_COMP_GAIN (SND_US16X08_ID_COMP_BASE + 4)
87
#define SND_US16X08_ID_COMP_SWITCH (SND_US16X08_ID_COMP_BASE + 5)
88
#define SND_US16X08_ID_COMP_COUNT 6
89
90
#define COMP_STORE_IDX(x) ((x) - SND_US16X08_ID_COMP_BASE)
91
92
struct snd_us16x08_eq_store {
93
u8 val[SND_US16X08_ID_EQ_BAND_COUNT][SND_US16X08_ID_EQ_PARAM_COUNT]
94
[SND_US16X08_MAX_CHANNELS];
95
};
96
97
struct snd_us16x08_comp_store {
98
u8 val[SND_US16X08_ID_COMP_COUNT][SND_US16X08_MAX_CHANNELS];
99
};
100
101
struct snd_us16x08_meter_store {
102
int meter_level[SND_US16X08_MAX_CHANNELS];
103
int master_level[2]; /* level of meter for master output */
104
int comp_index; /* round trip channel selector */
105
int comp_active_index; /* channel select from user space mixer */
106
int comp_level[16]; /* compressor reduction level */
107
struct snd_us16x08_comp_store *comp_store;
108
};
109
110
struct snd_us16x08_control_params {
111
const struct snd_kcontrol_new *kcontrol_new;
112
int control_id;
113
int type;
114
int num_channels;
115
const char *name;
116
int default_val;
117
};
118
119
#define snd_us16x08_switch_info snd_ctl_boolean_mono_info
120
121
int snd_us16x08_controls_create(struct usb_mixer_interface *mixer);
122
#endif /* __USB_MIXER_US16X08_H */
123
124