linux/sound/usb/mixer_maps.c

// SPDX-License-Identifier: GPL-2.0-or-later
/*
 *   Additional mixer mapping
 *
 *   Copyright (c) 2002 by Takashi Iwai <[email protected]>
 */

struct usbmix_dB_map {};

struct usbmix_name_map {};

struct usbmix_selector_map {};

struct usbmix_ctl_map {};

/*
 * USB control mappers for SB Exitigy
 */

/*
 * Topology of SB Extigy (see on the wide screen :)

USB_IN[1] --->FU[2]------------------------------+->MU[16]-->PU[17]-+->FU[18]--+->EU[27]--+->EU[21]-->FU[22]--+->FU[23] > Dig_OUT[24]
                                                 ^                  |          |          |                   |
USB_IN[3] -+->SU[5]-->FU[6]--+->MU[14] ->PU[15]->+                  |          |          |                   +->FU[25] > Dig_OUT[26]
           ^                 ^                   |                  |          |          |
Dig_IN[4] -+                 |                   |                  |          |          +->FU[28]---------------------> Spk_OUT[19]
                             |                   |                  |          |
Lin-IN[7] -+-->FU[8]---------+                   |                  |          +----------------------------------------> Hph_OUT[20]
           |                                     |                  |
Mic-IN[9] --+->FU[10]----------------------------+                  |
           ||                                                       |
           ||  +----------------------------------------------------+
           VV  V
           ++--+->SU[11]-->FU[12] --------------------------------------------------------------------------------------> USB_OUT[13]
*/

static const struct usbmix_name_map extigy_map[] =;

/* Sound Blaster MP3+ controls mapping
 * The default mixer channels have totally misleading names,
 * e.g. no Master and fake PCM volume
 *			Pavel Mihaylov <[email protected]>
 */
static const struct usbmix_dB_map mp3plus_dB_1 =;
						/* just guess */
static const struct usbmix_dB_map mp3plus_dB_2 =;
						/* just guess */

static const struct usbmix_name_map mp3plus_map[] =;

/* Topology of SB Audigy 2 NX

          +----------------------------->EU[27]--+
          |                                      v
          | +----------------------------------->SU[29]---->FU[22]-->Dig_OUT[24]
          | |                                    ^
USB_IN[1]-+------------+              +->EU[17]->+->FU[11]-+
            |          v              |          v         |
Dig_IN[4]---+->FU[6]-->MU[16]->FU[18]-+->EU[21]->SU[31]----->FU[30]->Hph_OUT[20]
            |          ^              |                    |
Lin_IN[7]-+--->FU[8]---+              +->EU[23]->FU[28]------------->Spk_OUT[19]
          | |                                              v
          +--->FU[12]------------------------------------->SU[14]--->USB_OUT[15]
            |                                              ^
            +->FU[13]--------------------------------------+
*/
static const struct usbmix_name_map audigy2nx_map[] =;

static const struct usbmix_name_map mbox1_map[] =;

static const struct usbmix_selector_map c400_selectors[] =;

static const struct usbmix_selector_map audigy2nx_selectors[] =;

/* Creative SoundBlaster Live! 24-bit External */
static const struct usbmix_name_map live24ext_map[] =;

/* LineX FM Transmitter entry - needed to bypass controls bug */
static const struct usbmix_name_map linex_map[] =;

static const struct usbmix_name_map maya44_map[] =;

/* Section "justlink_map" below added by James Courtier-Dutton <[email protected]>
 * sourced from Maplin Electronics (https://www.maplin.co.uk), part number A56AK
 * Part has 2 connectors that act as a single output. (TOSLINK Optical for digital out, and 3.5mm Jack for Analogue out.)
 * The USB Mixer publishes a Microphone and extra Volume controls for it, but none exist on the device,
 * so this map removes all unwanted sliders from alsamixer
 */

static const struct usbmix_name_map justlink_map[] =;

/* TerraTec Aureon 5.1 MkII USB */
static const struct usbmix_name_map aureon_51_2_map[] =;

static const struct usbmix_name_map scratch_live_map[] =;

static const struct usbmix_name_map ebox44_map[] =;

/* "Gamesurround Muse Pocket LT" looks same like "Sound Blaster MP3+"
 *  most importand difference is SU[8], it should be set to "Capture Source"
 *  to make alsamixer and PA working properly.
 *  FIXME: or mp3plus_map should use "Capture Source" too,
 *  so this maps can be merget
 */
static const struct usbmix_name_map hercules_usb51_map[] =;

/* Plantronics Gamecom 780 has a broken volume control, better to disable it */
static const struct usbmix_name_map gamecom780_map[] =;

/* some (all?) SCMS USB3318 devices are affected by a firmware lock up
 * when anything attempts to access FU 10 (control)
 */
static const struct usbmix_name_map scms_usb3318_map[] =;

/* Bose companion 5, the dB conversion factor is 16 instead of 256 */
static const struct usbmix_dB_map bose_companion5_dB =;
static const struct usbmix_name_map bose_companion5_map[] =;

/* Bose Revolve+ SoundLink, correction of dB maps */
static const struct usbmix_dB_map bose_soundlink_dB =;
static const struct usbmix_name_map bose_soundlink_map[] =;

/* Sennheiser Communications Headset [PC 8], the dB value is reported as -6 negative maximum  */
static const struct usbmix_dB_map sennheiser_pc8_dB =;
static const struct usbmix_name_map sennheiser_pc8_map[] =;

/*
 * Dell usb dock with ALC4020 codec had a firmware problem where it got
 * screwed up when zero volume is passed; just skip it as a workaround
 *
 * Also the extension unit gives an access error, so skip it as well.
 */
static const struct usbmix_name_map dell_alc4020_map[] =;

/*
 * Corsair Virtuoso calls everything "Headset" without this, leading to
 * applications moving the sidetone control instead of the main one.
 */
static const struct usbmix_name_map corsair_virtuoso_map[] =;

/* Microsoft USB Link headset */
/* a guess work: raw playback volume values are from 2 to 129 */
static const struct usbmix_dB_map ms_usb_link_dB =;
static const struct usbmix_name_map ms_usb_link_map[] =;

/* ASUS ROG Zenith II with Realtek ALC1220-VB */
static const struct usbmix_name_map asus_zenith_ii_map[] =;

static const struct usbmix_connector_map asus_zenith_ii_connector_map[] =;

static const struct usbmix_name_map lenovo_p620_rear_map[] =;

/* TRX40 mobos with Realtek ALC1220-VB */
static const struct usbmix_name_map trx40_mobo_map[] =;

static const struct usbmix_connector_map trx40_mobo_connector_map[] =;

/* Rear panel + front mic on Gigabyte TRX40 Aorus Master with ALC1220-VB */
static const struct usbmix_name_map aorus_master_alc1220vb_map[] =;

/* MSI MPG X570S Carbon Max Wifi with ALC4080  */
static const struct usbmix_name_map msi_mpg_x570s_carbon_max_wifi_alc4080_map[] =;

/* Gigabyte B450/550 Mobo */
static const struct usbmix_name_map gigabyte_b450_map[] =;

static const struct usbmix_connector_map gigabyte_b450_connector_map[] =;

/*
 * Control map entries
 */

static const struct usbmix_ctl_map usbmix_ctl_maps[] =;

/*
 * Control map entries for UAC3 BADD profiles
 */

static const struct usbmix_name_map uac3_badd_generic_io_map[] =;
static const struct usbmix_name_map uac3_badd_headphone_map[] =;
static const struct usbmix_name_map uac3_badd_speaker_map[] =;
static const struct usbmix_name_map uac3_badd_microphone_map[] =;
/* Covers also 'headset adapter' profile */
static const struct usbmix_name_map uac3_badd_headset_map[] =;
static const struct usbmix_name_map uac3_badd_speakerphone_map[] =;

static const struct usbmix_ctl_map uac3_badd_usbmix_ctl_maps[] =;