1# This file is part of PulseAudio. 2# 3# PulseAudio is free software; you can redistribute it and/or modify 4# it under the terms of the GNU Lesser General Public License as 5# published by the Free Software Foundation; either version 2.1 of the 6# License, or (at your option) any later version. 7# 8# PulseAudio is distributed in the hope that it will be useful, but 9# WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11# General Public License for more details. 12# 13# You should have received a copy of the GNU Lesser General Public License 14# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>. 15 16; Common part of all paths 17 18; So here's generally how mixer paths are used by PA: PA goes through 19; a mixer path file from top to bottom and checks if a mixer element 20; described therein exists. If so it is added to the list of mixer 21; elements PA will control, keeping the order it read them in. If a 22; mixer element described here has set the required= or 23; required-absent= directives a path might not be accepted as valid 24; and is ignored in its entirety (see below). However usually if a 25; element listed here is missing this one element is ignored but not 26; the entire path. 27; 28; When a device shall be muted/unmuted *all* elements listed in a path 29; file with "switch = mute" will be toggled. 30; 31; When a device shall change its volume, PA will got through the list 32; of all elements with "volume = merge" and set the volume on the 33; first element. If that element does not support dB volumes, this is 34; where the story ends. If it does support dB volumes, PA divides the 35; requested volume by the volume that was set on this element, and 36; then go on to the next element with "volume = merge" and then set 37; that there, and so on. That way the first volume element in the 38; path will be the one that does the 'biggest' part of the overall 39; volume adjustment, with the remaining elements usually being set to 40; some value next to 0dB. This logic makes sure we get the full range 41; over all volume sliders and a very high granularity of volumes 42; already in hardware. 43; 44; All switches and enumerations set to "select" are exposed via the 45; "port" functionality of sinks/sources. Basically every possible 46; switch setting and every possible enumeration setting will be 47; combined and made into a "port". So make sure you don't list too 48; many switches/enums for exposing, because the number of ports might 49; rise exponentially. 50; 51; Only one path can be selected at a time. All paths that are valid 52; for an audio device will be exposed as "port" for the sink/source. 53 54 55; [General] 56; type = ... # The device type. It's highly recommended to set a type for every path. 57; # See parse_type() in alsa-mixer.c for supported values. 58; priority = ... # Priority for this path 59; description-key = ... # The path description is looked up from a table in path_verify() in 60; # src/modules/alsa/alsa-mixer.c. By default the path name (i.e. the file name 61; # minus the ".conf" suffix) is used as the lookup key, but if this option is 62; # set, then the given string is used as the key instead. In any case the 63; # "description" option can be used to override the path description. 64; description = ... # Description for this path. Overrides the normal description lookup logic, as 65; # described in the "description-key" documentation above. 66; mute-during-activation = yes | no # If this path supports hardware mute, should the hw mute be used while activating this 67; # path? In some cases this can reduce extra noises during port switching, while in other 68; # cases this can increase such noises. Default: no. 69; eld-device = ... # If this is an HDMI port, set to "auto" so that PulseAudio will try to read 70; # the monitor ELD information from the ALSA mixer. By default the ELD information 71; # is not read, because it's only applicable with HDMI. Earlier the "auto" option 72; # didn't exist, and the hw device index had to be manually configured. For 73; # backwards compatibility, it's still possible to manually configure the device 74; # index using this option. 75; 76; [Properties] # Property list for this path. The list is merged into the port property list. 77; <key> = <value> # Each property is defined on its own line. 78; ... 79; 80; [Option ...:...] # For each option of an enumeration or switch element 81; # that shall be exposed as a sink/source port. Needs to 82; # be named after the Element, followed by a colon, followed 83; # by the option name, resp. on/off if the element is a switch. 84; name = ... # Logical name to use in the path identifier 85; priority = ... # Priority if this is made into a device port 86; required = ignore | enumeration | any # In this element, this option must exist or the path will be invalid. ("any" is an alias for "enumeration".) 87; required-any = ignore | enumeration | any # In this element, either this or another option must exist (or an element) 88; required-absent = ignore | enumeration | any # In this element, this option must not exist or the path will be invalid 89; 90; [Element ...] # For each element that we shall control. The "..." here is the element name, 91; # or name and index separated by a comma. 92; required = ignore | switch | volume | enumeration | any # If set, require this element to be of this kind and available, 93; # otherwise don't consider this path valid for the card 94; required-any = ignore | switch | volume | enumeration | any # If set, at least one of the elements or jacks with required-any in this 95; # path must be present, otherwise this path is invalid for the card 96; required-absent = ignore | switch | volume # If set, require this element to not be of this kind and not 97; # available, otherwise don't consider this path valid for the card 98; 99; switch = ignore | mute | off | on | select # What to do with this switch: ignore it, make it follow mute status, 100; # always set it to off, always to on, or make it selectable as port. 101; # If set to 'select' you need to define an Option section for on 102; # and off 103; volume = ignore | merge | off | zero | <volume step> # What to do with this volume: ignore it, merge it into the device 104; # volume slider, always set it to the lowest value possible, or always 105; # set it to 0 dB (for whatever that means), or always set it to 106; # <volume step> (this only makes sense in path configurations where 107; # the exact hardware and driver are known beforehand). 108; volume-limit = <volume step> # Limit the maximum volume by disabling the volume steps above <volume step>. 109; enumeration = ignore | select # What to do with this enumeration, ignore it or make it selectable 110; # via device ports. If set to 'select' you need to define an Option section 111; # for each of the items you want to expose 112; direction = playback | capture # Is this relevant only for playback or capture? If not set this will implicitly be 113; # set the direction of the PCM device is opened as. Generally this doesn't need to be set 114; # unless you have a broken driver that has playback controls marked for capture or vice 115; # versa 116; direction-try-other = no | yes # If the element does not supported what is requested, try the other direction, too? 117; 118; override-map.1 = ... # Override the channel mask of the mixer control if the control only exposes a single channel 119; override-map.2 = ... # Override the channel masks of the mixer control if the control only exposes two channels 120; # Override maps should list for each element channel which high-level channels it controls via a 121; # channel mask. A channel mask may either be the name of a single channel, or the words "all-left", 122; # "all-right", "all-center", "all-front", "all-rear", and "all" to encode a specific subset of 123; # channels in a mask 124; [Jack ...] # For each jack that we will use for jack detection 125; # The name 'Jack Foo' must match ALSA's 'Foo Jack' control. 126; required = ignore | any # If not set to ignore, make the path invalid if this jack control is not present. 127; required-absent = ignore | any # If not set to ignore, make the path invalid if this jack control is present. 128; required-any = ignore | any # If not set to ignore, make the path invalid if no jack controls and no elements with 129; # the required-any are present. 130; state.plugged = yes | no | unknown # Normally a plugged jack would mean the port becomes available, and an unplugged means it's 131; state.unplugged = yes | no | unknown # unavailable, but the port status can be overridden by specifying state.plugged and/or state.unplugged. 132; append-pcm-to-name = no | yes # Add ",pcm=N" to the jack name? N is the hw PCM device index. HDMI jacks have 133; # the PCM device index in their name, but different drivers use different 134; # numbering schemes, so we can't hardcode the full jack name in our configuration 135; # files. 136 137[Element PCM] 138switch = mute 139volume = merge 140override-map.1 = all 141override-map.2 = all-left,all-right 142 143[Element External Amplifier] 144switch = select 145 146[Option External Amplifier:on] 147name = output-amplifier-on 148priority = 10 149 150[Option External Amplifier:off] 151name = output-amplifier-off 152priority = 0 153 154[Element Bass Boost] 155switch = select 156 157[Option Bass Boost:on] 158name = output-bass-boost-on 159priority = 0 160 161[Option Bass Boost:off] 162name = output-bass-boost-off 163priority = 10 164 165[Element IEC958] 166switch = off 167 168[Element IEC958 Optical Raw] 169switch = off 170 171;;; 'Analog Output' 172 173[Element Analog Output] 174enumeration = select 175 176[Option Analog Output:Speakers] 177name = output-speaker 178priority = 10 179 180[Option Analog Output:Headphones] 181name = output-headphones 182priority = 9 183 184[Option Analog Output:FP Headphones] 185name = output-headphones 186priority = 8 187