84 lines
1.7 KiB
Bash
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
|