root/sound/usb/mixer_us16x08.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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         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 */

/* [<][>][^][v][top][bottom][index][help] */