[Armadillo:04326] Re: mxc-alsa-i2s.cのレジスタ設定について

Takenoshita Koyo email@hidden
2009年 6月 8日 (月) 15:59:44 JST


> 当方、2.6.18-at8を使って開発をしているのですが、at12に移行すべく、at8とat12の差異を
> 調査しております。
> その中で、mxc-alsa-i2s.cの
> 
> diff -r -b linux-2.6.18-at8/sound/arm/mxc-alsa-i2s.c
> linux-2.6.18-at12/sound/arm/mxc-alsa-i2s.c
> (略)
> 958c974
> <       tlv320aic_setreg(TLV_DIFORM, 0x002);
> ---
> >       tlv320aic_setreg(TLV_DIFORM, 0x042);
> 
> の部分がわからないので、ご教示いただければと思います。
> レジスタ設定が0x002から0x042に変更されていますが、
> 0x002 : スレーブ設定
> 0x042 : マスタ設定
> という違いがあります。
上記変更は、以下の修正に伴うものです。
http://armadillo.atmark-techno.com/files/downloads/armadillo-500/history.txt
Armadillo-500 ファイル更新履歴
--- 2009/03/24 ---
    ○ linux-kernel (linux-2.6.18-at)
      - オーディオドライバの録音時にポップノイズが入る問題を修正

Armadillo-500 開発ボードでは、当初i.MX31をマスタ、audio codecをスレーブ
として動作させていました。しかし、録音中にポップノイズが入るという問題
が発見されたため、対策としてlinux-2.6.18-at11以降はi.MX31をスレーブ、
audio codecをマスタとして動作させています。

> このマスタ/スレーブというのは、特に気にする必要はないのでしょうか。
アプリケーションから使用する分には、特に気をつけることはないと思います。

> また、他のi2c/i2s関連で何か他に影響を及ぼすことはないのでしょうか。
他のモジュールには影響を及ぼしません。


修正内容の詳細
==============
ポップノイズの発生原因は、i.MX31のSSIモジュールとaudio codecで異なるク
ロックソースを使用していたため、クロックのずれが発生したことによるもの
でした。i.MX31のSSIモジュールとaudio codecはi2sで接続されています。修正
前は、i.MX31のSSIモジュールをi2sマスタとし、audio codecをスレーブとして
動作させていました。i2sのBCLKは、マスタであるSSIモジュールから出力され
ており、これはi.MX31 へのCPUクロックに同期した信号です。一方、audio
codecのMCLCKは、CPUクロックとは別の外部発信器から供給していました。その
ため、BCLKとMCLKでクロックのずれが生じ、サンプリングのタイミングが合わ
ない場合があり、それがポップノイズとなっていました。

対策として、linux-2.6.18-at11以降はaudio codecをi2sマスタとし、i.MX31の
SSIモジュールをスレーブとして動作させています。そのことにより、BCLKは
audio codecのMCLKに同期した信号となるため、サンプリングタイミングのずれ
は生じなくなります。

-- 
Koyo Takenoshita



armadillo メーリングリストの案内