]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
d2bb390a DU |
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 { | |
195727e8 | 111 | const struct snd_kcontrol_new *kcontrol_new; |
d2bb390a DU |
112 | int control_id; |
113 | int type; | |
114 | int num_channels; | |
115 | const char *name; | |
d2bb390a DU |
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 */ |