ALSA SoCドライバメモ No.003 callbackシーケンス

 ALSA SoCドライバ開発でいちいちgrepするのが面倒な情報をメモしておく

Callbackシーケンスのメモ 制御でよく使いそうなhw_paramsとshutdownのみ

  • ポイントは開始時はdai_link->codecs->cpudai。終了時はcpudai->codecs->dai_linkとなること
  • codecsが複数ある場合は、hw_params/shutdown両方とも昇順のみ。shutdown時に降順にはしてくれないので注意が必要!
  • cpu daiが最後になるので、外部クロック制御はdai_link/codecどちらでやっても大丈夫そう。
    • dai_link/codecでfsやclkを決定し、cpu daiに設定
    • cpu daiは設定されたfs/clkを元にPLLやDIVを決定し設定
    • と、いうことができる。

hw_params call sequence in soc_pcm_hw_params

  1. dai_link rtd->dai_link->ops->hw_params
  2. codec for (i = 0; i < rtd->num_codecs; i++) { soc_dai_hw_params }
  3. cpu dai ret = soc_dai_hw_params(substream, params, cpu_dai);
  4. platform platform->driver->ops->hw_params

shutdown call sequence in soc_pcm_close

  1. set rate = 0
  2. snd_soc_dai_digital_mute
  3. cpu_dai cpu_dai->driver->ops->shutdown
  4. codec codec_dai->driver->ops->shutdown
  5. dai link rtd->dai_link->ops->shutdown
  6. platform platform->driver->ops->close