-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
soundconfig
executable file
·183 lines (149 loc) · 5.52 KB
/
soundconfig
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
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2009-2014 Stephan Raue ([email protected])
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
# setup alsa (especially the mixer config)
mixer() {
parm=${4:-on}
amixer -c "$1" sset "$2" "$3" $parm >/dev/null 2>&1
amixer -c "$1" sset "$2" $parm >/dev/null 2>&1
}
(
. /etc/profile
progress "Setting up sound card"
if [ -f $HOME/.config/sound.conf ]; then
alsactl restore -f $HOME/.config/sound.conf
else
# get card num
card=$(echo $1 | sed 's/[^0-9]*//g')
# set common mixer params
mixer "$card" Master 0db
mixer "$card" Front 100%
mixer "$card" PCM 0db
mixer "$card" Synth 100%
# mute CD, since using digital audio instead
mixer "$card" CD 0% mute
# Only unmute Line and Aux if they are possibly used.
# mixer "$card" Line 100%
# mixer "$card" Aux 100%
# mute mic
mixer "$card" Mic 0% mute
# ESS 1969 chipset has 2 PCM channels
mixer "$card" PCM,1 100%
# Trident/YMFPCI/emu10k1
mixer "$card" Wave 100%
mixer "$card" Music 100%
mixer "$card" AC97 100%
mixer "$card" Surround 90%
mixer "$card" 'Surround Digital' 90%
mixer "$card" 'Wave Surround' 90%
mixer "$card" 'Duplicate Front' 90%
mixer "$card" 'Sigmatel 4-Speaker Stereo' 90%
# CS4237B chipset:
mixer "$card" 'Master Digital' 100%
# DRC
mixer "$card" 'Dynamic Range Compression' 90%
# Envy24 chips with analog outs
mixer "$card" DAC 100%
mixer "$card" DAC,0 100%
mixer "$card" DAC,1 100%
# some notebooks use headphone instead of master
mixer "$card" Headphone 100%
mixer "$card" Speaker 100%
mixer "$card" 'Internal Speaker' 0% mute
mixer "$card" Playback 100%
mixer "$card" Headphone 100%
mixer "$card" Speaker 100%
mixer "$card" Center 100%
mixer "$card" LFE 100%
mixer "$card" Center/LFE 100%
# Intel P4P800-MX (Ubuntu bug #5813)
mixer "$card" 'Master Playback Switch' on
# set digital output mixer params
mixer "$card" 'IEC958' 100% on
mixer "$card" 'IEC958 Output' 100%
mixer "$card" 'IEC958 Coaxial' 100%
mixer "$card" 'IEC958 LiveDrive' 100%
mixer "$card" 'IEC958 Optical Raw' 100%
mixer "$card" 'SPDIF Out' 100%
mixer "$card" 'SPDIF Front' 100%
mixer "$card" 'SPDIF Rear' 100%
mixer "$card" 'SPDIF Center/LFE' 100%
mixer "$card" 'Master Digital' 100%
mixer "$card" 'Analog Front' 100%
mixer "$card" 'Analog Rear' 100%
mixer "$card" 'Analog Center/LFE' 100%
# ASRock ION 330 (and perhaps others) has 2 IEC958 channels
mixer "$card" IEC958,0 on
mixer "$card" IEC958,1 on
# some ION2 has much more IEC958 channels ...
mixer "$card" IEC958,2 on
mixer "$card" IEC958,3 on
# ASRock ION 330 has Master Front set to 0
mixer "$card" 'Master Front' 100%
# Shuttle XS35GT needs this too
mixer "$card" 'Master',0 100% on
# and this for various Fusion devices like Zotac ZBOX
mixer "$card" 'Front',0 100% on
# NVidia CK804 sound devices
mixer "$card" 'IEC958 Playback AC97-SPSA' 100%
# Allwinner H3 Analog
mixer "$card" 'Line Out' 0db on
# Allwinner A20 Analog
mixer "$card" 'Power Amplifier' 0db
mixer "$card" 'Power Amplifier DAC' on
mixer "$card" 'Power Amplifier Mute' on
# Allwinner A64 Analog
mixer "$card" Headphone 0db on
mixer "$card" 'AIF1 Slot 0 Digital DAC' on
# Amlogic audio devices
case $(dtsoc) in
amlogic,g12* | amlogic,sm1)
# AXG HDMI // Logic assumes TDMOUT_A is not present in device-tree when TDMOUT_B is used
TDMOUT=$(awk '/TDMOUT/ && $2=="OUT" {print substr($1,length($1),1)}' /sys/firmware/devicetree/base/sound/audio-routing | sort | head -n 1)
if [ "${TDMOUT}" = "A" ]; then
mixer "$card" 'FRDDR_A SINK 1 SEL' 'OUT 0'
mixer "$card" 'FRDDR_A SRC 1 EN' on
mixer "$card" 'TDMOUT_A SRC SEL' 'IN 0'
mixer "$card" 'TOHDMITX' on
mixer "$card" 'TOHDMITX I2S SRC' 'I2S A'
elif [ "${TDMOUT}" = "B" ]; then
mixer "$card" 'FRDDR_A SINK 1 SEL' 'OUT 1'
mixer "$card" 'FRDDR_A SRC 1 EN' on
mixer "$card" 'TDMOUT_B SRC SEL' 'IN 0'
mixer "$card" 'TOHDMITX' on
mixer "$card" 'TOHDMITX I2S SRC' 'I2S B'
fi
# AXG S/PDIF
SPDIFOUT=$(awk '/SPDIF/' /sys/firmware/devicetree/base/sound/audio-routing | sort | head -n 1)
if [ -n "${SPDIFOUT}" ]; then
mixer "$card" 'FRDDR_B SINK 1 SEL' 'OUT 3'
mixer "$card" 'FRDDR_B SRC 1 EN' on
mixer "$card" 'SPDIFOUT SRC SEL' 'IN 1'
mixer "$card" 'SPDIFOUT Playback' on
fi
# AXG Headphone Jack
ACODEC=$(awk '/ACODEC/' /sys/firmware/devicetree/base/sound/audio-routing | sort | head -n 1)
if [ -n "${ACODEC}" ]; then
mixer "$card" 'TOACODEC OUT EN' on
mixer "$card" 'TOACODEC SRC' 'I2S ${TDMOUT}'
mixer "$card" 'ACODEC Playback Switch' on
mixer "$card" 'ACODEC Playback Channel Mode' Stereo
fi
;;
amlogic,meson-gx*)
# AIU HDMI and S/PDIF
mixer "$card" 'AIU HDMI CTRL SRC' 'I2S'
mixer "$card" 'AIU SPDIF SRC SEL' 'SPDIF'
# AIU ACODEC headphone jack
mixer "$card" 'ACODEC' 80% on
mixer "$card" 'AIU ACODEC SRC' 'I2S'
mixer "$card" 'AIU ACODEC OUT EN' on
;;
esac
# ES8316 headphone jack
mixer "$card" 'Right Headphone Mixer Right DAC' on
mixer "$card" 'Left Headphone Mixer Left DAC' on
fi
exit 0
) &