^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) };