#!/bin/sh
#
# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Collect information about the audio system from top to bottom.

dump_cards() {
    for card in ${@}
    do
        echo '=== amixer -c' $card scontents '==='
        amixer -c $card scontents
        echo '=== amixer -c' $card contents '==='
        amixer -c $card contents
    done
}

echo '=== cras_test_client --dump_server_info ==='
cras_test_client --dump_server_info

echo '=== cras_test_client --dump_audio_thread ==='
cras_test_client --dump_audio_thread

echo '=== aplay -l ==='
aplay -l
echo '=== arecord -l ==='
arecord -l

output_cards=$(aplay -l | egrep ^card | sed 's/card \([0-9]\+\).*/\1/' | sort -u)
dump_cards $output_cards

input_cards=$(arecord -l | egrep ^card | sed 's/card \([0-9]\+\).*/\1/' | sort -u)
dump_cards $input_cards

# HDA codec for codecs on x86.
codecs=$(find /proc/asound -mindepth 2 -maxdepth 2 -path '*card*/codec#*')
for codec in $codecs
do
    echo '=== codec:' $codec '==='
    cat $codec
done

# I2C dump for codecs on arm.
# Find lines like "max98088.7-0010" and extract "7 0x0010" from it.
if [ -e /sys/kernel/debug/asoc/codecs ]; then
    sed_expr='s/^\([^.-]\+\)\.\([0-9]\+\)-\([0-9]\+\)$/\2 0x\3/p'
    sed -n "$sed_expr" /sys/kernel/debug/asoc/codecs |
    while read i2c_addr
    do
        echo '===' i2cdump -f -y $i2c_addr '==='
        i2cdump -f -y $i2c_addr
    done
fi