This document describes standard names of mixer controls.

Syntax: [LOCATION] SOURCE [CHANNEL] [DIRECTION] FUNCTION

DIRECTION:
  <nothing>	(both directions)
  Playback
  Capture
  Bypass Playback
  Bypass Capture

FUNCTION:
  Switch	(on/off switch)
  Volume
  Route		(route control, hardware specific)

CHANNEL:
  <nothing>     (channel independent, or applies to all channels)
  Front
  Surround      (rear left/right in 4.0/5.1 surround)
  CLFE
  Center
  LFE
  Side          (side left/right for 7.1 surround)

LOCATION:       (physical location of source)
  Front
  Rear
  Dock          (docking station)
  Internal

SOURCE:
  Master
  Master Mono
  Hardware Master
  Speaker	(internal speaker)
  Bass Speaker	(internal LFE speaker)
  Headphone
  Line Out
  Beep		(beep generator)
  Phone
  Phone Input
  Phone Output
  Synth
  FM
  Mic
  Headset Mic	(mic part of combined headset jack - 4-pin headphone + mic)
  Headphone Mic	(mic part of either/or - 3-pin headphone or mic)
  Line		(input only, use "Line Out" for output)
  CD
  Video
  Zoom Video
  Aux
  PCM
  PCM Pan
  Loopback
  Analog Loopback	(D/A -> A/D loopback)
  Digital Loopback	(playback -> capture loopback - without analog path)
  Mono
  Mono Output
  Multi
  ADC
  Wave
  Music
  I2S
  IEC958
  HDMI
  SPDIF		(output only)
  SPDIF In
  Digital In
  HDMI/DP	(either HDMI or DisplayPort)

Exceptions (deprecated):
  [Analogue|Digital] Capture Source
  [Analogue|Digital] Capture Switch	(aka input gain switch)
  [Analogue|Digital] Capture Volume	(aka input gain volume)
  [Analogue|Digital] Playback Switch	(aka output gain switch)
  [Analogue|Digital] Playback Volume	(aka output gain volume)
  Tone Control - Switch
  Tone Control - Bass
  Tone Control - Treble
  3D Control - Switch
  3D Control - Center
  3D Control - Depth
  3D Control - Wide
  3D Control - Space
  3D Control - Level
  Mic Boost [(?dB)]

PCM interface:

  Sample Clock Source	{ "Word", "Internal", "AutoSync" }
  Clock Sync Status	{ "Lock", "Sync", "No Lock" }
  External Rate		/* external capture rate */
  Capture Rate		/* capture rate taken from external source */

IEC958 (S/PDIF) interface:

  IEC958 [...] [Playback|Capture] Switch	/* turn on/off the IEC958 interface */
  IEC958 [...] [Playback|Capture] Volume	/* digital volume control */
  IEC958 [...] [Playback|Capture] Default	/* default or global value - read/write */
  IEC958 [...] [Playback|Capture] Mask		/* consumer and professional mask */
  IEC958 [...] [Playback|Capture] Con Mask	/* consumer mask */
  IEC958 [...] [Playback|Capture] Pro Mask	/* professional mask */
  IEC958 [...] [Playback|Capture] PCM Stream	/* the settings assigned to a PCM stream */
  IEC958 Q-subcode [Playback|Capture] Default	/* Q-subcode bits */
  IEC958 Preamble [Playback|Capture] Default	/* burst preamble words (4*16bits) */
