FreeBSDで使ってるAR9341のI2SがFN1242は鳴るのですが、PCM1796やAK4382が鳴らないので、調べてみました。
AR9341のI2Sは16Bitがデフォルトです。
ところが、PCM1796は24Bitがデフォルトでした。
I2Cで設定できるようなのですが、なんらかマイコンを使わなければいけません。
AK4382は24Bitしか対応していないようなので、鳴らすことは出来ないようです。
デフォルトがI2Sではないのでマイコンで設定しています。
FN1242は自動選択のようです。
VS1053も16Bitのようで、同じようにPCM1796やAK4382が鳴りません。
ちなみにAR9341のpcmドライバは本家にはなくて、ZRouter.orgのgithubの私のブランチにあります。
コード見直してみたのですが、直値でよくないですね。もう本家にマージできないので、まーいいですかね。
ちょっと勘違いしてたのですが、AR9341のI2C_WORD_SIZE = 0の場合はbit clockが32fsですが1の場合は64fsになるようです。64fsに16bit*2というデータでも良いようです。64fsにすればPCM1796やAK4382は鳴りました。この設定をsysctlで変更出来るようにしてみました。
dev.pcm.0.bclk64fs: 0
dev.pcm.0.bclk64fs: 1
デフォルトを64fsにしました。