summaryrefslogtreecommitdiffstats
path: root/spa/plugins/alsa/mixer/paths/analog-output.conf.common
blob: 028665d226f8b958113a3dd626e85b3dfa80cf8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2.1 of the
# License, or (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

; Common part of all paths

; So here's generally how mixer paths are used by PA: PA goes through
; a mixer path file from top to bottom and checks if a mixer element
; described therein exists. If so it is added to the list of mixer
; elements PA will control, keeping the order it read them in. If a
; mixer element described here has set the required= or
; required-absent= directives a path might not be accepted as valid
; and is ignored in its entirety (see below). However usually if a
; element listed here is missing this one element is ignored but not
; the entire path.
;
; When a device shall be muted/unmuted *all* elements listed in a path
; file with "switch = mute" will be toggled.
;
; When a device shall change its volume, PA will got through the list
; of all elements with "volume = merge" and set the volume on the
; first element. If that element does not support dB volumes, this is
; where the story ends. If it does support dB volumes, PA divides the
; requested volume by the volume that was set on this element, and
; then go on to the next element with "volume = merge" and then set
; that there, and so on.  That way the first volume element in the
; path will be the one that does the 'biggest' part of the overall
; volume adjustment, with the remaining elements usually being set to
; some value next to 0dB. This logic makes sure we get the full range
; over all volume sliders and a very high granularity of volumes
; already in hardware.
;
; All switches and enumerations set to "select" are exposed via the
; "port" functionality of sinks/sources. Basically every possible
; switch setting and every possible enumeration setting will be
; combined and made into a "port". So make sure you don't list too
; many switches/enums for exposing, because the number of ports might
; rise exponentially.
;
; Only one path can be selected at a time. All paths that are valid
; for an audio device will be exposed as "port" for the sink/source.


; [General]
; type = ...                             # The device type. It's highly recommended to set a type for every path.
;                                        # See parse_type() in alsa-mixer.c for supported values.
; priority = ...                         # Priority for this path
; description-key = ...                  # The path description is looked up from a table in path_verify() in
;                                        # src/modules/alsa/alsa-mixer.c. By default the path name (i.e. the file name
;                                        # minus the ".conf" suffix) is used as the lookup key, but if this option is
;                                        # set, then the given string is used as the key instead. In any case the
;                                        # "description" option can be used to override the path description.
; description = ...                      # Description for this path. Overrides the normal description lookup logic, as
;                                        # described in the "description-key" documentation above.
; mute-during-activation = yes | no      # If this path supports hardware mute, should the hw mute be used while activating this
;                                        # path? In some cases this can reduce extra noises during port switching, while in other
;                                        # cases this can increase such noises. Default: no.
; eld-device = ...                       # If this is an HDMI port, set to "auto" so that PulseAudio will try to read
;                                        # the monitor ELD information from the ALSA mixer. By default the ELD information
;                                        # is not read, because it's only applicable with HDMI. Earlier the "auto" option
;                                        # didn't exist, and the hw device index had to be manually configured. For
;                                        # backwards compatibility, it's still possible to manually configure the device
;                                        # index using this option.
;
; [Properties]                           # Property list for this path. The list is merged into the port property list.
; <key> = <value>                        # Each property is defined on its own line.
; ...
;
; [Option ...:...]                       # For each option of an enumeration or switch element
;                                        # that shall be exposed as a sink/source port. Needs to
;                                        # be named after the Element, followed by a colon, followed
;                                        # by the option name, resp. on/off if the element is a switch.
; name = ...                             # Logical name to use in the path identifier
; priority = ...                         # Priority if this is made into a device port
; required = ignore | enumeration | any            # In this element, this option must exist or the path will be invalid. ("any" is an alias for "enumeration".)
; required-any = ignore | enumeration | any        # In this element, either this or another option must exist (or an element)
; required-absent = ignore | enumeration | any     # In this element, this option must not exist or the path will be invalid
;
; [Element ...]                          # For each element that we shall control. The "..." here is the element name,
;                                        # or name and index separated by a comma.
; required = ignore | switch | volume | enumeration | any     # If set, require this element to be of this kind and available,
;                                                             # otherwise don't consider this path valid for the card
; required-any = ignore | switch | volume | enumeration | any # If set, at least one of the elements or jacks with required-any in this
;                                                             # path must be present, otherwise this path is invalid for the card
; required-absent = ignore | switch | volume                  # If set, require this element to not be of this kind and not
;                                                             # available, otherwise don't consider this path valid for the card
;
; switch = ignore | mute | off | on | select # What to do with this switch: ignore it, make it follow mute status,
;                                            # always set it to off, always to on, or make it selectable as port.
;                                            # If set to 'select' you need to define an Option section for on
;                                            # and off
; volume = ignore | merge | off | zero | <volume step> # What to do with this volume: ignore it, merge it into the device
;                                                      # volume slider, always set it to the lowest value possible, or always
;                                                      # set it to 0 dB (for whatever that means), or always set it to
;                                                      # <volume step> (this only makes sense in path configurations where
;                                                      # the exact hardware and driver are known beforehand).
; volume-limit = <volume step>           # Limit the maximum volume by disabling the volume steps above <volume step>.
; enumeration = ignore | select          # What to do with this enumeration, ignore it or make it selectable
;                                        # via device ports. If set to 'select' you need to define an Option section
;                                        # for each of the items you want to expose
; direction = playback | capture         # Is this relevant only for playback or capture? If not set this will implicitly be
;                                        # set the direction of the PCM device is opened as. Generally this doesn't need to be set
;                                        # unless you have a broken driver that has playback controls marked for capture or vice
;                                        # versa
; direction-try-other = no | yes         # If the element does not supported what is requested, try the other direction, too?
;
; override-map.1 = ...                   # Override the channel mask of the mixer control if the control only exposes a single channel
; override-map.2 = ...                   # Override the channel masks of the mixer control if the control only exposes two channels
;                                        # Override maps should list for each element channel which high-level channels it controls via a
;                                        # channel mask. A channel mask may either be the name of a single channel, or the words "all-left",
;                                        # "all-right", "all-center", "all-front", "all-rear", and "all" to encode a specific subset of
;                                        # channels in a mask
; [Jack ...]                           # For each jack that we will use for jack detection
;                                      # The name 'Jack Foo' must match ALSA's 'Foo Jack' control.
; required = ignore | any              # If not set to ignore, make the path invalid if this jack control is not present.
; required-absent = ignore | any       # If not set to ignore, make the path invalid if this jack control is present.
; required-any = ignore | any          # If not set to ignore, make the path invalid if no jack controls and no elements with
;                                      # the required-any are present.
; state.plugged = yes | no | unknown   # Normally a plugged jack would mean the port becomes available, and an unplugged means it's
; state.unplugged = yes | no | unknown # unavailable, but the port status can be overridden by specifying state.plugged and/or state.unplugged.
; append-pcm-to-name = no | yes        # Add ",pcm=N" to the jack name? N is the hw PCM device index. HDMI jacks have
;                                      # the PCM device index in their name, but different drivers use different
;                                      # numbering schemes, so we can't hardcode the full jack name in our configuration
;                                      # files.

[Element PCM]
switch = mute
volume = merge
override-map.1 = all
override-map.2 = all-left,all-right

[Element External Amplifier]
switch = select

[Option External Amplifier:on]
name = output-amplifier-on
priority = 10

[Option External Amplifier:off]
name = output-amplifier-off
priority = 0

[Element Bass Boost]
switch = select

[Option Bass Boost:on]
name = output-bass-boost-on
priority = 0

[Option Bass Boost:off]
name = output-bass-boost-off
priority = 10

[Element IEC958]
switch = off

[Element IEC958 Optical Raw]
switch = off

;;; 'Analog Output'

[Element Analog Output]
enumeration = select

[Option Analog Output:Speakers]
name = output-speaker
priority = 10

[Option Analog Output:Headphones]
name = output-headphones
priority = 9

[Option Analog Output:FP Headphones]
name = output-headphones
priority = 8

;;; 'Output Select'

[Element Output Select]
enumeration = select

[Option Output Select:Speakers]
name = output-speaker
priority = 10

[Option Output Select:Headphone]
name = output-headphones
priority = 9