#!/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"