cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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