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-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *   Additional mixer mapping
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  *   Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) struct usbmix_dB_map {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 	u32 min;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 	u32 max;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) struct usbmix_name_map {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 	int id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 	const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	int control;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	const struct usbmix_dB_map *dB;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) struct usbmix_selector_map {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	int id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	int count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	const char **names;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) struct usbmix_ctl_map {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	u32 id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	const struct usbmix_name_map *map;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	const struct usbmix_selector_map *selector_map;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	const struct usbmix_connector_map *connector_map;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	int ignore_ctl_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  * USB control mappers for SB Exitigy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39)  * Topology of SB Extigy (see on the wide screen :)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) USB_IN[1] --->FU[2]------------------------------+->MU[16]-->PU[17]-+->FU[18]--+->EU[27]--+->EU[21]-->FU[22]--+->FU[23] > Dig_OUT[24]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42)                                                  ^                  |          |          |                   |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) USB_IN[3] -+->SU[5]-->FU[6]--+->MU[14] ->PU[15]->+                  |          |          |                   +->FU[25] > Dig_OUT[26]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44)            ^                 ^                   |                  |          |          |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) Dig_IN[4] -+                 |                   |                  |          |          +->FU[28]---------------------> Spk_OUT[19]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)                              |                   |                  |          |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) Lin-IN[7] -+-->FU[8]---------+                   |                  |          +----------------------------------------> Hph_OUT[20]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48)            |                                     |                  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) Mic-IN[9] --+->FU[10]----------------------------+                  |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50)            ||                                                       |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51)            ||  +----------------------------------------------------+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52)            VV  V
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53)            ++--+->SU[11]-->FU[12] --------------------------------------------------------------------------------------> USB_OUT[13]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) static const struct usbmix_name_map extigy_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	/* 1: IT pcm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	{ 2, "PCM Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	/* 3: IT pcm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	/* 4: IT digital in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	{ 5, NULL }, /* DISABLED: this seems to be bogus on some firmware */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	{ 6, "Digital In" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	/* 7: IT line */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	{ 8, "Line Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	/* 9: IT mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	{ 10, "Mic Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	{ 11, "Capture Source" }, /* SU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	{ 12, "Capture" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	/* 13: OT pcm capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	/* 14: MU (w/o controls) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	/* 15: PU (3D enh) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	/* 16: MU (w/o controls) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	{ 17, NULL, 1 }, /* DISABLED: PU-switch (any effect?) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	{ 17, "Channel Routing", 2 },	/* PU: mode select */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	{ 18, "Tone Control - Bass", UAC_FU_BASS }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	{ 18, "Tone Control - Treble", UAC_FU_TREBLE }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	{ 18, "Master Playback" }, /* FU; others */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	/* 19: OT speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	/* 20: OT headphone */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	{ 21, NULL }, /* DISABLED: EU (for what?) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	{ 22, "Digital Out Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	{ 23, "Digital Out1 Playback" }, /* FU */  /* FIXME: corresponds to 24 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	/* 24: OT digital out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	{ 25, "IEC958 Optical Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	{ 26, "IEC958 Optical Playback" }, /* OT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	{ 27, NULL }, /* DISABLED: EU (for what?) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	/* 28: FU speaker (mute) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	{ 29, NULL }, /* Digital Input Playback Source? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) /* Sound Blaster MP3+ controls mapping
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93)  * The default mixer channels have totally misleading names,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)  * e.g. no Master and fake PCM volume
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)  *			Pavel Mihaylov <bin@bash.info>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) static const struct usbmix_dB_map mp3plus_dB_1 = {.min = -4781, .max = 0};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 						/* just guess */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) static const struct usbmix_dB_map mp3plus_dB_2 = {.min = -1781, .max = 618};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 						/* just guess */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) static const struct usbmix_name_map mp3plus_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	/* 1: IT pcm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	/* 2: IT mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	/* 3: IT line */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	/* 4: IT digital in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	/* 5: OT digital out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	/* 6: OT speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	/* 7: OT pcm capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	{ 8, "Capture Source" }, /* FU, default PCM Capture Source */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 		/* (Mic, Input 1 = Line input, Input 2 = Optical input) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	{ 9, "Master Playback" }, /* FU, default Speaker 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	/* { 10, "Mic Capture", 1 }, */ /* FU, Mic Capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	{ 10, /* "Mic Capture", */ NULL, 2, .dB = &mp3plus_dB_2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 		/* FU, Mic Capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	{ 10, "Mic Boost", 7 }, /* FU, default Auto Gain Input */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	{ 11, "Line Capture", .dB = &mp3plus_dB_2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 		/* FU, default PCM Capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	{ 12, "Digital In Playback" }, /* FU, default PCM 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	{ 13, /* "Mic Playback", */ .dB = &mp3plus_dB_1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 		/* FU, default Mic Playback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	{ 14, "Line Playback", .dB = &mp3plus_dB_1 }, /* FU, default Speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	/* 15: MU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) /* Topology of SB Audigy 2 NX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)           +----------------------------->EU[27]--+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)           |                                      v
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)           | +----------------------------------->SU[29]---->FU[22]-->Dig_OUT[24]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)           | |                                    ^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) USB_IN[1]-+------------+              +->EU[17]->+->FU[11]-+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)             |          v              |          v         |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) Dig_IN[4]---+->FU[6]-->MU[16]->FU[18]-+->EU[21]->SU[31]----->FU[30]->Hph_OUT[20]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)             |          ^              |                    |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) Lin_IN[7]-+--->FU[8]---+              +->EU[23]->FU[28]------------->Spk_OUT[19]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)           | |                                              v
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)           +--->FU[12]------------------------------------->SU[14]--->USB_OUT[15]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)             |                                              ^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)             +->FU[13]--------------------------------------+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) static const struct usbmix_name_map audigy2nx_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	/* 1: IT pcm playback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	/* 4: IT digital in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	{ 6, "Digital In Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	/* 7: IT line in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	{ 8, "Line Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	{ 11, "What-U-Hear Capture" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	{ 12, "Line Capture" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	{ 13, "Digital In Capture" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	{ 14, "Capture Source" }, /* SU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	/* 15: OT pcm capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	/* 16: MU w/o controls */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	{ 17, NULL }, /* DISABLED: EU (for what?) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	{ 18, "Master Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	/* 19: OT speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	/* 20: OT headphone */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	{ 21, NULL }, /* DISABLED: EU (for what?) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	{ 22, "Digital Out Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	{ 23, NULL }, /* DISABLED: EU (for what?) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	/* 24: OT digital out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	{ 27, NULL }, /* DISABLED: EU (for what?) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	{ 28, "Speaker Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	{ 29, "Digital Out Source" }, /* SU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	{ 30, "Headphone Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	{ 31, "Headphone Source" }, /* SU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) static const struct usbmix_name_map mbox1_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	{ 1, "Clock" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) static const struct usbmix_selector_map c400_selectors[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 		.id = 0x80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 		.count = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 		.names = (const char*[]) {"Internal", "SPDIF"}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) static const struct usbmix_selector_map audigy2nx_selectors[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 		.id = 14, /* Capture Source */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 		.count = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 		.names = (const char*[]) {"Line", "Digital In", "What-U-Hear"}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 		.id = 29, /* Digital Out Source */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 		.count = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 		.names = (const char*[]) {"Front", "PCM", "Digital In"}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 		.id = 31, /* Headphone Source */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 		.count = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 		.names = (const char*[]) {"Front", "Side"}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) /* Creative SoundBlaster Live! 24-bit External */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) static const struct usbmix_name_map live24ext_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	/* 2: PCM Playback Volume */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	{ 5, "Mic Capture" }, /* FU, default PCM Capture Volume */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) /* LineX FM Transmitter entry - needed to bypass controls bug */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) static const struct usbmix_name_map linex_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	/* 1: IT pcm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	/* 2: OT Speaker */ 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	{ 3, "Master" }, /* FU: master volume - left / right / mute */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) static const struct usbmix_name_map maya44_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	/* 1: IT line */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	{ 2, "Line Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	/* 3: IT line */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	{ 4, "Line Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	/* 5: IT pcm playback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	/* 6: MU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	{ 7, "Master Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	/* 8: OT speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	/* 9: IT line */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	{ 10, "Line Capture" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	/* 11: MU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	/* 12: OT pcm capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) /* Section "justlink_map" below added by James Courtier-Dutton <James@superbug.demon.co.uk>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)  * sourced from Maplin Electronics (https://www.maplin.co.uk), part number A56AK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)  * Part has 2 connectors that act as a single output. (TOSLINK Optical for digital out, and 3.5mm Jack for Analogue out.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)  * The USB Mixer publishes a Microphone and extra Volume controls for it, but none exist on the device,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)  * so this map removes all unwanted sliders from alsamixer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) static const struct usbmix_name_map justlink_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	/* 1: IT pcm playback */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 	/* 2: Not present */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	{ 3, NULL}, /* IT mic (No mic input on device) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	/* 4: Not present */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	/* 5: OT speacker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	/* 6: OT pcm capture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 	{ 7, "Master Playback" }, /* Mute/volume for speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	{ 8, NULL }, /* Capture Switch (No capture inputs on device) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	{ 9, NULL }, /* Capture Mute/volume (No capture inputs on device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	/* 0xa: Not present */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	/* 0xb: MU (w/o controls) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	{ 0xc, NULL }, /* Mic feedback Mute/volume (No capture inputs on device) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) /* TerraTec Aureon 5.1 MkII USB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) static const struct usbmix_name_map aureon_51_2_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	/* 1: IT USB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	/* 2: IT Mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	/* 3: IT Line */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	/* 4: IT SPDIF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	/* 5: OT SPDIF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	/* 6: OT Speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	/* 7: OT USB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	{ 8, "Capture Source" }, /* SU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	{ 9, "Master Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	{ 10, "Mic Capture" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	{ 11, "Line Capture" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	{ 12, "IEC958 In Capture" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	{ 13, "Mic Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	{ 14, "Line Playback" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	/* 15: MU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	{} /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) static const struct usbmix_name_map scratch_live_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	/* 1: IT Line 1 (USB streaming) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	/* 2: OT Line 1 (Speaker) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	/* 3: IT Line 1 (Line connector) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	{ 4, "Line 1 In" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	/* 5: OT Line 1 (USB streaming) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	/* 6: IT Line 2 (USB streaming) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	/* 7: OT Line 2 (Speaker) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	/* 8: IT Line 2 (Line connector) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	{ 9, "Line 2 In" }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	/* 10: OT Line 2 (USB streaming) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	/* 11: IT Mic (Line connector) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	/* 12: OT Mic (USB streaming) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) static const struct usbmix_name_map ebox44_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	{ 4, NULL }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	{ 6, NULL }, /* MU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	{ 7, NULL }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	{ 10, NULL }, /* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	{ 11, NULL }, /* MU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	{ 0 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) /* "Gamesurround Muse Pocket LT" looks same like "Sound Blaster MP3+"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)  *  most importand difference is SU[8], it should be set to "Capture Source"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305)  *  to make alsamixer and PA working properly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)  *  FIXME: or mp3plus_map should use "Capture Source" too,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307)  *  so this maps can be merget
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) static const struct usbmix_name_map hercules_usb51_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	{ 8, "Capture Source" },	/* SU, default "PCM Capture Source" */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	{ 9, "Master Playback" },	/* FU, default "Speaker Playback" */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 	{ 10, "Mic Boost", 7 },		/* FU, default "Auto Gain Input" */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	{ 11, "Line Capture" },		/* FU, default "PCM Capture" */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	{ 13, "Mic Bypass Playback" },	/* FU, default "Mic Playback" */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	{ 14, "Line Bypass Playback" },	/* FU, default "Line Playback" */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	{ 0 }				/* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) /* Plantronics Gamecom 780 has a broken volume control, better to disable it */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) static const struct usbmix_name_map gamecom780_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	{ 9, NULL }, /* FU, speaker out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) /* some (all?) SCMS USB3318 devices are affected by a firmware lock up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326)  * when anything attempts to access FU 10 (control)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) static const struct usbmix_name_map scms_usb3318_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	{ 10, NULL },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	{ 0 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) /* Bose companion 5, the dB conversion factor is 16 instead of 256 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) static const struct usbmix_dB_map bose_companion5_dB = {-5006, -6};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) static const struct usbmix_name_map bose_companion5_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	{ 3, NULL, .dB = &bose_companion5_dB },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	{ 0 }	/* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) /* Sennheiser Communications Headset [PC 8], the dB value is reported as -6 negative maximum  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) static const struct usbmix_dB_map sennheiser_pc8_dB = {-9500, 0};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) static const struct usbmix_name_map sennheiser_pc8_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	{ 9, NULL, .dB = &sennheiser_pc8_dB },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	{ 0 }   /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348)  * Dell usb dock with ALC4020 codec had a firmware problem where it got
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349)  * screwed up when zero volume is passed; just skip it as a workaround
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351)  * Also the extension unit gives an access error, so skip it as well.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) static const struct usbmix_name_map dell_alc4020_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 	{ 4, NULL },	/* extension unit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	{ 16, NULL },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	{ 19, NULL },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	{ 0 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361)  * Corsair Virtuoso calls everything "Headset" without this, leading to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362)  * applications moving the sidetone control instead of the main one.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) static const struct usbmix_name_map corsair_virtuoso_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 	{ 3, "Mic Capture" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	{ 6, "Sidetone Playback" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 	{ 0 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) /* Some mobos shipped with a dummy HD-audio show the invalid GET_MIN/GET_MAX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371)  * response for Input Gain Pad (id=19, control=12) and the connector status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)  * for SPDIF terminal (id=18).  Skip them.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) static const struct usbmix_name_map asus_rog_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	{ 18, NULL }, /* OT, connector control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	{ 19, NULL, 12 }, /* FU, Input Gain Pad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) static const struct usbmix_name_map lenovo_p620_rear_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 	{ 19, NULL, 12 }, /* FU, Input Gain Pad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) /* TRX40 mobos with Realtek ALC1220-VB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) static const struct usbmix_name_map trx40_mobo_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 	{ 18, NULL }, /* OT, IEC958 - broken response, disabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 	{ 19, NULL, 12 }, /* FU, Input Gain Pad - broken response, disabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 	{ 16, "Speaker" },		/* OT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 	{ 22, "Speaker Playback" },	/* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 	{ 7, "Line" },			/* IT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	{ 19, "Line Capture" },		/* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 	{ 17, "Front Headphone" },	/* OT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 	{ 23, "Front Headphone Playback" },	/* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 	{ 8, "Mic" },			/* IT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 	{ 20, "Mic Capture" },		/* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	{ 9, "Front Mic" },		/* IT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	{ 21, "Front Mic Capture" },	/* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	{ 24, "IEC958 Playback" },	/* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) static const struct usbmix_connector_map trx40_mobo_connector_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	{ 10, 16 },	/* (Back) Speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 	{ 11, 17 },	/* Front Headphone */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 	{ 13, 7 },	/* Line */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 	{ 14, 8 },	/* Mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 	{ 15, 9 },	/* Front Mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) /* Rear panel + front mic on Gigabyte TRX40 Aorus Master with ALC1220-VB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) static const struct usbmix_name_map aorus_master_alc1220vb_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 	{ 17, NULL },			/* OT, IEC958?, disabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 	{ 19, NULL, 12 }, /* FU, Input Gain Pad - broken response, disabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 	{ 16, "Line Out" },		/* OT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 	{ 22, "Line Out Playback" },	/* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	{ 7, "Line" },			/* IT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	{ 19, "Line Capture" },		/* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 	{ 8, "Mic" },			/* IT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 	{ 20, "Mic Capture" },		/* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 	{ 9, "Front Mic" },		/* IT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 	{ 21, "Front Mic Capture" },	/* FU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428)  * Control map entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) static const struct usbmix_ctl_map usbmix_ctl_maps[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 		.id = USB_ID(0x041e, 0x3000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 		.map = extigy_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) 		.ignore_ctl_error = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 		.id = USB_ID(0x041e, 0x3010),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 		.map = mp3plus_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 		.id = USB_ID(0x041e, 0x3020),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 		.map = audigy2nx_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 		.selector_map = audigy2nx_selectors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446)  	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 		.id = USB_ID(0x041e, 0x3040),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) 		.map = live24ext_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) 		.id = USB_ID(0x041e, 0x3048),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) 		.map = audigy2nx_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) 		.selector_map = audigy2nx_selectors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) 	{	/* Logitech, Inc. QuickCam Pro for Notebooks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) 		.id = USB_ID(0x046d, 0x0991),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) 		.ignore_ctl_error = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) 	{	/* Logitech, Inc. QuickCam E 3500 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 		.id = USB_ID(0x046d, 0x09a4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) 		.ignore_ctl_error = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 	{	/* Plantronics GameCom 780 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 		.id = USB_ID(0x047f, 0xc010),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 		.map = gamecom780_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) 		/* Hercules DJ Console (Windows Edition) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 		.id = USB_ID(0x06f8, 0xb000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) 		.ignore_ctl_error = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) 		/* Hercules DJ Console (Macintosh Edition) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 		.id = USB_ID(0x06f8, 0xd002),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) 		.ignore_ctl_error = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) 		/* Hercules Gamesurround Muse Pocket LT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 		 * (USB 5.1 Channel Audio Adapter)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) 		.id = USB_ID(0x06f8, 0xc000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) 		.map = hercules_usb51_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 		.id = USB_ID(0x0763, 0x2030),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 		.selector_map = c400_selectors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) 		.id = USB_ID(0x0763, 0x2031),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) 		.selector_map = c400_selectors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) 		.id = USB_ID(0x08bb, 0x2702),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) 		.map = linex_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) 		.ignore_ctl_error = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) 		.id = USB_ID(0x0a92, 0x0091),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) 		.map = maya44_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) 		.id = USB_ID(0x0c45, 0x1158),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) 		.map = justlink_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) 		.id = USB_ID(0x0ccd, 0x0028),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) 		.map = aureon_51_2_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) 		.id = USB_ID(0x0bda, 0x4014),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) 		.map = dell_alc4020_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) 		.id = USB_ID(0x0dba, 0x1000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) 		.map = mbox1_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) 		.id = USB_ID(0x13e5, 0x0001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) 		.map = scratch_live_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) 		.ignore_ctl_error = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) 		.id = USB_ID(0x200c, 0x1018),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) 		.map = ebox44_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) 		/* MAYA44 USB+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) 		.id = USB_ID(0x2573, 0x0008),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) 		.map = maya44_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) 		.id = USB_ID(0x2708, 0x0002), /* Audient iD14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) 		.ignore_ctl_error = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 		/* KEF X300A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) 		.id = USB_ID(0x27ac, 0x1000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) 		.map = scms_usb3318_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) 		/* Arcam rPAC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) 		.id = USB_ID(0x25c4, 0x0003),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 		.map = scms_usb3318_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) 		/* Corsair Virtuoso SE Latest (wired mode) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) 		.id = USB_ID(0x1b1c, 0x0a3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) 		.map = corsair_virtuoso_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) 		/* Corsair Virtuoso SE Latest (wireless mode) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) 		.id = USB_ID(0x1b1c, 0x0a40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 		.map = corsair_virtuoso_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) 		.id = USB_ID(0x30be, 0x0101), /*  Schiit Hel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) 		.ignore_ctl_error = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) 		/* Bose Companion 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) 		.id = USB_ID(0x05a7, 0x1020),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) 		.map = bose_companion5_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) 		/* Corsair Virtuoso SE (wired mode) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) 		.id = USB_ID(0x1b1c, 0x0a3d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) 		.map = corsair_virtuoso_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) 		/* Corsair Virtuoso SE (wireless mode) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) 		.id = USB_ID(0x1b1c, 0x0a3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) 		.map = corsair_virtuoso_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) 		/* Corsair Virtuoso (wired mode) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) 		.id = USB_ID(0x1b1c, 0x0a41),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) 		.map = corsair_virtuoso_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) 		/* Corsair Virtuoso (wireless mode) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) 		.id = USB_ID(0x1b1c, 0x0a42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) 		.map = corsair_virtuoso_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) 	{	/* Gigabyte TRX40 Aorus Master (rear panel + front mic) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) 		.id = USB_ID(0x0414, 0xa001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) 		.map = aorus_master_alc1220vb_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) 	{	/* Gigabyte TRX40 Aorus Pro WiFi */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) 		.id = USB_ID(0x0414, 0xa002),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) 		.map = trx40_mobo_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) 		.connector_map = trx40_mobo_connector_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) 	{	/* ASUS ROG Zenith II */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) 		.id = USB_ID(0x0b05, 0x1916),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) 		.map = asus_rog_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) 	{	/* ASUS ROG Strix */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) 		.id = USB_ID(0x0b05, 0x1917),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) 		.map = trx40_mobo_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) 		.connector_map = trx40_mobo_connector_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) 	{	/* MSI TRX40 Creator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) 		.id = USB_ID(0x0db0, 0x0d64),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) 		.map = trx40_mobo_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) 		.connector_map = trx40_mobo_connector_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) 	{	/* MSI TRX40 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) 		.id = USB_ID(0x0db0, 0x543d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) 		.map = trx40_mobo_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) 		.connector_map = trx40_mobo_connector_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) 	{	/* Asrock TRX40 Creator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) 		.id = USB_ID(0x26ce, 0x0a01),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) 		.map = trx40_mobo_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) 		.connector_map = trx40_mobo_connector_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) 	{	/* Lenovo ThinkStation P620 Rear */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) 		.id = USB_ID(0x17aa, 0x1046),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) 		.map = lenovo_p620_rear_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) 		/* Sennheiser Communications Headset [PC 8] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) 		.id = USB_ID(0x1395, 0x0025),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) 		.map = sennheiser_pc8_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630)  * Control map entries for UAC3 BADD profiles
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) static const struct usbmix_name_map uac3_badd_generic_io_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) 	{ UAC3_BADD_FU_ID2, "Generic Out Playback" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) 	{ UAC3_BADD_FU_ID5, "Generic In Capture" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) 	{ 0 }					/* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) static const struct usbmix_name_map uac3_badd_headphone_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) 	{ UAC3_BADD_FU_ID2, "Headphone Playback" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) 	{ 0 }					/* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) static const struct usbmix_name_map uac3_badd_speaker_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) 	{ UAC3_BADD_FU_ID2, "Speaker Playback" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) 	{ 0 }					/* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) static const struct usbmix_name_map uac3_badd_microphone_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) 	{ UAC3_BADD_FU_ID5, "Mic Capture" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) 	{ 0 }					/* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) /* Covers also 'headset adapter' profile */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) static const struct usbmix_name_map uac3_badd_headset_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) 	{ UAC3_BADD_FU_ID2, "Headset Playback" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) 	{ UAC3_BADD_FU_ID5, "Headset Capture" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) 	{ UAC3_BADD_FU_ID7, "Sidetone Mixing" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) 	{ 0 }					/* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) static const struct usbmix_name_map uac3_badd_speakerphone_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) 	{ UAC3_BADD_FU_ID2, "Speaker Playback" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) 	{ UAC3_BADD_FU_ID5, "Mic Capture" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) 	{ 0 }					/* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) static const struct usbmix_ctl_map uac3_badd_usbmix_ctl_maps[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) 		.id = UAC3_FUNCTION_SUBCLASS_GENERIC_IO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) 		.map = uac3_badd_generic_io_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) 		.id = UAC3_FUNCTION_SUBCLASS_HEADPHONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) 		.map = uac3_badd_headphone_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) 		.id = UAC3_FUNCTION_SUBCLASS_SPEAKER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) 		.map = uac3_badd_speaker_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) 		.id = UAC3_FUNCTION_SUBCLASS_MICROPHONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) 		.map = uac3_badd_microphone_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) 		.id = UAC3_FUNCTION_SUBCLASS_HEADSET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) 		.map = uac3_badd_headset_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) 		.id = UAC3_FUNCTION_SUBCLASS_HEADSET_ADAPTER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) 		.map = uac3_badd_headset_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) 		.id = UAC3_FUNCTION_SUBCLASS_SPEAKERPHONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) 		.map = uac3_badd_speakerphone_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) 	{ 0 } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) };