mixer_us16x08.h (4072B)
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 92struct 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 97struct snd_us16x08_comp_store { 98 u8 val[SND_US16X08_ID_COMP_COUNT][SND_US16X08_MAX_CHANNELS]; 99}; 100 101struct 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 110struct 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 121int snd_us16x08_controls_create(struct usb_mixer_interface *mixer); 122#endif /* __USB_MIXER_US16X08_H */