Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
  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 */