ALSA SoCドライバメモ No.001 ドライバ構成

ALSA SoCドライバの構成

ファイルの説明

  • DAI LINKドライバ 例: sound/soc/bcm/hifiberry-dac.c
    • 関連するドライバをまとめ(dai link)て登録(snd_soc_register_card)するドライバ
    • hifiberry-dac.cではほとんど制御は行わず、登録のみを行っている。
    • hifiberry-dacplus.cのようにクロック制御を行うものも存在する。
    • dai linkドライバは特に独立する必要はなく、CPU DAIドライバ自体がDAI LINKして登録するケースもある。(NEO2のI2Sドライバはこの方式)
    • dai linkのprobeは登録する配下モジュールがすべて揃うまで自動でRetryしてくれる。
  • CPU DAI ドライバ
    • 例: sound/soc/bcm/bcm2835-i2s.c
    • I2S制御ドライバ
    • サウンドカード構造体に一つのみ指定できる
    • I2Sブロックを制御する。DMAやFIFO、I2Sフォーマットのレジスタ設定などを行う
    • SoC内蔵PLLを使う場合はクロック制御も行う
  • CODEC DAI ドライバ
    • 例: sound/soc/codecs/pcm5102a.c pcm512x.cなど
    • CODEC制御ドライバ
    • サウンドカード構造体に複数指定できる
    • pcm5102a.cでは特にデバイス制御処理は実装していない。
    • CODECの許容するサンプリングレートやデータ形式を指定している。
    • I2Cによる制御が必要なDAC ICはCODECドライバでレジスタ設定処理を行う
      • pcm512x.cあたりでは、I2C制御でCodecのレジスタ制御を行っている。
  • AUXDEV ドライバ
    • 例: sound/soc/codecs/tpa6130a2.c
    • 非CODECドライバ
    • サウンドカード構造体に複数指定できる
    • AMPの電源制御や電子ボリュームなどCODEC以外の制御を行うドライバ
    • dai linkはできず、サウンドカード構造体(snd_soc_card)のメンバに登録を行う。

ドライバの組み合わせ

  • 最低でもCPU DAIと一つのCodecが必要そう。CPU DAIにCodecハンドラも書けば一つでも音は鳴りそう。
  • RPiではDAI LINK/CPU DAI/CODEC DAIの3ファイル構成を基本としている模様。
  • NEO2ではCPU DAI(with dai link)/CODEC DAIの2ファイル構成が基本。拙作のNEO2カーネルではRPi同様、DAI LINKドライバの利用も可能となるよう改造済み。