[Armadillo:03211] Re: Armadillo-500の音声出力について

山本 慎二郎 email@hidden
2008年 7月 30日 (水) 14:24:19 JST


いつもお世話になっております。
山本@北都システムです。

> >> 「DMA Config failed」の発生するトリガとなる情報を
> >> 取得することは、現状のドライバでは不可能でしょうか?
> >> #少なくとも/dev/dspのioctlや、pollでは、取得できませんでした。。
> > 
> > 私の知っている限りですとできないと思います。

了解しました。
現状では、ユーザー空間からでは「DMA Config failed」の発生条件を
認識できないので、ドライバに対して改造を加える必要がある
ということですね。

> LineでのBypassは、
> 
> sound/arm/mxc-alsa-i2s.cの
> mxc_alsa_i2s_audio_init_codec()
>> TLV_APATH = 0x18
> TLV_DPATH = 0x00
> として他の部分は変更しないでビルドしてKernelをブートすると
> LINE IN -> HP/LINE OUT 
> でBypassされました。

早速の調査、ありがとうございます。

Armadillo-500の開発キットのデフォルトでは、
LINE入力(CON10)とLINE出力(CON11)に端子が接続されていないようなので、
こちらの環境では、確認することができませんでした。

#試しに値を変えてカーネルを作成しましたが、
#当然ダメでした。。。

MicでBypassできないとのことなので、
デフォルトの環境で、最も簡単に対処するには、
「DMA Config failed」の出力箇所を
コメントアウトすることですね。

#多少のノイズや一瞬の音切れは仕方ないとするしかないですが。。

nakai様、お忙しいところ、色々とありがとうございました。

以上

On Wed, 30 Jul 2008 13:40:47 +0900
nakai <email@hidden> wrote:

> nakaiです。
> 
> CodecのBypassモードはLINE入力のみ対応でした。
> Micには対応してないようですね。
> 
> LineでのBypassは、
> 
> sound/arm/mxc-alsa-i2s.cの
> mxc_alsa_i2s_audio_init_codec()
>> TLV_APATH = 0x18
> TLV_DPATH = 0x00
> として他の部分は変更しないでビルドしてKernelをブートすると
> LINE IN -> HP/LINE OUT 
> でBypassされました。
> 
> 
> nakai さんは書きました:
> > nakaiです。
> > 
> >> 「DMA Config failed」の発生するトリガとなる情報を
> >> 取得することは、現状のドライバでは不可能でしょうか?
> >> #少なくとも/dev/dspのioctlや、pollでは、取得できませんでした。。
> > 
> > 私の知っている限りですとできないと思います。
> > 
> > # 以下、案。
> > #
> > # driver内部でdmaがスタートしてから完了するまでの時間をみて、
> > # 完了予定時間の半分まで経過した時点で次のdmaデータが準備されていない
> > # 場合は、pollなどで通知する
> > 
> > やはり、現実的にCodecをBypassモードにするようなドライバを実装するのが
> > 良いと思います。
> > 
> > sound/arm/mxc-alsa-i2s.cの
> > mxc_alsa_i2s_audio_init_codec()
> > の内容をBypassモードに変更して、
> > module初期化関数の中で、それだけを呼び出すようなものです。
> > 
> > 
> > 
> > 
> >> よろしくお願い致します。
> >>
> >> 以上
> >>
> >> On Tue, 29 Jul 2008 20:32:49 +0900
> >> nakai <email@hidden> wrote:
> >>
> >>> nakaiです。
> >>>
> >>>> 現在、Armadillo-500を使用して
> >>>> 「マイク入力→入力データをそのまま出力」という動作をさせたく、
> >>>> /dev/dspをアプリ起動時にRONLYとWONLYでオープンし、
> >>>> read()→write()→read()→write()と繰り返していると
> >>>> 以下のような現象が発生します。
> >>> codecをBypassモードにしてあげると入力→出力ということもできますね。
> >>> # linuxではノータッチ
> >>>
> >>> cat /dev/dsp > /dev/dsp
> >>> でもできますね。(ノイズがのるかもしれませんが。)
> >>>
> >>>> 「DMA Config failed」のエラーを回避する方法は
> >>>> 何かありますでしょうか?
> >>>> それとも、エラーが発生するのは、書き込みが
> >>>> 追いついていないだけなので、printk()の出力箇所を
> >>>> コメントアウトする、でも問題がないことなのでしょうか?
> >>> コメントアウトでも問題ないですが、
> >>> writeが追いつかないとノイズがのると思います。
> >>>
> >>> サンプリングレートを下げるとどうでしょう?
> >>>
> >>>
> >>> 山本 慎二郎 さんは書きました:
> >>>> いつもお世話になっております。
> >>>> 山本@北都システムです。
> >>>>
> >>>> 現在、Armadillo-500を使用して
> >>>> 「マイク入力→入力データをそのまま出力」という動作をさせたく、
> >>>> /dev/dspをアプリ起動時にRONLYとWONLYでオープンし、
> >>>> read()→write()→read()→write()と繰り返していると
> >>>> 以下のような現象が発生します。
> >>>>
> >>>> ■現象
> >>>> 「DMA Config failed」がコンソールに出力される
> >>>>
> >>>> ■環境
> >>>> ・atmark-dist-20080617
> >>>> ・linux-2.6.18-at8
> >>>>     ※特にデフォルトから手を入れていません。
> >>>>
> >>>>
> >>>> 調査してみたところ、
> >>>>   ●linux-2.6.18-at8/sound/arm/mxc-alsa-i2s.c
> >>>>     (L241)mxc_alsa_i2s_dma_playback()
> >>>>       mxc_dma_config()の戻り値が-EBUSYのため
> >>>>       printk出力されている。
> >>>>         →linux-2.6.18-at8/arch/arm/plat-mxc/sdma/dma_sdma.c
> >>>>             (L295)で-EBUSY
> >>>>
> >>>> というところまでは追えましたが、
> >>>> 回避方法は不明です。
> >>>>
> >>>> 上記を見る限りwrite()によるデータ転送が追いついて
> >>>> いないように見えるのですが、ユーザーアプリ側で出力可能な
> >>>> タイミングを知ることができないため、
> >>>> 回避できないように思えます。
> >>>> (write()はwaitせずに正常にreturnしてきます。
> >>>>  また、pollも「書き込み可」と返ってきます)
> >>>>
> >>>> 以下のように、WONLY側のwrite()後、close()→open()して
> >>>> 再度write()をするように繰り返した場合は
> >>>> エラー出力の現象が発生しませんが、
> >>>> プツプツというノイズが入ってしまうため、
> >>>> 実用に耐えません。
> >>>>
> >>>>   read()→write()→close()→read()→open()→write()→close()→…
> >>>>
> >>>> 「DMA Config failed」のエラーを回避する方法は
> >>>> 何かありますでしょうか?
> >>>> それとも、エラーが発生するのは、書き込みが
> >>>> 追いついていないだけなので、printk()の出力箇所を
> >>>> コメントアウトする、でも問題がないことなのでしょうか?
> >>>>
> >>>> よろしくお願い致します。
> >>>>
> >>>> 以上
> >>>>
> >>>> =================================================
> >>>> 北都システム株式会社
> >>>>   第4ユニット ITソリューショングループ所属
> >>>> 山本  慎二郎(Shinjiro Yamamoto)
> >>>>  TEL: 045-470-2773
> >>>>  Mail: email@hidden
> >>>> =================================================
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> armadillo mailing list
> >>>> email@hidden
> >>>> http://lists.atmark-techno.com/mailman/listinfo/armadillo
> >>> _______________________________________________
> >>> armadillo mailing list
> >>> email@hidden
> >>> http://lists.atmark-techno.com/mailman/listinfo/armadillo
> >>>
> >>
> >>
> >> _______________________________________________
> >> armadillo mailing list
> >> email@hidden
> >> http://lists.atmark-techno.com/mailman/listinfo/armadillo
> > _______________________________________________
> > armadillo mailing list
> > email@hidden
> > http://lists.atmark-techno.com/mailman/listinfo/armadillo
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/mailman/listinfo/armadillo
> 

=================================================
北都システム株式会社
  第4ユニット ITソリューショングループ所属
山本  慎二郎(Shinjiro Yamamoto)
 TEL: 045-470-2773
 Mail: email@hidden
=================================================





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