forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
4.0 KiB
122 lines
4.0 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
#ifndef __USB_MIXER_US16X08_H |
|
#define __USB_MIXER_US16X08_H |
|
|
|
#define SND_US16X08_MAX_CHANNELS 16 |
|
|
|
/* define some bias, cause some alsa-mixers wont work with |
|
* negative ranges or if mixer-min != 0 |
|
*/ |
|
#define SND_US16X08_NO_BIAS 0 |
|
#define SND_US16X08_FADER_BIAS 127 |
|
#define SND_US16X08_EQ_HIGHFREQ_BIAS 0x20 |
|
#define SND_US16X08_COMP_THRESHOLD_BIAS 0x20 |
|
#define SND_US16X08_COMP_ATTACK_BIAS 2 |
|
#define SND_US16X08_COMP_RELEASE_BIAS 1 |
|
|
|
/* get macro for components of kcontrol private_value */ |
|
#define SND_US16X08_KCBIAS(x) (((x)->private_value >> 24) & 0xff) |
|
#define SND_US16X08_KCSTEP(x) (((x)->private_value >> 16) & 0xff) |
|
#define SND_US16X08_KCMIN(x) (((x)->private_value >> 8) & 0xff) |
|
#define SND_US16X08_KCMAX(x) (((x)->private_value >> 0) & 0xff) |
|
/* set macro for kcontrol private_value */ |
|
#define SND_US16X08_KCSET(bias, step, min, max) \ |
|
(((bias) << 24) | ((step) << 16) | ((min) << 8) | (max)) |
|
|
|
/* the URB request/type to control Tascam mixers */ |
|
#define SND_US16X08_URB_REQUEST 0x1D |
|
#define SND_US16X08_URB_REQUESTTYPE 0x40 |
|
|
|
/* the URB params to retrieve meter ranges */ |
|
#define SND_US16X08_URB_METER_REQUEST 0x1e |
|
#define SND_US16X08_URB_METER_REQUESTTYPE 0xc0 |
|
|
|
#define MUA0(x, y) ((x)[(y) * 10 + 4]) |
|
#define MUA1(x, y) ((x)[(y) * 10 + 5]) |
|
#define MUA2(x, y) ((x)[(y) * 10 + 6]) |
|
#define MUB0(x, y) ((x)[(y) * 10 + 7]) |
|
#define MUB1(x, y) ((x)[(y) * 10 + 8]) |
|
#define MUB2(x, y) ((x)[(y) * 10 + 9]) |
|
#define MUC0(x, y) ((x)[(y) * 10 + 10]) |
|
#define MUC1(x, y) ((x)[(y) * 10 + 11]) |
|
#define MUC2(x, y) ((x)[(y) * 10 + 12]) |
|
#define MUC3(x, y) ((x)[(y) * 10 + 13]) |
|
|
|
/* Common Channel control IDs */ |
|
#define SND_US16X08_ID_BYPASS 0x45 |
|
#define SND_US16X08_ID_BUSS_OUT 0x44 |
|
#define SND_US16X08_ID_PHASE 0x85 |
|
#define SND_US16X08_ID_MUTE 0x83 |
|
#define SND_US16X08_ID_FADER 0x81 |
|
#define SND_US16X08_ID_PAN 0x82 |
|
#define SND_US16X08_ID_METER 0xB1 |
|
|
|
#define SND_US16X08_ID_EQ_BAND_COUNT 4 |
|
#define SND_US16X08_ID_EQ_PARAM_COUNT 4 |
|
|
|
/* EQ level IDs */ |
|
#define SND_US16X08_ID_EQLOWLEVEL 0x01 |
|
#define SND_US16X08_ID_EQLOWMIDLEVEL 0x02 |
|
#define SND_US16X08_ID_EQHIGHMIDLEVEL 0x03 |
|
#define SND_US16X08_ID_EQHIGHLEVEL 0x04 |
|
|
|
/* EQ frequence IDs */ |
|
#define SND_US16X08_ID_EQLOWFREQ 0x11 |
|
#define SND_US16X08_ID_EQLOWMIDFREQ 0x12 |
|
#define SND_US16X08_ID_EQHIGHMIDFREQ 0x13 |
|
#define SND_US16X08_ID_EQHIGHFREQ 0x14 |
|
|
|
/* EQ width IDs */ |
|
#define SND_US16X08_ID_EQLOWMIDWIDTH 0x22 |
|
#define SND_US16X08_ID_EQHIGHMIDWIDTH 0x23 |
|
|
|
#define SND_US16X08_ID_EQENABLE 0x30 |
|
|
|
#define EQ_STORE_BAND_IDX(x) ((x) & 0xf) |
|
#define EQ_STORE_PARAM_IDX(x) (((x) & 0xf0) >> 4) |
|
|
|
#define SND_US16X08_ID_ROUTE 0x00 |
|
|
|
/* Compressor Ids */ |
|
#define SND_US16X08_ID_COMP_BASE 0x32 |
|
#define SND_US16X08_ID_COMP_THRESHOLD SND_US16X08_ID_COMP_BASE |
|
#define SND_US16X08_ID_COMP_RATIO (SND_US16X08_ID_COMP_BASE + 1) |
|
#define SND_US16X08_ID_COMP_ATTACK (SND_US16X08_ID_COMP_BASE + 2) |
|
#define SND_US16X08_ID_COMP_RELEASE (SND_US16X08_ID_COMP_BASE + 3) |
|
#define SND_US16X08_ID_COMP_GAIN (SND_US16X08_ID_COMP_BASE + 4) |
|
#define SND_US16X08_ID_COMP_SWITCH (SND_US16X08_ID_COMP_BASE + 5) |
|
#define SND_US16X08_ID_COMP_COUNT 6 |
|
|
|
#define COMP_STORE_IDX(x) ((x) - SND_US16X08_ID_COMP_BASE) |
|
|
|
struct snd_us16x08_eq_store { |
|
u8 val[SND_US16X08_ID_EQ_BAND_COUNT][SND_US16X08_ID_EQ_PARAM_COUNT] |
|
[SND_US16X08_MAX_CHANNELS]; |
|
}; |
|
|
|
struct snd_us16x08_comp_store { |
|
u8 val[SND_US16X08_ID_COMP_COUNT][SND_US16X08_MAX_CHANNELS]; |
|
}; |
|
|
|
struct snd_us16x08_meter_store { |
|
int meter_level[SND_US16X08_MAX_CHANNELS]; |
|
int master_level[2]; /* level of meter for master output */ |
|
int comp_index; /* round trip channel selector */ |
|
int comp_active_index; /* channel select from user space mixer */ |
|
int comp_level[16]; /* compressor reduction level */ |
|
struct snd_us16x08_comp_store *comp_store; |
|
}; |
|
|
|
struct snd_us16x08_control_params { |
|
const struct snd_kcontrol_new *kcontrol_new; |
|
int control_id; |
|
int type; |
|
int num_channels; |
|
const char *name; |
|
int default_val; |
|
}; |
|
|
|
#define snd_us16x08_switch_info snd_ctl_boolean_mono_info |
|
|
|
int snd_us16x08_controls_create(struct usb_mixer_interface *mixer); |
|
#endif /* __USB_MIXER_US16X08_H */
|
|
|