77 lines
2.4 KiB
Bash
Executable File
77 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# DAC3100 speaker-path helper
|
|
# Usage: ./volume.sh [dac] [driver] [analog]
|
|
# dac: 0-175 (digital volume, 127=0dB)
|
|
# driver: 0-3 (class-D gain: 6/12/18/24 dB)
|
|
# analog: 0-127 (analog volume, 127=0dB)
|
|
|
|
set -euo pipefail
|
|
|
|
CARD_ID="barepiaudio"
|
|
CARD_NAME="barepi-audio"
|
|
DEFAULT_DAC=127
|
|
DEFAULT_DRIVER=0
|
|
DEFAULT_ANALOG=50
|
|
|
|
find_card() {
|
|
awk -v id="$CARD_ID" -v name="$CARD_NAME" '
|
|
index($0, "[" id "]") || index($0, name) { print $1; exit }
|
|
' /proc/asound/cards
|
|
}
|
|
|
|
show_status() {
|
|
echo "Using ALSA card: $CARD ($CARD_NAME)"
|
|
amixer -c "$CARD" sget 'DAC' || true
|
|
amixer -c "$CARD" sget 'DAC Left Input' || true
|
|
amixer -c "$CARD" sget 'DAC Right Input' || true
|
|
amixer -c "$CARD" sget 'Output Left From Left DAC' || true
|
|
amixer -c "$CARD" sget 'Output Right From Right DAC' || true
|
|
amixer -c "$CARD" sget 'Speaker' || true
|
|
amixer -c "$CARD" sget 'Speaker Driver' || true
|
|
amixer -c "$CARD" sget 'Speaker Analog' || true
|
|
}
|
|
|
|
enable_speaker_path() {
|
|
echo "Enabling TLV320 speaker path..."
|
|
amixer -c "$CARD" sset 'DAC Left Input' 'Left Data' >/dev/null || true
|
|
amixer -c "$CARD" sset 'DAC Right Input' 'Right Data' >/dev/null || true
|
|
amixer -c "$CARD" sset 'Output Left From Left DAC' on >/dev/null || true
|
|
amixer -c "$CARD" sset 'Output Right From Right DAC' on >/dev/null || true
|
|
amixer -c "$CARD" sset 'Speaker' on >/dev/null || true
|
|
amixer -c "$CARD" sset 'HP Left' off >/dev/null || true
|
|
amixer -c "$CARD" sset 'HP Right' off >/dev/null || true
|
|
amixer -c "$CARD" sset 'HP Driver' 0 >/dev/null || true
|
|
amixer -c "$CARD" sset 'HP Driver' off >/dev/null || true
|
|
}
|
|
|
|
CARD="$(find_card || true)"
|
|
if [ -z "$CARD" ]; then
|
|
echo "Could not find ALSA card for $CARD_NAME." >&2
|
|
echo "Reboot after setup, then check /proc/asound/cards." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ $# -eq 0 ]; then
|
|
show_status
|
|
exit 0
|
|
fi
|
|
|
|
DAC=${1:-$DEFAULT_DAC}
|
|
DRIVER=${2:-$DEFAULT_DRIVER}
|
|
ANALOG=${3:-$DEFAULT_ANALOG}
|
|
|
|
enable_speaker_path
|
|
|
|
echo "Setting levels..."
|
|
amixer -c "$CARD" sset 'DAC' "$DAC" "$DAC" >/dev/null
|
|
amixer -c "$CARD" sset 'Speaker Driver' "$DRIVER" >/dev/null || true
|
|
amixer -c "$CARD" sset 'Speaker Driver' on >/dev/null || true
|
|
amixer -c "$CARD" sset 'Speaker Analog' "$ANALOG" >/dev/null || true
|
|
|
|
alsactl store "$CARD" >/dev/null 2>&1 || alsactl store >/dev/null 2>&1 || true
|
|
|
|
echo ""
|
|
echo "Using ALSA card: $CARD ($CARD_NAME)"
|
|
echo "Set: dac=$DAC driver=$DRIVER analog=$ANALOG"
|
|
echo "Example: ./volume.sh 127 0 50"
|