NanoPiNEO2 HiFiBerry DAC+対応 調査メモその1

HiFiBerry DACとはなんぞ?

  • RaspberryPi向けの高音質DAC
  • いくつか種類があり、RPiのクロックで動くものと、DACに乗っけたクロックで動くものがある。
  • RPi向けAudio用のディストロで対応したカーネルが配られている

で?

  • NanoPi NEO2でDAC側にマスタークロックが載ってるHiFiBerry DAC+ PROが動かせたらいいな

ドライバの構造調査

  • soc/bcm/bcm2708-i2s.c
    • CPUのI2S制御コード
    • ここは、sun8i-i2s.cに置き換える
    • 不足機能をsun8i-i2s.cに追加する感じ
  • soc/bcm/hifiberry_dacplus.c
    • I2SとCODECの制御コード
    • ここで、外部マスター有か無しか判定してる
    • 小改造で流用する感じ
  • soc/codecs/pcm512x.c/*_i2c.cあたり
    • CODEC(PCM5122)の制御コード
    • 実際にPCM5122を引っ叩いてるコード
    • 完全流用したい

対応が必要そうな項目のざっくり洗い出し

  • i2sドライバの修正
    • SND_SOC_DAIFMT_CBM_CFM(I2S Slave/Codec Master)対応
    • 現状はMCLKのON/OFFしかしていない
    • BCK/LRCKのin/outも変更するコードを入れる感じ
  • hifiberry制御ドライバの移植
    • daiをbcm2708から変更?
    • なんかprobeでnode検索してるから、対応要らないかも
    • hifiberryのnodeからi2s-controllerを探して設定してる
    • なのでi2s-controller=sun8i-h3-i2sとか書いたら行けるかも
  • codecの動作確認

メモ

  • ただいま動作確認用に手配したhifiberry待ちです
  • Linux SoCオーディオの用語的な話
    • Master/SlaveはCODECからみた動作を表す模様
    • SoC側がクロックを生成する、I2SがMasterでCODECがSlaveの場合はSlaveモード(SND_SOC_DAIFMT_CBS_CFS)と呼んでいる
    • 今回はMasterモード(SND_SOC_DAIFMT_CBM_CFM)をの対応を行う感じ
    • CB=BitClock, CF=LRClock(Frame)
    • CBM_CBSとかCBS_CFMなんて組み合わせもできなくないが、評価できないので実装したくないな