Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) #ifndef __USB_MIXER_US16X08_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) #define __USB_MIXER_US16X08_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) #define SND_US16X08_MAX_CHANNELS 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) /* define some bias, cause some alsa-mixers wont work with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * negative ranges or if mixer-min != 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #define SND_US16X08_NO_BIAS 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #define SND_US16X08_FADER_BIAS 127
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #define SND_US16X08_EQ_HIGHFREQ_BIAS 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #define SND_US16X08_COMP_THRESHOLD_BIAS 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #define SND_US16X08_COMP_ATTACK_BIAS 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define SND_US16X08_COMP_RELEASE_BIAS 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) /* get macro for components of kcontrol private_value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define SND_US16X08_KCBIAS(x) (((x)->private_value >> 24) & 0xff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define SND_US16X08_KCSTEP(x) (((x)->private_value >> 16) & 0xff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define SND_US16X08_KCMIN(x) (((x)->private_value >> 8) & 0xff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #define SND_US16X08_KCMAX(x) (((x)->private_value >> 0) & 0xff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) /* set macro for kcontrol private_value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #define SND_US16X08_KCSET(bias, step, min, max)  \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	(((bias) << 24) | ((step) << 16) | ((min) << 8) | (max))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) /* the URB request/type to control Tascam mixers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #define SND_US16X08_URB_REQUEST 0x1D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define SND_US16X08_URB_REQUESTTYPE 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) /* the URB params to retrieve meter ranges */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #define SND_US16X08_URB_METER_REQUEST       0x1e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) #define SND_US16X08_URB_METER_REQUESTTYPE   0xc0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define MUA0(x, y) ((x)[(y) * 10 + 4])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #define MUA1(x, y) ((x)[(y) * 10 + 5])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define MUA2(x, y) ((x)[(y) * 10 + 6])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define MUB0(x, y) ((x)[(y) * 10 + 7])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define MUB1(x, y) ((x)[(y) * 10 + 8])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define MUB2(x, y) ((x)[(y) * 10 + 9])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define MUC0(x, y) ((x)[(y) * 10 + 10])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define MUC1(x, y) ((x)[(y) * 10 + 11])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #define MUC2(x, y) ((x)[(y) * 10 + 12])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define MUC3(x, y) ((x)[(y) * 10 + 13])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) /* Common Channel control IDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define SND_US16X08_ID_BYPASS 0x45
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define SND_US16X08_ID_BUSS_OUT 0x44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define SND_US16X08_ID_PHASE 0x85
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define SND_US16X08_ID_MUTE 0x83
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define SND_US16X08_ID_FADER 0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define SND_US16X08_ID_PAN 0x82
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define SND_US16X08_ID_METER 0xB1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define SND_US16X08_ID_EQ_BAND_COUNT 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #define SND_US16X08_ID_EQ_PARAM_COUNT 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) /* EQ level IDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #define SND_US16X08_ID_EQLOWLEVEL 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #define SND_US16X08_ID_EQLOWMIDLEVEL 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define SND_US16X08_ID_EQHIGHMIDLEVEL 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) #define SND_US16X08_ID_EQHIGHLEVEL 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) /* EQ frequence IDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #define SND_US16X08_ID_EQLOWFREQ 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #define SND_US16X08_ID_EQLOWMIDFREQ 0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #define SND_US16X08_ID_EQHIGHMIDFREQ 0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) #define SND_US16X08_ID_EQHIGHFREQ 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) /* EQ width IDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) #define SND_US16X08_ID_EQLOWMIDWIDTH 0x22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) #define SND_US16X08_ID_EQHIGHMIDWIDTH 0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) #define SND_US16X08_ID_EQENABLE 0x30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #define EQ_STORE_BAND_IDX(x) ((x) & 0xf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define EQ_STORE_PARAM_IDX(x) (((x) & 0xf0) >> 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) #define SND_US16X08_ID_ROUTE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) /* Compressor Ids */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) #define SND_US16X08_ID_COMP_BASE	0x32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) #define SND_US16X08_ID_COMP_THRESHOLD	SND_US16X08_ID_COMP_BASE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) #define SND_US16X08_ID_COMP_RATIO	(SND_US16X08_ID_COMP_BASE + 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define SND_US16X08_ID_COMP_ATTACK	(SND_US16X08_ID_COMP_BASE + 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) #define SND_US16X08_ID_COMP_RELEASE	(SND_US16X08_ID_COMP_BASE + 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) #define SND_US16X08_ID_COMP_GAIN	(SND_US16X08_ID_COMP_BASE + 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #define SND_US16X08_ID_COMP_SWITCH	(SND_US16X08_ID_COMP_BASE + 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define SND_US16X08_ID_COMP_COUNT	6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) #define COMP_STORE_IDX(x) ((x) - SND_US16X08_ID_COMP_BASE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) struct snd_us16x08_eq_store {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	u8 val[SND_US16X08_ID_EQ_BAND_COUNT][SND_US16X08_ID_EQ_PARAM_COUNT]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 		[SND_US16X08_MAX_CHANNELS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) struct snd_us16x08_comp_store {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	u8 val[SND_US16X08_ID_COMP_COUNT][SND_US16X08_MAX_CHANNELS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) struct snd_us16x08_meter_store {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	int meter_level[SND_US16X08_MAX_CHANNELS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	int master_level[2]; /* level of meter for master output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	int comp_index; /* round trip channel selector */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	int comp_active_index; /* channel select from user space mixer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	int comp_level[16]; /* compressor reduction level */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	struct snd_us16x08_comp_store *comp_store;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) struct snd_us16x08_control_params {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	const struct snd_kcontrol_new *kcontrol_new;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	int control_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	int type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	int num_channels;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	int default_val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define snd_us16x08_switch_info snd_ctl_boolean_mono_info
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) int snd_us16x08_controls_create(struct usb_mixer_interface *mixer);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #endif /* __USB_MIXER_US16X08_H */