Amlogic s922 android 9.0 オーディオが rt5651 から es8316 に置き換えられます、奇妙なバグがあります

資料不足のためコーデックをrt5651からes8316に変更、ブロンズかと思ったらキングだった、結局単純なシンボルで駆動されていたことが判明。この時、以前にも遭遇したようで忘れていたので、ここに記録しておきたいと思います、百度にはアムロジックなものがほとんどありません。

一般的な手順:

1 ドライバを common\sound\soc\codecs\amlogic に入れます

2 common\sound\soc\codecs\amlogic の下にある Makefile Kconfig を変更します。

3 meson64_a32_defconfig が書き込まれました

4 dts はうまく書きます:

次のステップはコンパイルして書き込むことですが、サウンドが見つかりませんでした。

カードを見る:

# cat proc/asound/pcm

すべてがうまくいくように見えますか?

もう一度 tinyplay に来てください tingplay xxx.wav -D 0 -d 1 は、AMLAUGESOUND の下にある pcm1p デバイスを呼び出すことです。AMLAUGESOUNDが0なので。

現時点では、イヤホンには音声出力があり、コマンドでカードを直接開くことでカードを正常に再生でき、ハードウェアと tdm も正常であることを意味します。現在の疑惑は、上位層がこのカードを開いたのではないということです。

logcat は次のようになります。

フルスクリーンの pcm_handle が null であることには問題があるはずです。

hardware\amlogic\audio\audio_hal\audio_port.c を見つけて見つけます。

なぜ port->pcm_handle = null なのでしょうか?

pcm_handle を見つけて、port->pcm_handle = pcm; で static ssize_t Output_port_start(struct Output_port *port) を見つけます。

なぜこの関数が値を代入した場所に行かなかったのかをもう一度確認してみると、以下のように device の値が常に -1 となり、デバイスが取得できていないという問題が発生します。

呼び出しがある場所を検索 -> 開始して検索

amlAudioMixer.c内

引き続き mixer_output_startup を探し、static int initSubMixngOutput で見つけます。

次に、alsa_device_update_pcm_index を確認します。

alsa_device_parser_pcm_string を確認すると、DTS に対応する文字構成がここで確認できることがわかります。

ここで関連プリントを見つけました

ここでログの赤線部分の切片部分が怪しいです。

ここで HiFi という単語を見つけてインスピレーションを受け、すぐに 2 つの dai_name を比較しました。 

このとき初めて、dai_name の認識エラーの原因がスペースであることが判明しました。.name = "ES8316-HiFi" に変更すると、正常に動作します。

上記は完全に手作りですので、お役に立てれば幸いです。

おすすめ

転載: blog.csdn.net/m0_56343264/article/details/118524838