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

nakai email@hidden
2008年 7月 30日 (水) 13:40:47 JST


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 メーリングリストの案内