toes-image-builder/audio/init-audio
2026-05-13 20:23:09 +00:00

84 lines
1.7 KiB
Bash

#!/bin/bash
set -euo pipefail
CARD_ID="toesaudio"
CARD_NAME="toesaudio"
I2C_BUS="${I2C_BUS:-1}"
CODEC_ADDR="${CODEC_ADDR:-0x18}"
MIC_THSEL_LEVEL="${MIC_THSEL_LEVEL:-high}"
DAC=${1:-127}
DRIVER=${2:-0}
ANALOG=${3:-50}
find_card() {
awk -v id="$CARD_ID" -v name="$CARD_NAME" '
index($0, "[" id "]") || index($0, name) { print $1; exit }
' /proc/asound/cards
}
codec_ready() {
i2cget -y -f "$I2C_BUS" "$CODEC_ADDR" 0 >/dev/null 2>&1
}
set_mixer() {
amixer -q -c "$CARD" "$@" >/dev/null 2>&1 || true
}
set_mic_pins() {
if ! command -v pinctrl >/dev/null 2>&1; then
return 0
fi
case "$MIC_THSEL_LEVEL" in
low)
pinctrl set 8 op pn dl >/dev/null 2>&1 || true
;;
*)
pinctrl set 8 op pn dh >/dev/null 2>&1 || true
;;
esac
pinctrl set 13 ip pn >/dev/null 2>&1 || true
}
CARD=""
for _ in $(seq 1 20); do
CARD="$(find_card || true)"
if [ -n "$CARD" ]; then
break
fi
sleep 1
done
if [ -z "$CARD" ]; then
echo "toesaudio card not present; skipping restore."
exit 0
fi
for _ in $(seq 1 20); do
if codec_ready; then
break
fi
sleep 1
done
if ! codec_ready; then
echo "TLV320 codec not responding on i2c-${I2C_BUS} addr ${CODEC_ADDR}; skipping restore."
exit 0
fi
set_mic_pins
set_mixer sset 'DAC Left Input' 'Left Data'
set_mixer sset 'DAC Right Input' 'Right Data'
set_mixer sset 'Output Left From Left DAC' on
set_mixer sset 'Output Right From Right DAC' on
set_mixer sset 'Speaker' on
set_mixer sset 'Speaker Driver' "$DRIVER"
set_mixer sset 'Speaker Driver' on
set_mixer sset 'Speaker Analog' "$ANALOG"
set_mixer sset 'DAC' "${DAC},${DAC}"
set_mixer sset 'HP Left' off
set_mixer sset 'HP Right' off
set_mixer sset 'HP Driver' '0,0'
set_mixer sset 'HP Driver' off