1
25
2025
LightMPD-BoticでPCMのI2Sマルチチャネル再生環境を構築する
LightMPD-Botic環境でのマルチチャネル再生のチャネルマッピング問題がようやく解決
自作のES9038PRO 8ch DAC Systemでマルチチャネル再生実験中の様子
ES9038PRO DACチップ(左)とBoticインタフェース基板(中央の赤色)、DHYINHKの USB 6ch DDI基盤(右端)
自作のLightMPD-Botic環境で5.1chのマルチチャネルオーディオデータをI2Sで再生する際に、I2Sの出力信号が意図した通りのチャネル割り当てにならず、長い間Botic-I2S方式でのマルチチャネル再生ができずにいたが、先頃ようやくこの問題の解決方法を見つけたので、今更ながらLightMPD-Botic環境でのマルチチャネルオーディオ再生について取り上げることにする.
このサイトでLightMPD-Botic環境でのマルチチャネル再生について紹介したのは、今から6年近くも前のことで、『LightMPD-Boticでマルチチャネル再生を試みる』(2019年4月16日)の記事の中で、Botic環境ではマルチチャネル再生時のチャネルマッピングがおかしなことになってしまうことを取り上げた.
この記事でも書いているように、この問題を解決するには、LightMPDで用いられているMPD(Music Player Daemon) とLinux Kernelのデバイスドライバー的な位置づけのBoticライブラリコードの中身を理解しなければならないので、解決までかなり時間がかかることは想定済みだったが、実際に解決するまで6年近くもかかるとは思ってもみなかった.
LightMPD-Botic環境についてのおさらい
LightMPD(正確には”lightMPD”が正しいが、過去の記事との関係があるので”LightMPD”と記述することにする)やBoticカーネル(ドライバ)については、古くからネットワークオーディオに携わってきたコアなオーディオマニアでなければこの名前を聞いてもピンと来ないとは思うが、当時のネットワークオーディオ界隈ではRaspberry Pi + Volumio + USB DACの組み合わせが一般的であった中で、BeagleBoneのSoCハードウェアに組み込まれた、デジタルオーディオ専用に作られたMcASPというハードウェアモジュールによるI2S直接出力でDACを駆動する方式は特異な存在だった.
LightMPDについては、製作者の”デジファイのおと”さんのデジファイのおとのホームページを参照すると良いだろう.この中に、LightMPDを用いたネットワークオーディオ環境について詳しく紹介されている。内容的にはここ数年更新されていないようだが、LightMPDは今でも愛好者が多いので、このページが今後も維持されていくことを期待している.LightMPD-Boticはデジファイのおとさんが、LightMPDをBeagleBoneとBoticインタフェース用に特別に試作したものだ.
“Botic” については、開発者の “Miero”(Miroslav Rudišin)さんが自分のホームページで使い方に関する詳しい記事を載せていたが、数年前にこのサイトを閉鎖されてしまったようで、現在は GitHub上にリポジトリの残骸?(miero/botic-dev) だけが辛うじて残っている状態だ。とりあえずこのリポジトリの残骸から、”Botic” の中身を把握して、自分で細々と”Botic”もどき環境を構築して行くしかないだろう.
私が手がけてきた自作も含めた各種デジタルオーディオシステムのうち、音質的な面で合格点が得られているのは実はこのBotick環境用に作られたLightMPDによるネットワークオーディオシステムだけだ.USB-DACでは市販のDENON USB-300を自分でカスタマイズしたものが辛うじて及第点が得られている程度だ.もちろん何百万円もするような超高級オーディオシステムを実際に試したことがないので、これらの高級機の音質と較べることはできないが、Botic環境用に作られたLightMPDによるネットワークオーディオシステムはかなり良い線をいっているのではないかと思う.
昔のアナログオーディオ全盛時代に費用をあまり掛けずにテクニックで音質向上を目指した楽しかった時代を経験している世代としては、ネットワークオーディオ機器の自作くらいしか自己満足の楽しみがなくなってしまったので、LightMPD-Boticによるネットワークオーディオの自作は最後の砦なのかもしれない.
世の中に存在する音源はほぼ例外なく2ch Stereoで、60年代より昔の音源はモノラルという状況が続いている.今回取り組んでいるマルチチャネルのPCM(DSD)音源については、実験的な取り組みで収録されたものであればそれなりに存在する様だが、コマーシャルベースのマルチチャネル音楽ソースは殆ど見かけたことがない.DVDやBlueRayディスクなどの映像音源データとしてコンサートなどを収録した物は数多くあるが、音源そのものは映像のおまけ的な位置づけで、Dolbyエンコードされたかなり歪曲された音声データで、純粋なマルチチャネル音源データではない.再生環境も安物のDVD(BlueRay)プレーヤーとAVアンプの組み合わせによる、HDMI信号による音声データの伝送という音質的には劣悪な環境であることは言うまでもない.
そんな中で、以前『マルチチャネルデジタル音源を入手』の記事で紹介した、2Lレーベルが出している“POLARITY – an acoustic jazz project : Hoff Ensemble” (2L-145-SABD)などのコンテンツがあるくらいだ.
この“POLARITY – an acoustic jazz project : Hoff Ensemble” の音源を入手して以来、マルチチャネル再生の魅力に取り憑かれてしまった.マルチチャネル再生環境を自宅で整えるのは結構面倒で手間と費用が掛かるが、通常のステレオ再生では決して得られないマルチチャネル再生ならではの臨場感に圧倒される.ここ数年、イマーシブ音源再生が巷で話題になっているが、このイマーシブサウンドを一度体験したら病みつきになるのは間違いなしだ.通常のStereo音楽再生とは完全に異なる異次元の世界のもので、同じ土俵の上で比較することはできない.
現状、私のような貧乏人が最高音質のマルチチャネル再生を楽しむには、LightMPD-Boticによる自作マルチチャネルシステムを構築するしか術がないのだ.これが長年私がLightMPD-Boticによる自作マルチチャネルシステムに拘ってきた一番の理由だ.
“Botic” が実際にどのように構成されているのかについては過去の記事、
・『BeagleBone用I2S環境の再構築(カーネル構築練習編)』
・『BeagleBone Botic7環境を自分で再構築してみる(その1)』
・『BeagleBone Botic7環境を自分で再構築してみる(その2)』
を参考にすると良いだろう.ある程度のLinuxスキルがあれば自分でBotic環境を組み込んだLinuxカーネルの再構築を行うことができるだろう.
この記事を書いた当時のLinuxカーネルのバージョンはV4.8, V4.9で、現在の最新バージョンV6.10とは大きくかけ離れているが、オーディオ用の小型ボードコンピュータに載せるLinuxカーネルはこの当時のバージョンで特に問題はない筈だ.最新カーネルはリアルタイムオプションがデフォルトで組み込まれているというメリットはありそうだが、V4.9あたりでリアルタイムパッチを適用する方が小型ボードコンピュータには向いているのではないかと思う.
LightMPD-Botic環境では、R. C. Nelson版のBeagleBone用Linuxカーネルに “Miero”さんの”Botic”パッチとデバイスドライバコード、ハードウェア定義ファイル(DTB)を組み込んだ物に、LightMPD専用のLinuxルートイメージで構成されている.当然ながら”Miero”さんの”Botic”パッチは当時のLinuxカーネルである V4.8.13 版を前提に作られているので、それ以降のLinuxカーネル版では、大部分のパッチはそのまま適用することはできない.
この問題を解決するには”Botic”パッチの中身を確認し、そのパッチの内容を新しいカーネルコードに対して手動で適用(コードを修正)する必要がある.カーネルコードの内容は新しいカーネルバージョンでは大幅に変更されていることが多く、パッチの修正内容を新しいコードに適用することができなかったり、パッチの内容そのものが全く意味をなさなくなっている場合もある.
とりあえず、V4.8用に作られた”Botic”パッチをV4.9系列のコードに何とか適用することはできたが、同じV4.9系列でもマイナーバージョンが上がるとLinuxのサウンド関連のコードが大きく修正されており、その度にマニュアルでパッチを当てるのは結構骨の折れる作業だ.
Botic環境でのサウンド再生の流れを確かめる
Botic環境は Linuxのサウンドライブラリ ALSA(Advanced Linux Sound Architecture)に手を加えているが、マルチチャネル出力時のチャネルアサイン問題を解決するには、このライブラリとBeagleBoneのSoCに組み込まれている “McASP” に関連したコードの中身を把握しなければならない.
ALSAサウンドライブラリ関連のコードはあまりにも膨大で、ソースコードをちょっとやそっと眺めただけでは全体的な処理の流れが全く理解できなかった.同じような名前の関数が各階層毎にたくさんあり、同じような名前の関数がラッパーになっていて、何重にもネストされていて処理の流れが全く掴めなかった.ドライバの階層構造が完全に理解できていないと、どのような順番で処理されて行くのかが全く解らない.一つのファイルが数千行もあり、その内容を把握するのは至難の業だ.
、
ソースコードを眺めていても埒が開かないので、最後の手段として”Botic”パッチの主要コードとALSAサウンドライブラリの重要そうな部分にデバッグ出力コードを埋め込んで、サウンド再生実行時の処理の流れを追うことにした.カーネルのコードを直接編集すると切り戻しが難しくなるので、関係しそうなコードだけをカーネルディレクトリ外に置いて、こちらのコードを修正したものを最終的にカーネルディレクトリ内にシンボリックリンクを張ってコンパイルする方法を採った.
Botic関連のコードをデバッグ用のコードツリー配下に置く
このコードツリー配下に置かれている各コードの内、末尾が “-dbg.c” となっている物がデバッグ用のカーネルプリント “printk()” を埋め込んであるもので、”-dbg”がついていない物が “Botic” パッチが当てただけのコードとなっている.”printk()”の出力メッセージ内には、該当の関数名(ファイル名)とソースコード中の行番号が一緒に出力されるようにしてあり、デバッグ出力から各関数がどのような流れで実測されたのかがある程度把握可能だ.もちろん全ての関数にデバッグコードを埋め込む訳にもいかないので、ここで確認できるのは全体のごく一部の流れでしかない.当然ながらデバッグコード分の行数が増えているので、出力される行番号は元のコードとは一致しない.
下記のログは LigtMPD-Botic7 Kernel V4.8.13 での、BeagleBone Black 起動時のもので、”Starting kernel …” 以降のカギ括弧”[]”で囲まれたタイムスタンプの後にカギ括弧で囲まれたテキストが出力されたデバッグメッセージだ.
U-Boot 2022.04-00038-gbaca7b46 (Aug 30 2024 - 21:34:10 +0900)
CPU : AM335X-GP rev 2.1
Model: TI AM335x BeagleBone Black
DRAM: 512 MiB
Reset Source: Global external warm reset has occurred.
Reset Source: Power-on reset has occurred.
RTC 32KCLK Source: External.
Core: 150 devices, 14 uclasses, devicetree: separate
WDT: Started wdt@44e35000 with servicing (60s timeout)
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
Loading Environment from EXT4...
** Unable to use mmc 0:1 for loading the env **
Board: BeagleBone Black
not set. Validating first E-fuse MAC
BeagleBone Black:
BeagleBone Cape EEPROM: no EEPROM at address: 0x54
BeagleBone Cape EEPROM: no EEPROM at address: 0x55
BeagleBone Cape EEPROM: no EEPROM at address: 0x56
BeagleBone Cape EEPROM: no EEPROM at address: 0x57
Net: eth2: ethernet@4a100000, eth3: usb_ether
Press SPACE to abort autoboot in 0 seconds
board_name=[A335BNLT] ...
board_rev=[00C0] ...
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
Couldn't find partition 0:2 0x82000000
Can't set block device
Couldn't find partition 0:2 0x82000000
Can't set block device
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
... (省略)
Booting from ramdisk ...
Kernel image @ 0x82000000 [ 0x000000 - 0x313cc0 ]
## Loading init Ramdisk from Legacy Image at 88080000 ...
Image Name: lightMPD@bbb-v1.0.3 romfs
Created: 2017-01-25 2:22:11 UTC
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 22743221 Bytes = 21.7 MiB
Load Address: 00000000
Entry Point: 00000000
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Ramdisk to 8ea4f000, end 8ffff8b5 ... OK
Loading Device Tree to 8ea43000, end 8ea4e1b7 ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.8.13-LMPDB7dbg (yasuaki@buntu18srv) (gcc version 11.3.0 (GCC) ) #13 PREEMPT Wed Jan 1 20:54:59 JST 2025
[ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt:Machine model: TI AM335x BeagleBone Black
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] CPU: All CPU(s) started in SVC mode.
[ 0.000000] AM335X ES2.1 (sgx neon )
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 129408
[ 0.000000] Kernel command line: console=ttyO0,115200n8 snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMII snd_soc_botic.dsd_format_switch=1 snd_soc_botic.clk_44k1=45158400 snd_soc_botic.clk_48k=49152000 lightmpd.systype=beaglebone lightmpd.bootdev=/dev/mmcblk0p1 root=/dev/ram0 rw ramdisk_size=65536 rootfstype=romfs
[ 0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[ 0.000000] Memory: 485984K/522240K available (5120K kernel code, 317K rwdata, 1104K rodata, 1024K init, 265K bss, 36256K reserved, 0K cma-reserved, 0K highmem)
[ 0.000000] Virtual kernel memory layout:
... (省略)
[ 1.329085] sdhci-pltfm: SDHCI platform and OF driver helper
[ 1.330555] omap-aes 53500000.aes: OMAP AES hw accel rev: 3.2
[ 1.343656] omap-aes 53500000.aes: will run requests pump with realtime priority
[ 1.344091] omap-sham 53100000.sham: hw accel on OMAP rev 4.3
[ 1.344108] omap-sham 53100000.sham: initialization failed.
[ 1.344155] omap-sham: probe of 53100000.sham failed with error -22
[ 1.344744] usbcore: registered new interface driver snd-usb-audio
[ 1.344801] usbcore: registered new interface driver snd-usb-hiface
[ 1.345040] [ 'soc-core.c', #3696 : ==> Entering the function 'snd_soc_register_codec()'; ]
[ 1.345045] [ INFO: 'snd_soc_register_codec()', #3704 : /* Registering CODEC : 'snd-soc-dummy' */ ]
[ 1.345049] [ INFO: 'snd_soc_register_codec()', #3714 : /* Invoke : 'snd_soc_component_initialize()' */ ]
[ 1.345053] [ 'soc-core.c', #3248 : ==> Entering the function 'snd_soc_component_initialize()'; ]
[ 1.345062] [ 'soc-core.c', #3285 : <== Exiting the function 'snd_soc_component_initialize()' : return ( 0 ) ]
[ 1.345069] [ INFO: 'snd_soc_register_codec()', #3770 : /* Invoke : 'snd_soc_register_dais()' */ ]
[ 1.345072] [ 'soc-core.c', #3140 : ==> Entering the function 'snd_soc_register_dais()'; ]
[ 1.345075] [ INFO: 'snd_soc_register_dais()', #3153 : /* Invoke : 'soc_add_dai()' */ ]
[ 1.345078] [ 'soc-core.c', #3074 : ==> Entering the function 'soc_add_dai()'; ]
[ 1.345084] [ 'soc-core.c', #3122 : <== Exiting the function 'soc_add_dai()' : return ( dai ) ]
[ 1.345087] [ 'soc-core.c', #3164 : <== Exiting the function 'snd_soc_register_dais()' : return ( 0 ) ]
[ 1.345093] [ 'soc-core.c', #3789 : <== Exiting the function 'snd_soc_register_codec()' : return ( 0 ) ]
[ 1.345096] [ 'soc-core.c', #3524 : ==> Entering the function 'snd_soc_register_platform()'; ]
[ 1.345100] [ INFO: 'snd_soc_register_platform()', #3530 : /* platform register 'snd-soc-dummy' */ ]
[ 1.345103] [ INFO: 'snd_soc_register_platform()', #3539 : /* Invoke : 'snd_soc_add_platform()' */ ]
[ 1.345106] [ 'soc-core.c', #3473 : ==> Entering the function 'snd_soc_add_platform()'; ]
[ 1.345109] [ INFO: 'snd_soc_add_platform()', #3477 : /* Invoke : 'snd_soc_component_initialize()' */ ]
[ 1.345112] [ 'soc-core.c', #3248 : ==> Entering the function 'snd_soc_component_initialize()'; ]
[ 1.345117] [ 'soc-core.c', #3285 : <== Exiting the function 'snd_soc_component_initialize()' : return ( 0 ) ]
[ 1.345120] [ INFO: 'snd_soc_add_platform()', #3507 : /* Registered platform 'snd-soc-dummy' */ ]
[ 1.345123] [ 'soc-core.c', #3509 : <== Exiting the function 'snd_soc_add_platform()' : return ( 0 ) ]
[ 1.345127] [ 'soc-core.c', #3547 : <== Exiting the function 'snd_soc_register_platform()' : return ( ret ==> 0 ) ]
[ 1.345281] [ 'soc-core.c', #3696 : ==> Entering the function 'snd_soc_register_codec()'; ]
[ 1.345284] [ INFO: 'snd_soc_register_codec()', #3704 : /* Registering CODEC : 'botic_codec' */ ]
[ 1.345288] [ INFO: 'snd_soc_register_codec()', #3714 : /* Invoke : 'snd_soc_component_initialize()' */ ]
[ 1.345291] [ 'soc-core.c', #3248 : ==> Entering the function 'snd_soc_component_initialize()'; ]
[ 1.345301] [ 'soc-core.c', #3285 : <== Exiting the function 'snd_soc_component_initialize()' : return ( 0 ) ]
[ 1.345306] [ INFO: 'snd_soc_register_codec()', #3770 : /* Invoke : 'snd_soc_register_dais()' */ ]
[ 1.345309] [ 'soc-core.c', #3140 : ==> Entering the function 'snd_soc_register_dais()'; ]
[ 1.345311] [ INFO: 'snd_soc_register_dais()', #3153 : /* Invoke : 'soc_add_dai()' */ ]
[ 1.345314] [ 'soc-core.c', #3074 : ==> Entering the function 'soc_add_dai()'; ]
[ 1.345318] [ 'soc-core.c', #3122 : <== Exiting the function 'soc_add_dai()' : return ( dai ) ]
[ 1.345321] [ 'soc-core.c', #3164 : <== Exiting the function 'snd_soc_register_dais()' : return ( 0 ) ]
[ 1.345324] [ 'soc-core.c', #3789 : <== Exiting the function 'snd_soc_register_codec()' : return ( 0 ) ]
[ 1.345592] [ 'botic-card.c', #449 : ==> Entering the function 'asoc_botic_card_probe()'; ]
[ 1.345611] [ INFO: 'asoc_botic_card_probe()' : #477 : /* Using Pinconfig Mode :'default' */ ]
[ 1.345655] [ INFO: 'botic_hw_params()', #574 : /* Registering the 'Botic card' : Invoke 'snd_soc_register_card( &botic_card );' */ ]
[ 1.345659] [ 'soc-core.c', #2896 : ==> Entering the function 'snd_soc_register_card()'; ]
[ 1.345662] [ INFO: 'snd_soc_register_card()', #2912 : /* Invoke : 'soc_init_dai_link()' */ ]
[ 1.345666] [ 'soc-core.c', #1266 : ==> Entering the function 'soc_init_dai_link()'; ]
[ 1.345668] [ INFO: 'soc_init_dai_link()', #1270 : /* Invoke : 'snd_soc_init_multicodec()' */ ]
[ 1.345671] [ 'soc-core.c', #1232 : ==> Entering the function 'snd_soc_init_multicodec()'; ]
[ 1.345675] [ 'soc-core.c', #1258 : <== Exiting the function 'snd_soc_init_multicodec()' : return ( 0 ) ]
[ 1.345679] [ 'soc-core.c', #1332 : <== Exiting the function 'soc_init_dai_link()' : return ( 0 ) ]
[ 1.345682] [ INFO: 'snd_soc_register_card()', #2928 : /* Invoke : 'snd_soc_initialize_card_lists( card )' */ ]
[ 1.345686] [ INFO: 'snd_soc_register_card()', #2944 : /* Invoke : 'snd_soc_instantiate_card( card )' */ ]
[ 1.345689] [ 'soc-core.c', #1996 : ==> Entering the function 'snd_soc_instantiate_card()'; ]
[ 1.345692] [ INFO: 'snd_soc_instantiate_card()', #2009 : /* Invoke : 'soc_bind_dai_link()' */ ]
[ 1.345695] [ 'soc-core.c', #1016 : ==> Entering the function 'soc_bind_dai_link()'; ]
[ 1.345698] [ INFO: 'soc_bind_dai_link()', #1028 : /* ASoC: binding 'ExtDAC' */ ]
[ 1.345702] [ INFO: 'soc_bind_dai_link()', #1039 : /* Invoke : 'soc_new_pcm_runtime()' */ ]
[ 1.345708] [ INFO: 'soc_bind_dai_link()', #1051 : /* Invoke : 'snd_soc_find_dai()' */ ]
[ 1.345711] [ 'soc-core.c', #966 : ==> Entering the function 'snd_soc_find_dai()'; ]
[ 1.345715] [ 'soc-core.c', #994 : <== Exiting the function 'snd_soc_find_dai()' : return ( NULL )]
[ 1.345718] [ ERROR: 'soc_bind_dai_link()', #1057 : /* ASoC: CPU DAI '(null)' not registered */ ]
[ 1.345723] [ 'soc-core.c', #1116 : <== Exiting the function 'soc_bind_dai_link()' : return ( -EPROBE_DEFER ) ]
[ 1.345727] [ 'soc-core.c', #2237 : <== Exiting the function 'snd_soc_instantiate_card()' : return ( ret ==> -517 ) ]
[ 1.345731] [ 'soc-core.c', #2947 : <== Exiting the function 'snd_soc_register_card()' : return ( ret ==> -517 ) ]
[ 1.345734] [ ERROR: 'botic_hw_params()', #580 : snd_soc_register_card failed (-517): ]
[ 1.345748] [ 'botic-card.c', #640 : <== Exiting the function 'asoc_botic_card_probe()' ( ret ==> -517 ) ]
[ 1.345939] [ 'davinci-mcasp.c', #2623 : ==> Entering the function 'davinci_mcasp_probe()' ]
[ 1.345976] [ INFO: 'davinci_mcasp_probe()' : #2700 : /* mcasp->version ==> 2, mcasp->txnumevt ==> 16 /* ]
[ 1.345980] [ INFO: 'davinci_mcasp_probe()' : #2701 : /* mcasp->tdm_slots ==> 2, mcasp->num_serializer ==> 4 /* ]
[ 1.346290] [ INFO: 'davinci_mcasp_probe()' : #2762 : /* dma_data->addr ==> 1174405120 (0x46000000) /* ]
[ 1.346297] [ INFO: 'davinci_mcasp_probe()' : #2813 : /* mcasp->fifo_base ==> 4096 (0x1000) /* ]
[ 1.346302] [ INFO: 'davinci_mcasp_probe()' : #2840 : /* Invoke 'davinci_mcasp_set_ch_constraints( mcasp )' /* ]
[ 1.346305] [ 'davinci-mcasp.c', #826 : ==> Entering the function 'davinci_mcasp_set_ch_constraints()' ]
[ 1.346310] [ INFO: davinci_mcasp_set_ch_constraints() : #836 : Invoke davinci_mcasp_ch_constraint( ,SNDRV_PCM_STREAM_PLAYBACK, tx_serializers ) ] : tx_serializers ==> 4
[ 1.346314] [ 'davinci-mcasp.c', #782 : ==> Entering the function 'davinci_mcasp_ch_constraint()' ]
[ 1.346317] [ 'davinci-mcasp.c', #783 : args( int stream ==> 0, int serializers ==> 4 ) ]
[ 1.346320] [ INFO: davinci_mcasp_ch_constraint() : #790 : int slots = mcasp->tdm_slots ==> 2 ]
[ 1.346323] [ INFO: davinci_mcasp_ch_constraint() : #792 : mcasp->tdm_mask[stream] ==> 0 ]
[ 1.346327] [ INFO: davinci_mcasp_ch_constraint() : #810 : cl->count = count ==> 4 ]
[ 1.346330] [ INFO: davinci_mcasp_ch_constraint() : #813 : list[0] ==> 2 ]
[ 1.346332] [ INFO: davinci_mcasp_ch_constraint() : #813 : list[1] ==> 4 ]
[ 1.346335] [ INFO: davinci_mcasp_ch_constraint() : #813 : list[2] ==> 6 ]
[ 1.346338] [ INFO: davinci_mcasp_ch_constraint() : #813 : list[3] ==> 8 ]
[ 1.346341] [ 'davinci-mcasp.c', #816 : <== Exitting the function 'davinci_mcasp_ch_constraint()' : return( 0 ) ]
[ 1.346345] [ INFO: davinci_mcasp_set_ch_constraints() : #844 : Invoke davinci_mcasp_ch_constraint( ,SNDRV_PCM_STREAM_CAPTURE, rx_serializers ) ] : rx_serializers ==> 0
[ 1.346348] [ 'davinci-mcasp.c', #782 : ==> Entering the function 'davinci_mcasp_ch_constraint()' ]
[ 1.346351] [ 'davinci-mcasp.c', #783 : args( int stream ==> 1, int serializers ==> 0 ) ]
[ 1.346353] [ INFO: davinci_mcasp_ch_constraint() : #790 : int slots = mcasp->tdm_slots ==> 2 ]
[ 1.346356] [ INFO: davinci_mcasp_ch_constraint() : #792 : mcasp->tdm_mask[stream] ==> 0 ]
[ 1.346358] [ INFO: davinci_mcasp_ch_constraint() : #810 : cl->count = count ==> 1 ]
[ 1.346361] [ INFO: davinci_mcasp_ch_constraint() : #813 : list[0] ==> 2 ]
[ 1.346364] [ 'davinci-mcasp.c', #816 : <== Exitting the function 'davinci_mcasp_ch_constraint()' : return( 0 ) ]
[ 1.346367] [ 'davinci-mcasp.c', #848 : <== Exitting the function 'davinci_mcasp_set_ch_constraints()' : return( ret ==> 0 ) ]
[ 1.346370] [ 'davinci-mcasp.c', #2354 : ==> Entering the function 'mcasp_reparent_fck()' ]
[ 1.346374] [ 'davinci-mcasp.c', #2368 : <== Exitting the function 'mcasp_reparent_fck()' : return( 0 ) ]
[ 1.346378] [ INFO: 'davinci_mcasp_probe()' : #2851 : /* Invoke 'devm_snd_soc_register_component( )' /* ]
[ 1.346382] [ 'soc-core.c', #3374 : ==> Entering the function 'snd_soc_register_component()'; ]
[ 1.346386] [ INFO: 'snd_soc_register_component()', #3386 : /* Invoke : 'snd_soc_component_initialize()' */ ]
[ 1.346390] [ 'soc-core.c', #3248 : ==> Entering the function 'snd_soc_component_initialize()'; ]
[ 1.346399] [ 'soc-core.c', #3285 : <== Exiting the function 'snd_soc_component_initialize()' : return ( 0 ) ]
[ 1.346402] [ INFO: 'snd_soc_register_component()', #3396 : /* Invoke : 'snd_soc_register_dais()' */ ]
[ 1.346405] [ 'soc-core.c', #3140 : ==> Entering the function 'snd_soc_register_dais()'; ]
[ 1.346408] [ INFO: 'snd_soc_register_dais()', #3153 : /* Invoke : 'soc_add_dai()' */ ]
[ 1.346410] [ 'soc-core.c', #3074 : ==> Entering the function 'soc_add_dai()'; ]
[ 1.346417] [ 'soc-core.c', #3122 : <== Exiting the function 'soc_add_dai()' : return ( dai ) ]
[ 1.346420] [ 'soc-core.c', #3164 : <== Exiting the function 'snd_soc_register_dais()' : return ( 0 ) ]
[ 1.346423] [ INFO: 'snd_soc_register_component()', #3404 : /* Invoke : 'snd_soc_component_add()' */ ]
[ 1.346427] [ 'soc-core.c', #3408 : <== Exiting the function 'snd_soc_register_component()' : return ( 0 ) ]
[ 1.346454] [ INFO: 'davinci_mcasp_probe()' : #2867 : /* davinci_mcasp_get_dma_type( mcasp ) ==> 'PCM_EDMA' /* ]
[ 1.346458] [ 'edma-pcm.c', #68 : ==> Entering the function edma_pcm_platform_register(); ]
[ 1.346461] [ 'edma-pcm.c', #70 : ==> Entering the function edma_pcm_platform_register(); return( 'devm_snd_dmaengine_pcm_register() ' ) ]
[ 1.346466] [ 'soc-generic-dmaengine-pcm.c', #490 : ==> Entering the function 'snd_dmaengine_pcm_register()' ]
[ 1.346470] [ INFO: 'snd_dmaengine_pcm_register()', #502 : /* Invoke 'dmaengine_pcm_request_chan_of( pcm, dev, config )' */ ]
[ 1.346484] [ INFO: 'snd_dmaengine_pcm_register()', #508 : /* Invoke 'snd_soc_add_platform( dev, &pcm->platform, &dmaengine_pcm_platform )' */ ]
[ 1.346487] [ 'soc-core.c', #3473 : ==> Entering the function 'snd_soc_add_platform()'; ]
[ 1.346490] [ INFO: 'snd_soc_add_platform()', #3477 : /* Invoke : 'snd_soc_component_initialize()' */ ]
[ 1.346493] [ 'soc-core.c', #3248 : ==> Entering the function 'snd_soc_component_initialize()'; ]
[ 1.346498] [ 'soc-core.c', #3285 : <== Exiting the function 'snd_soc_component_initialize()' : return ( 0 ) ]
[ 1.346502] [ INFO: 'snd_soc_add_platform()', #3507 : /* Registered platform '48038000.mcasp' */ ]
[ 1.346504] [ 'soc-core.c', #3509 : <== Exiting the function 'snd_soc_add_platform()' : return ( 0 ) ]
[ 1.346508] [ 'soc-generic-dmaengine-pcm.c', #514 : <== Exitting the function 'snd_dmaengine_pcm_register()' : return( 0 ) ]
[ 1.346542] [ INFO: 'davinci_mcasp_probe()' : #2922 : /* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0, and LSB first */ ]
[ 1.346545] [ INFO: 'davinci_mcasp_probe()' : #2923 : /* 'mcasp_set_bits( mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15) );' */ ]
[ 1.346549] [ INFO: 'davinci_mcasp_probe()' : #2929 : /* Only 44100 and 48000 are valid, both have the same setting */ ]
[ 1.346551] [ INFO: 'davinci_mcasp_probe()' : #2930 : /* 'mcasp_set_bits( mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXDIV(3) );' */ ]
[ 1.346560] [ 'davinci-mcasp.c', #2936 : <== Exitting the function 'davinci_mcasp_probe()' : return( 0 ) ]
[ 1.346605] [ 'davinci-mcasp.c', #2623 : ==> Entering the function 'davinci_mcasp_probe()' ]
[ 1.346633] davinci-mcasp 4803c000.mcasp: invalid tdm slots: 0
[ 1.346638] [ INFO: 'davinci_mcasp_probe()' : #2700 : /* mcasp->version ==> 2, mcasp->txnumevt ==> 0 /* ]
[ 1.346641] [ INFO: 'davinci_mcasp_probe()' : #2701 : /* mcasp->tdm_slots ==> 2, mcasp->num_serializer ==> 0 /* ]
[ 1.346855] [ INFO: 'davinci_mcasp_probe()' : #2762 : /* dma_data->addr ==> 1178599424 (0x46400000) /* ]
[ 1.346860] [ INFO: 'davinci_mcasp_probe()' : #2813 : /* mcasp->fifo_base ==> 4096 (0x1000) /* ]
[ 1.346863] [ INFO: 'davinci_mcasp_probe()' : #2840 : /* Invoke 'davinci_mcasp_set_ch_constraints( mcasp )' /* ]
[ 1.346866] [ 'davinci-mcasp.c', #826 : ==> Entering the function 'davinci_mcasp_set_ch_constraints()' ]
[ 1.346870] [ INFO: davinci_mcasp_set_ch_constraints() : #836 : Invoke davinci_mcasp_ch_constraint( ,SNDRV_PCM_STREAM_PLAYBACK, tx_serializers ) ] : tx_serializers ==> 0
[ 1.346873] [ 'davinci-mcasp.c', #782 : ==> Entering the function 'davinci_mcasp_ch_constraint()' ]
[ 1.346876] [ 'davinci-mcasp.c', #783 : args( int stream ==> 0, int serializers ==> 0 ) ]
[ 1.346879] [ INFO: davinci_mcasp_ch_constraint() : #790 : int slots = mcasp->tdm_slots ==> 2 ]
[ 1.346881] [ INFO: davinci_mcasp_ch_constraint() : #792 : mcasp->tdm_mask[stream] ==> 0 ]
[ 1.346884] [ INFO: davinci_mcasp_ch_constraint() : #810 : cl->count = count ==> 1 ]
[ 1.346887] [ INFO: davinci_mcasp_ch_constraint() : #813 : list[0] ==> 2 ]
[ 1.346890] [ 'davinci-mcasp.c', #816 : <== Exitting the function 'davinci_mcasp_ch_constraint()' : return( 0 ) ]
[ 1.346893] [ INFO: davinci_mcasp_set_ch_constraints() : #844 : Invoke davinci_mcasp_ch_constraint( ,SNDRV_PCM_STREAM_CAPTURE, rx_serializers ) ] : rx_serializers ==> 0
[ 1.346896] [ 'davinci-mcasp.c', #782 : ==> Entering the function 'davinci_mcasp_ch_constraint()' ]
[ 1.346899] [ 'davinci-mcasp.c', #783 : args( int stream ==> 1, int serializers ==> 0 ) ]
[ 1.346901] [ INFO: davinci_mcasp_ch_constraint() : #790 : int slots = mcasp->tdm_slots ==> 2 ]
[ 1.346904] [ INFO: davinci_mcasp_ch_constraint() : #792 : mcasp->tdm_mask[stream] ==> 0 ]
[ 1.346906] [ INFO: davinci_mcasp_ch_constraint() : #810 : cl->count = count ==> 1 ]
[ 1.346909] [ INFO: davinci_mcasp_ch_constraint() : #813 : list[0] ==> 2 ]
[ 1.346912] [ 'davinci-mcasp.c', #816 : <== Exitting the function 'davinci_mcasp_ch_constraint()' : return( 0 ) ]
[ 1.346915] [ 'davinci-mcasp.c', #848 : <== Exitting the function 'davinci_mcasp_set_ch_constraints()' : return( ret ==> 0 ) ]
[ 1.346918] [ 'davinci-mcasp.c', #2354 : ==> Entering the function 'mcasp_reparent_fck()' ]
[ 1.346922] [ 'davinci-mcasp.c', #2368 : <== Exitting the function 'mcasp_reparent_fck()' : return( 0 ) ]
[ 1.346925] [ INFO: 'davinci_mcasp_probe()' : #2851 : /* Invoke 'devm_snd_soc_register_component( )' /* ]
[ 1.346929] [ 'soc-core.c', #3374 : ==> Entering the function 'snd_soc_register_component()'; ]
[ 1.346932] [ INFO: 'snd_soc_register_component()', #3386 : /* Invoke : 'snd_soc_component_initialize()' */ ]
[ 1.346934] [ 'soc-core.c', #3248 : ==> Entering the function 'snd_soc_component_initialize()'; ]
[ 1.346942] [ 'soc-core.c', #3285 : <== Exiting the function 'snd_soc_component_initialize()' : return ( 0 ) ]
[ 1.346944] [ INFO: 'snd_soc_register_component()', #3396 : /* Invoke : 'snd_soc_register_dais()' */ ]
[ 1.346947] [ 'soc-core.c', #3140 : ==> Entering the function 'snd_soc_register_dais()'; ]
[ 1.346949] [ INFO: 'snd_soc_register_dais()', #3153 : /* Invoke : 'soc_add_dai()' */ ]
[ 1.346952] [ 'soc-core.c', #3074 : ==> Entering the function 'soc_add_dai()'; ]
[ 1.346957] [ 'soc-core.c', #3122 : <== Exiting the function 'soc_add_dai()' : return ( dai ) ]
[ 1.346959] [ 'soc-core.c', #3164 : <== Exiting the function 'snd_soc_register_dais()' : return ( 0 ) ]
[ 1.346962] [ INFO: 'snd_soc_register_component()', #3404 : /* Invoke : 'snd_soc_component_add()' */ ]
[ 1.346965] [ 'soc-core.c', #3408 : <== Exiting the function 'snd_soc_register_component()' : return ( 0 ) ]
[ 1.346986] [ INFO: 'davinci_mcasp_probe()' : #2867 : /* davinci_mcasp_get_dma_type( mcasp ) ==> 'PCM_EDMA' /* ]
[ 1.346988] [ 'edma-pcm.c', #68 : ==> Entering the function edma_pcm_platform_register(); ]
[ 1.346992] [ 'edma-pcm.c', #70 : ==> Entering the function edma_pcm_platform_register(); return( 'devm_snd_dmaengine_pcm_register() ' ) ]
[ 1.346996] [ 'soc-generic-dmaengine-pcm.c', #490 : ==> Entering the function 'snd_dmaengine_pcm_register()' ]
[ 1.346999] [ INFO: 'snd_dmaengine_pcm_register()', #502 : /* Invoke 'dmaengine_pcm_request_chan_of( pcm, dev, config )' */ ]
[ 1.347012] [ INFO: 'snd_dmaengine_pcm_register()', #508 : /* Invoke 'snd_soc_add_platform( dev, &pcm->platform, &dmaengine_pcm_platform )' */ ]
[ 1.347015] [ 'soc-core.c', #3473 : ==> Entering the function 'snd_soc_add_platform()'; ]
[ 1.347017] [ INFO: 'snd_soc_add_platform()', #3477 : /* Invoke : 'snd_soc_component_initialize()' */ ]
[ 1.347020] [ 'soc-core.c', #3248 : ==> Entering the function 'snd_soc_component_initialize()'; ]
[ 1.347025] [ 'soc-core.c', #3285 : <== Exiting the function 'snd_soc_component_initialize()' : return ( 0 ) ]
[ 1.347029] [ INFO: 'snd_soc_add_platform()', #3507 : /* Registered platform '4803c000.mcasp' */ ]
[ 1.347031] [ 'soc-core.c', #3509 : <== Exiting the function 'snd_soc_add_platform()' : return ( 0 ) ]
[ 1.347034] [ 'soc-generic-dmaengine-pcm.c', #514 : <== Exitting the function 'snd_dmaengine_pcm_register()' : return( 0 ) ]
[ 1.347055] [ INFO: 'davinci_mcasp_probe()' : #2922 : /* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0, and LSB first */ ]
[ 1.347058] [ INFO: 'davinci_mcasp_probe()' : #2923 : /* 'mcasp_set_bits( mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15) );' */ ]
[ 1.347060] [ INFO: 'davinci_mcasp_probe()' : #2929 : /* Only 44100 and 48000 are valid, both have the same setting */ ]
[ 1.347063] [ INFO: 'davinci_mcasp_probe()' : #2930 : /* 'mcasp_set_bits( mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXDIV(3) );' */ ]
[ 1.347069] [ 'davinci-mcasp.c', #2936 : <== Exitting the function 'davinci_mcasp_probe()' : return( 0 ) ]
[ 1.347355] Initializing XFRM netlink socket
[ 1.347378] NET: Registered protocol family 17
[ 1.347511] sctp: Hash tables configured (bind 1024/1024)
[ 1.347818] Key type dns_resolver registered
[ 1.347959] omap_voltage_late_init: Voltage driver support not added
[ 1.348087] ThumbEE CPU extension supported.
[ 1.348100] Registering SWP/SWPB emulation handler
[ 1.349966] input: tps65217_pwr_but as /devices/platform/ocp/44e0b000.i2c/i2c-0/0-0024/input/input0
[ 1.445412] tps65217 0-0024: TPS65217 ID 0xe version 1.2
[ 1.445676] at24 0-0050: 32768 byte 24c256 EEPROM, writable, 1 bytes/write
[ 1.445704] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
[ 1.456732] omap_i2c 4802a000.i2c: bus 1 rev0.11 at 100 kHz
[ 1.457010] [ 'botic-card.c', #449 : ==> Entering the function 'asoc_botic_card_probe()'; ]
[ 1.457030] [ INFO: 'asoc_botic_card_probe()' : #477 : /* Using Pinconfig Mode :'default' */ ]
[ 1.457072] [ INFO: 'botic_hw_params()', #574 : /* Registering the 'Botic card' : Invoke 'snd_soc_register_card( &botic_card );' */ ]
[ 1.457077] [ 'soc-core.c', #2896 : ==> Entering the function 'snd_soc_register_card()'; ]
[ 1.457080] [ INFO: 'snd_soc_register_card()', #2912 : /* Invoke : 'soc_init_dai_link()' */ ]
[ 1.457083] [ 'soc-core.c', #1266 : ==> Entering the function 'soc_init_dai_link()'; ]
[ 1.457086] [ INFO: 'soc_init_dai_link()', #1270 : /* Invoke : 'snd_soc_init_multicodec()' */ ]
[ 1.457089] [ 'soc-core.c', #1232 : ==> Entering the function 'snd_soc_init_multicodec()'; ]
[ 1.457094] [ 'soc-core.c', #1258 : <== Exiting the function 'snd_soc_init_multicodec()' : return ( 0 ) ]
[ 1.457097] [ 'soc-core.c', #1332 : <== Exiting the function 'soc_init_dai_link()' : return ( 0 ) ]
[ 1.457101] [ INFO: 'snd_soc_register_card()', #2928 : /* Invoke : 'snd_soc_initialize_card_lists( card )' */ ]
[ 1.457105] [ INFO: 'snd_soc_register_card()', #2944 : /* Invoke : 'snd_soc_instantiate_card( card )' */ ]
[ 1.457108] [ 'soc-core.c', #1996 : ==> Entering the function 'snd_soc_instantiate_card()'; ]
[ 1.457110] [ INFO: 'snd_soc_instantiate_card()', #2009 : /* Invoke : 'soc_bind_dai_link()' */ ]
[ 1.457114] [ 'soc-core.c', #1016 : ==> Entering the function 'soc_bind_dai_link()'; ]
[ 1.457117] [ INFO: 'soc_bind_dai_link()', #1028 : /* ASoC: binding 'ExtDAC' */ ]
[ 1.457120] [ INFO: 'soc_bind_dai_link()', #1039 : /* Invoke : 'soc_new_pcm_runtime()' */ ]
[ 1.457127] [ INFO: 'soc_bind_dai_link()', #1051 : /* Invoke : 'snd_soc_find_dai()' */ ]
[ 1.457130] [ 'soc-core.c', #966 : ==> Entering the function 'snd_soc_find_dai()'; ]
[ 1.457136] [ 'soc-core.c', #988 : <== Exiting the function 'snd_soc_find_dai()' : return ( dai )]
[ 1.457139] [ 'soc-core.c', #966 : ==> Entering the function 'snd_soc_find_dai()'; ]
[ 1.457143] [ 'soc-core.c', #988 : <== Exiting the function 'snd_soc_find_dai()' : return ( dai )]
[ 1.457147] [ INFO: 'soc_bind_dai_link()', #1105 : /* Invoke : 'soc_add_pcm_runtime()' */ ]
[ 1.457150] [ 'soc-core.c', #1109 : <== Exiting the function 'soc_bind_dai_link()' : return ( 0 ) ]
[ 1.457154] [ INFO: 'snd_soc_instantiate_card()', #2026 : /* Invoke : 'snd_soc_add_dai_link()' */ ]
[ 1.457157] [ 'soc-core.c', #1351 : ==> Entering the function 'snd_soc_add_dai_link()'; ]
[ 1.457161] [ 'soc-core.c', #1371 : <== Exiting the function 'snd_soc_add_dai_link()' : return ( 0 ) ]
[ 1.457164] [ INFO: 'snd_soc_instantiate_card()', #2036 : /* Invoke : 'snd_soc_init_codec_cache( codec )' */ ]
[ 1.457167] [ 'soc-core.c', #1887 : ==> Entering the function 'snd_soc_init_codec_cache()'; ]
[ 1.457171] [ 'soc-core.c', #1907 : <== Exiting the function 'snd_soc_init_codec_cache()' : return ( 0 ) ]
[ 1.457174] [ INFO: 'snd_soc_instantiate_card()', #2036 : /* Invoke : 'snd_soc_init_codec_cache( codec )' */ ]
[ 1.457176] [ 'soc-core.c', #1887 : ==> Entering the function 'snd_soc_init_codec_cache()'; ]
[ 1.457179] [ 'soc-core.c', #1907 : <== Exiting the function 'snd_soc_init_codec_cache()' : return ( 0 ) ]
[ 1.457183] [ INFO: 'snd_soc_instantiate_card()', #2045 : /* card bind complete so register a sound card : Invoke : 'snd_card_new()' */ ]
[ 1.457218] [ INFO: 'snd_soc_instantiate_card()', #2057 : /* Invoke : 'soc_init_card_debugfs()' */ ]
[ 1.457221] [ 'soc-core.c', #456 : ==> Entering the function 'soc_init_card_debugfs()' ]
[ 1.457262] [ 'soc-core.c', #476 : <== Exitting the function 'soc_init_card_debugfs()' : return( void ) ]
[ 1.457274] [ INFO: 'snd_soc_instantiate_card()', #2096 : /* Invoke : 'soc_probe_link_components()' */ ]
[ 1.457277] [ 'soc-core.c', #1593 : ==> Entering the function 'soc_probe_link_components()'; ]
[ 1.457282] [ 'soc-core.c', #1624 : <== Exiting the function 'soc_probe_link_components()' : return ( 0 ) ]
[ 1.457285] [ INFO: 'snd_soc_instantiate_card()', #2096 : /* Invoke : 'soc_probe_link_components()' */ ]
[ 1.457287] [ 'soc-core.c', #1593 : ==> Entering the function 'soc_probe_link_components()'; ]
[ 1.457290] [ 'soc-core.c', #1624 : <== Exiting the function 'soc_probe_link_components()' : return ( 0 ) ]
[ 1.457293] [ INFO: 'snd_soc_instantiate_card()', #2096 : /* Invoke : 'soc_probe_link_components()' */ ]
[ 1.457295] [ 'soc-core.c', #1593 : ==> Entering the function 'soc_probe_link_components()'; ]
[ 1.457298] [ 'soc-core.c', #1438 : ==> Entering the function 'soc_probe_component()'; ]
[ 1.457303] [ INFO: 'soc_probe_component()', #1471 : /* Invoke : 'soc_init_component_debugfs()' */ ]
[ 1.457322] [ 'soc-core.c', #1532 : <== Exiting the function 'soc_probe_component()' : return ( 0 ) ]
[ 1.457325] [ 'soc-core.c', #1438 : ==> Entering the function 'soc_probe_component()'; ]
[ 1.457328] [ INFO: 'soc_probe_component()', #1471 : /* Invoke : 'soc_init_component_debugfs()' */ ]
[ 1.457373] [ 'soc-core.c', #1532 : <== Exiting the function 'soc_probe_component()' : return ( 0 ) ]
[ 1.457376] [ 'soc-core.c', #1624 : <== Exiting the function 'soc_probe_link_components()' : return ( 0 ) ]
[ 1.457379] [ INFO: 'snd_soc_instantiate_card()', #2096 : /* Invoke : 'soc_probe_link_components()' */ ]
[ 1.457382] [ 'soc-core.c', #1593 : ==> Entering the function 'soc_probe_link_components()'; ]
[ 1.457384] [ 'soc-core.c', #1438 : ==> Entering the function 'soc_probe_component()'; ]
[ 1.457387] [ INFO: 'soc_probe_component()', #1471 : /* Invoke : 'soc_init_component_debugfs()' */ ]
[ 1.457408] [ 'soc-core.c', #1532 : <== Exiting the function 'soc_probe_component()' : return ( 0 ) ]
[ 1.457412] [ 'soc-core.c', #1624 : <== Exiting the function 'soc_probe_link_components()' : return ( 0 ) ]
[ 1.457414] [ INFO: 'snd_soc_instantiate_card()', #2096 : /* Invoke : 'soc_probe_link_components()' */ ]
[ 1.457417] [ 'soc-core.c', #1593 : ==> Entering the function 'soc_probe_link_components()'; ]
[ 1.457420] [ 'soc-core.c', #1624 : <== Exiting the function 'soc_probe_link_components()' : return ( 0 ) ]
[ 1.457424] [ INFO: 'snd_soc_instantiate_card()', #2137 : /* Invoke : 'soc_probe_link_dais()' */ ]
[ 1.457427] [ 'soc-core.c', #1699 : ==> Entering the function 'soc_probe_link_dais()'; ]
[ 1.457430] [ INFO: 'soc_probe_link_dais()', #1711 : /* Invoke : 'soc_probe_dai()' CPU DAI */ ]
[ 1.457433] [ 'soc-core.c', #1631 : ==> Entering the function 'soc_probe_dai()'; ]
[ 1.457436] [ 'soc-core.c', #1649 : <== Exiting the function 'soc_probe_dai()' : return ( 0 ) ]
[ 1.457440] [ INFO: 'soc_probe_link_dais()', #1722 : /* Invoke : 'soc_probe_dai()' CODEC DAI */ ]
[ 1.457442] [ 'soc-core.c', #1631 : ==> Entering the function 'soc_probe_dai()'; ]
[ 1.457445] [ 'soc-core.c', #1649 : <== Exiting the function 'soc_probe_dai()' : return ( 0 ) ]
[ 1.457448] [ 'soc-core.c', #1734 : <== Exiting the function 'soc_probe_link_dais()' : return ( 0 ) ]
[ 1.457451] [ INFO: 'snd_soc_instantiate_card()', #2137 : /* Invoke : 'soc_probe_link_dais()' */ ]
[ 1.457453] [ 'soc-core.c', #1699 : ==> Entering the function 'soc_probe_link_dais()'; ]
[ 1.457456] [ INFO: 'soc_probe_link_dais()', #1711 : /* Invoke : 'soc_probe_dai()' CPU DAI */ ]
[ 1.457458] [ 'soc-core.c', #1631 : ==> Entering the function 'soc_probe_dai()'; ]
[ 1.457461] [ 'soc-core.c', #1649 : <== Exiting the function 'soc_probe_dai()' : return ( 0 ) ]
[ 1.457463] [ INFO: 'soc_probe_link_dais()', #1722 : /* Invoke : 'soc_probe_dai()' CODEC DAI */ ]
[ 1.457465] [ 'soc-core.c', #1631 : ==> Entering the function 'soc_probe_dai()'; ]
[ 1.457468] [ 'soc-core.c', #1649 : <== Exiting the function 'soc_probe_dai()' : return ( 0 ) ]
[ 1.457471] [ 'soc-core.c', #1734 : <== Exiting the function 'soc_probe_link_dais()' : return ( 0 ) ]
[ 1.457473] [ INFO: 'snd_soc_instantiate_card()', #2137 : /* Invoke : 'soc_probe_link_dais()' */ ]
[ 1.457475] [ 'soc-core.c', #1699 : ==> Entering the function 'soc_probe_link_dais()'; ]
[ 1.457478] [ INFO: 'soc_probe_link_dais()', #1711 : /* Invoke : 'soc_probe_dai()' CPU DAI */ ]
[ 1.457480] [ 'soc-core.c', #1631 : ==> Entering the function 'soc_probe_dai()'; ]
[ 1.457484] [ 'davinci-mcasp.c', #2140 : ==> Entering the function 'davinci_mcasp_dai_probe()' ]
[ 1.457487] [ 'davinci-mcasp.c', #2167 : <== Exitting the function 'davinci_mcasp_dai_probe()' : return( 0 ) ]
[ 1.457489] [ 'soc-core.c', #1649 : <== Exiting the function 'soc_probe_dai()' : return ( 0 ) ]
[ 1.457492] [ INFO: 'soc_probe_link_dais()', #1722 : /* Invoke : 'soc_probe_dai()' CODEC DAI */ ]
[ 1.457494] [ 'soc-core.c', #1631 : ==> Entering the function 'soc_probe_dai()'; ]
[ 1.457497] [ 'soc-core.c', #1649 : <== Exiting the function 'soc_probe_dai()' : return ( 0 ) ]
[ 1.457500] [ 'soc-core.c', #1734 : <== Exiting the function 'soc_probe_link_dais()' : return ( 0 ) ]
[ 1.457502] [ INFO: 'snd_soc_instantiate_card()', #2137 : /* Invoke : 'soc_probe_link_dais()' */ ]
[ 1.457505] [ 'soc-core.c', #1699 : ==> Entering the function 'soc_probe_link_dais()'; ]
[ 1.457507] [ INFO: 'soc_probe_link_dais()', #1711 : /* Invoke : 'soc_probe_dai()' CPU DAI */ ]
[ 1.457509] [ 'soc-core.c', #1631 : ==> Entering the function 'soc_probe_dai()'; ]
[ 1.457512] [ 'soc-core.c', #1649 : <== Exiting the function 'soc_probe_dai()' : return ( 0 ) ]
[ 1.457514] [ INFO: 'soc_probe_link_dais()', #1722 : /* Invoke : 'soc_probe_dai()' CODEC DAI */ ]
[ 1.457517] [ 'soc-core.c', #1631 : ==> Entering the function 'soc_probe_dai()'; ]
[ 1.457519] [ 'soc-core.c', #1649 : <== Exiting the function 'soc_probe_dai()' : return ( 0 ) ]
[ 1.457522] [ 'soc-core.c', #1734 : <== Exiting the function 'soc_probe_link_dais()' : return ( 0 ) ]
[ 1.457524] [ INFO: 'snd_soc_instantiate_card()', #2137 : /* Invoke : 'soc_probe_link_dais()' */ ]
[ 1.457527] [ 'soc-core.c', #1699 : ==> Entering the function 'soc_probe_link_dais()'; ]
[ 1.457529] [ INFO: 'soc_probe_link_dais()', #1711 : /* Invoke : 'soc_probe_dai()' CPU DAI */ ]
[ 1.457531] [ 'soc-core.c', #1631 : ==> Entering the function 'soc_probe_dai()'; ]
[ 1.457534] [ 'soc-core.c', #1649 : <== Exiting the function 'soc_probe_dai()' : return ( 0 ) ]
[ 1.457536] [ INFO: 'soc_probe_link_dais()', #1722 : /* Invoke : 'soc_probe_dai()' CODEC DAI */ ]
[ 1.457539] [ 'soc-core.c', #1631 : ==> Entering the function 'soc_probe_dai()'; ]
[ 1.457541] [ 'soc-core.c', #1649 : <== Exiting the function 'soc_probe_dai()' : return ( 0 ) ]
[ 1.457545] [ INFO: 'soc_probe_link_dais()', #1755 : /* Invoke : 'soc_post_component_init()' */ ]
[ 1.457547] [ 'soc-core.c', #1554 : ==> Entering the function 'soc_post_component_init()'; ]
[ 1.457612] [ 'soc-core.c', #1584 : <== Exiting the function 'soc_post_component_init()' : return ( 0 ) ]
[ 1.457616] [ INFO: 'soc_probe_link_dais()', #1781 : /* create the pcm : Invoke : 'soc_new_pcm()' */ ]
[ 1.457620] [ 'soc-pcm.c', #2758 : ==> Entering the function 'soc_new_pcm()' ]
[ 1.457702] [ INFO: 'soc_new_pcm', #2822 : ASoC: registered pcm #0 'external botic-hifi-0' ]
[ 1.457706] [ INFO: 'soc_new_pcm', #2839 : ASoC: PCM operations ==> 'Not Dynamic' ]
[ 1.457713] [ 'soc-generic-dmaengine-pcm.c', #313 : ==> Entering the function 'dmaengine_pcm_new()' ]
[ 1.457717] [ INFO: 'dmaengine_pcm_new()', #339 : /* Invoke 'snd_soc_dai_get_dma_data( rtd->cpu_dai, substream )' */ ]
[ 1.462927] [ INFO: 'dmaengine_pcm_new()', #339 : /* Invoke 'snd_soc_dai_get_dma_data( rtd->cpu_dai, substream )' */ ]
[ 1.468033] [ 'soc-generic-dmaengine-pcm.c', #374 : <== Exitting the function 'dmaengine_pcm_new()' : return( 0 ) ]
[ 1.468046] asoc-botic-card botic: botic-hifi <-> 48038000.mcasp mapping ok
[ 1.468051] [ INFO: 'soc_new_pcm', #2896 : ASoC: codec 'botic-hifi' <-----> dai '48038000.mcasp' ==> mapping ok ]
[ 1.468055] [ 'soc-pcm.c', #2899 : <== Exitting the function 'soc_new_pcm()' : return( ret ==> 0 ) ]
[ 1.468058] [ 'soc-core.c', #1801 : <== Exiting the function 'soc_probe_link_dais()' : return ( 0 ) ]
[ 1.468062] [ INFO: 'snd_soc_instantiate_card()', #2148 : /* Invoke : 'snd_soc_dapm_link_dai_widgets()' */ ]
[ 1.468066] [ INFO: 'snd_soc_instantiate_card()', #2152 : /* Invoke : 'snd_soc_dapm_connect_dai_link_widgets()' */ ]
[ 1.468073] [ INFO: 'snd_soc_instantiate_card()', #2196 : /* Invoke : 'snd_soc_dapm_new_widgets()' */ ]
[ 1.477954] [ INFO: 'snd_soc_instantiate_card()', #2199 : /* Invoke : 'snd_card_register()' */ ]
[ 1.478568] [ 'soc-core.c', #2214 : <== Exiting the function 'snd_soc_instantiate_card()' : return ( 0 ) ]
[ 1.478575] [ 'soc-core.c', #2966 : <== Exiting the function 'snd_soc_register_card()' : return ( ret ==> 0 ) ]
[ 1.478581] [ INFO: 'asoc_botic_card_probe()', #611 : Clock : 48k ==> 'external', 44.1k ==> 'external' : DSD format SW ==> 'use' ]
[ 1.478584] [ INFO: 'asoc_botic_card_probe()', #619 : /* 'Botic card' power SW ==> 'ON' : Invoke 'gpio_set_value( gpio_card_power_switch, 1 );' */ ]
[ 1.478593] [ 'botic-card.c', #640 : <== Exiting the function 'asoc_botic_card_probe()' ( ret ==> 0 ) ]
[ 1.478975] omap_rtc 44e3e000.rtc: setting system clock to 2000-01-07 12:51:19 UTC (947249479)
[ 1.481793] platform 53100000.sham: omap_device_late_idle: enabled but no driver. Idling
[ 1.481901] ALSA device list:
[ 1.481908] #0: Botic
[ 2.286135] random: fast init done
[ 4.520733] RAMDISK: gzip image found at block 0
[ 4.529519] mmcblk0: mmc0:0007 SD4GB 3.71 GiB
[ 4.535620] mmcblk0: p1
[ 4.616734] mmc1: new high speed MMC card at address 0001
[ 4.629465] mmcblk1: mmc1:0001 MMC04G 3.66 GiB
[ 4.639082] mmcblk1boot0: mmc1:0001 MMC04G partition 1 1.00 MiB
[ 4.659184] mmcblk1boot1: mmc1:0001 MMC04G partition 2 1.00 MiB
[ 4.667329] mmcblk1: p1
[ 6.256998] VFS: Mounted root (romfs filesystem) readonly on device 1:0.
[ 6.264335] devtmpfs: mounted
[ 6.268957] Freeing unused kernel memory: 1024K (c0800000 - c0900000)
lightMPD initializer start SYSTYPE=beaglebone BOOTDEV=/dev/mmcblk0p1
setup /var OK
[ 6.741268] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
copy script file OK
copy conf file lightmpd.conf mpd.conf sysctl.conf OK
OK
config musb-hdrc.1.auto: illegal irqname
OK
sysctl vm.swappiness = 0
kernel.sched_rt_runtime_us = -1
kernel.sched_rt_period_us = 10000
kernel.printk = 4 4 1 4
OK
Starting logging: OK
read-only file system detected...done
Starting rpcbind: OK
Starting network...
waiting eth0 link up ..linked up
Getting initial time via ntp.
Starting telnetd: OK
NAS mount OK
set affinity 0 1 1 ((musb-hdrc.1.auto FIFO:99))OK
thttpdStarting mpd affinity mask 0: OK
webconsole started
/usr/bin/ntpq: read: Connection refused
Welcome to lightMPD
lightmpd login:
このログの内容から、”Botic”関連のドライバなどがLinux起動時にALSAの一連の処理手順によって登録されているのが解るだろう。このログの内容からはマルチチャネルのチャネルアサイン問題を解決するような有益な情報は得られなかったが、ALSAでのデバイスの登録の仕組みや手順はある程度把握できるだろう。
次に、PCM 2ch (Stereo) 再生時のデバッグログを追ってみることにする。もちろんこの場合は、チャネルのアサイン問題は生じず、きちんと通常のL,Rの順番で再生される。
====== PCM 2ch Stereo 24bit 96KHz [FLAC File] =====
[ 2326.788159] [ 'pcm_native.c', #2522 : ==> Entering the function 'snd_pcm_playback_open()' ]
[ 2326.797156] [ INFO: 'snd_pcm_playback_open()' : #2526 : /* Invoke 'nonseekable_open( inode, file );' */ ]
[ 2326.807514] [ INFO: 'snd_pcm_playback_open()' : #2535 : /* Invoke 'snd_lookup_minor_data( inode, file );' */ ]
[ 2326.818297] [ INFO: 'snd_pcm_playback_open()' : #2539 : /* Invoke 'snd_pcm_open( inode, file );' */ ]
[ 2326.828332] [ 'pcm_native.c' #2567 : ==> Entering the function snd_pcm_open(); ]
[ 2326.837162] [ INFO: 'snd_pcm_open()' : #2577 : /* Invoke 'snd_card_file_add( pcm->card, file );' */ ]
[ 2326.848043] [ INFO: 'snd_pcm_open()' : #2597 : /* Invoke 'snd_pcm_open_file( file, pcm, stream );' */ ]
[ 2326.858221] [ 'pcm_native.c', #2488 : ==> Entering the function 'snd_pcm_open_file()' ]
[ 2326.866661] [ INFO: 'snd_pcm_open_file()' : #2494 : /* Invoke 'snd_pcm_open_substream( pcm, stream, file, &substream );' */ ]
[ 2326.879914] [ 'pcm_native.c', #2428 : ==> Entering the function 'snd_pcm_open_substream()' ]
[ 2326.889674] [ INFO: 'snd_pcm_open_substream()' : #2433 : /* Invoke 'snd_pcm_attach_substream( pcm, stream, file, &substream );' */ ]
[ 2326.902536] [ INFO: 'snd_pcm_open_substream()' : #2448 : /* Invoke 'snd_pcm_hw_constraints_init( substream );' */ ]
[ 2326.913891] [ 'soc-pcm.c', #454 : ==> Entering the function 'soc_pcm_open()' ]
[ 2326.922565] [ 'davinci-mcasp.c', #1930 : ==> Entering the function 'davinci_mcasp_startup()' ]
[ 2326.932245] [ INFO: 'davinci_mcasp_startup()', #1950 : /* tdm_slots = mcasp->tdm_slots ==> 2 */ ]
[ 2326.942055] [ INFO: 'davinci_mcasp_startup()', #1977 : /* ruledata->serializers ==> 4, max_channels ==> 8 */ ]
[ 2326.953197] [ INFO: 'davinci_mcasp_startup()', #1999 : /* max_channels ==> 8 */ ]
[ 2326.961717] [ INFO: 'davinci_mcasp_startup()', #2002 : /* Invole 'snd_pcm_hw_constraint_minmax( ,SNDRV_PCM_HW_PARAM_CHANNELS, 2, max_channels );' */ ]
[ 2326.977145] [ INFO: 'davinci_mcasp_startup()', #2008 : /* Invole 'snd_pcm_hw_constraint_list( 0, SNDRV_PCM_HW_PARAM_CHANNELS, &mcasp->chconstr[substream->stream] );' */ ]
[ 2326.993832] [ 'davinci-mcasp.c', #2059 : <== Exitting the function 'davinci_mcasp_startup()' : return( 0 ) ]
[ 2327.004162] [ 'soc-generic-dmaengine-pcm.c', #248 : ==> Entering the function 'dmaengine_pcm_open()' ]
[ 2327.013854] [ INFO: 'dmaengine_pcm_open()', #255 : /* Invoke 'dmaengine_pcm_set_runtime_hwparams( substream )' */ ]
[ 2327.024885] [ 'soc-generic-dmaengine-pcm.c', #132 : ==> Entering the function 'dmaengine_pcm_set_runtime_hwparams()' ]
[ 2327.036046] [ 'soc-generic-dmaengine-pcm.c', #149 : <== Exitting the function 'dmaengine_pcm_set_runtime_hwparams()' : return( 'snd_soc_set_runtime_hwparams( substream, pcm->config->pcm_hardware );' ) ]
[ 2327.054887] [ 'soc-generic-dmaengine-pcm.c', #263 : <== Exitting the function 'dmaengine_pcm_open()' : return( 'snd_dmaengine_pcm_open( substream, chan );' ) ]
[ 2327.069837] [ INFO: 'soc_pcm_open()', #543 : soc_pcm_has_symmetry( substream ) ==> 'TRUE' ]
[ 2327.078815] [ INFO: 'soc_pcm_open()', #566 : Invoke 'soc_pcm_apply_msb( substream )' ]
[ 2327.087236] [ INFO: 'soc_pcm_open()', #588 : ASoC: codec dai name: 'botic-hifi' <----> cpu dai name:'48038000.mcasp' ]
[ 2327.098735] [ INFO: 'soc_pcm_open()', #591 : ASoC: rate mask 0x40000000 ]
[ 2327.106068] [ INFO: 'soc_pcm_open()', #594 : ASoC: min ch 2, max ch 8 ]
[ 2327.113316] [ INFO: 'soc_pcm_open()', #597 : ASoC: min rate 11025, max rate 768000 ]
[ 2327.121741] [ INFO: 'soc_pcm_open()', #601 : Invoke 'snd_soc_runtime_activate( rtd, substream->stream )' ]
[ 2327.132070] [ 'soc-pcm.c', #607 : <== Exitting the function 'soc_pcm_open()' : return( 0 ) ]
[ 2327.140947] [ INFO: 'snd_pcm_open_substream()' : #2461 : /* Invoke 'snd_pcm_hw_constraints_complete( substream );' */ ]
[ 2327.152543] [ 'pcm_native.c', #2470 : <== Exitting the function 'snd_pcm_open_substream()' : return( 0 ) ]
[ 2327.162598] [ 'pcm_native.c', #2515 : <== Exitting the function 'snd_pcm_open_file()' : return( 0 ) ]
[ 2327.172293] [ 'pcm_native.c' #2636 : ===> Exiting the function 'snd_pcm_open()' : return( err ==> 0 ) ]
[ 2327.182168] [ 'pcm_native.c', #2545 : <== Exitting the function 'snd_pcm_playback_open()' : return( err ==> 0 ) ]
[ 2327.193872] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.202190] [ 'pcm_native.c', #2077 : ==> Entering the function 'snd_pcm_hw_rule_format()' ]
[ 2327.210983] [ 'pcm_native.c', #2098 : <== Exitting the function 'snd_pcm_hw_rule_format()' : return( 'snd_mask_refine( mask, &m );' ) ]
[ 2327.223747] [ 'pcm_native.c', #2106 : ==> Entering the function 'snd_pcm_hw_rule_sample_bits()' ]
[ 2327.232991] [ 'pcm_native.c', #2136 : <== Exitting the function 'snd_pcm_hw_rule_sample_bits()' : return( 'snd_interval_refine( params, rule->var),
&t );' ) ]
[ 2327.247859] [ 'pcm_native.c', #2077 : ==> Entering the function 'snd_pcm_hw_rule_format()' ]
[ 2327.256783] [ 'pcm_native.c', #2098 : <== Exitting the function 'snd_pcm_hw_rule_format()' : return( 'snd_mask_refine( mask, &m );' ) ]
[ 2327.269572] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.279130] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.287370] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.296844] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.305095] [ 'pcm_native.c', #2106 : ==> Entering the function 'snd_pcm_hw_rule_sample_bits()' ]
[ 2327.314342] [ 'pcm_native.c', #2136 : <== Exitting the function 'snd_pcm_hw_rule_sample_bits()' : return( 'snd_interval_refine( params, rule->var),
&t );' ) ]
[ 2327.329195] [ 'pcm_native.c', #2077 : ==> Entering the function 'snd_pcm_hw_rule_format()' ]
[ 2327.337976] [ 'pcm_native.c', #2098 : <== Exitting the function 'snd_pcm_hw_rule_format()' : return( 'snd_mask_refine( mask, &m );' ) ]
[ 2327.350746] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.360496] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.368793] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.378325] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.386597] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.396063] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.404324] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.413756] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.422006] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.431686] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.439958] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.449394] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.457644] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.467096] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.475353] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.484913] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.493184] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.502665] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.510919] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.520481] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.528756] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.538179] [ 'pcm_native.c', #534 : ==> Entering the function 'snd_pcm_hw_params()' ]
[ 2327.546428] [ INFO: 'snd_pcm_hw_params()', $574 : Invoke snd_pcm_hw_refine( substream, params ); ]
[ 2327.555850] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 2327.564095] [ 'pcm_native.c', #2077 : ==> Entering the function 'snd_pcm_hw_rule_format()' ]
[ 2327.572922] [ 'pcm_native.c', #2098 : <== Exitting the function 'snd_pcm_hw_rule_format()' : return( 'snd_mask_refine( mask, &m );' ) ]
[ 2327.585695] [ 'pcm_native.c', #2106 : ==> Entering the function 'snd_pcm_hw_rule_sample_bits()' ]
[ 2327.594939] [ 'pcm_native.c', #2136 : <== Exitting the function 'snd_pcm_hw_rule_sample_bits()' : return( 'snd_interval_refine( params, rule->var),
&t );' ) ]
[ 2327.609801] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 2327.619223] [ INFO: 'snd_pcm_hw_params()', $581 : Invoke snd_pcm_hw_params_choose( substream, params ); ]
[ 2327.629287] [ 'soc-pcm.c', #907 : ==> Entering the function 'soc_pcm_hw_params()' ]
[ 2327.637251] [ INFO: 'soc_pcm_hw_params()', #916 : Invoke 'soc_pcm_params_symmetry( substream, params )' ]
[ 2327.647400] [ 'botic-card.c', #189 : ==> Entering the function 'botic_hw_params()'; ]
[ 2327.655553] [ INFO: 'botic_hw_params()', #201 : /* format ==> SNDRV_PCM_FORMAT_S24_LE : (6) */ ]
[ 2327.664973] [ INFO: 'botic_hw_params()', #203 : /* rate ==> 192000 */ ]
[ 2327.671861] [ INFO: 'botic_hw_params()', #206 : /* Invoke the function 'botic_setup_serializers( cpu_dai, format, &ser_setup )' */ ]
[ 2327.684357] [ 'botic-card.c', #94 : ==> Entering the function 'botic_setup_serializers()'; ]
[ 2327.693160] [ 'botic-card.c', #95 : ( args : snd_pcm_format_t format ==> SNDRV_PCM_FORMAT_S24_LE : (6) ) ]
[ 2327.703755] [ INFO: 'botic_setup_serializers()', #103 : /* User's Botic Serializer Setting ==> 'MMII' */ ]
[ 2327.713810] [ INFO: 'botic_setup_serializers()', #155 : /* Invoke the function 'snd_soc_dai_set_channel_map()' */ ]
[ 2327.724676] [ 'soc-core.c', #2813 : ==> Entering the function 'snd_soc_dai_set_channel_map()'; ]
[ 2327.733918] [ 'soc-core.c', #2817 : <== Exiting the function 'snd_soc_dai_set_channel_map()' and Return( 'dai->driver->ops->set_channel_map( dai,
tx_num, tx_slot, rx_num, rx_slot )' ); ]
[ 2327.751659] [ 'davinci-mcasp.c', #1841 : ==> Entering the function 'davinci_mcasp_set_channel_map()' ]
[ 2327.761351] [ 'davinci-mcasp.c', #1842 : ( args : unsigned int tx_num ==> 4 , unsigned int rx_num ==> 0 ) ]
[ 2327.771852] [ INFO: 'davinci_mcasp_set_channel_map()', #1850 : /* unsigned int *tx_slot */]
[ 2327.780916] [ INFO: 'davinci_mcasp_set_channel_map()', #1851 : /* tx_slot[0] ==> 0 */]
[ 2327.789609] [ INFO: 'davinci_mcasp_set_channel_map()', #1852 : /* tx_slot[1] ==> 1 */]
[ 2327.798297] [ INFO: 'davinci_mcasp_set_channel_map()', #1853 : /* tx_slot[2] ==> 2 */]
[ 2327.806996] [ INFO: 'davinci_mcasp_set_channel_map()', #1854 : /* tx_slot[3] ==> 3 */]
[ 2327.815692] [ INFO: davinci_mcasp_set_channel_map() : #1893 : for ( slot = 0; slot < mcasp->num_serializer; slot++ ) : mcasp->num_serializer ==> 4 ]
[ 2327.829991] [ INFO: davinci_mcasp_set_channel_map() : #1899 : /* for ( chan = 0; chan < tx_num; chan++ ) */ tx_num ==> 4 ]
[ 2327.841943] [ INFO: davinci_mcasp_set_channel_map() : #1903 : /* slot = tx_slot[chan]; */ chan ==> 0, slot ==> 0 ]
[ 2327.853173] [ INFO: davinci_mcasp_set_channel_map() : #1906 : /* if ( slot < mcasp->num_serializer ) ==> TRUE */ mcasp->serial_dir[slot] = TX_MODE; ]
[ 2327.867746] [ INFO: davinci_mcasp_set_channel_map() : #1903 : /* slot = tx_slot[chan]; */ chan ==> 1, slot ==> 1 ]
[ 2327.878975] [ INFO: davinci_mcasp_set_channel_map() : #1906 : /* if ( slot < mcasp->num_serializer ) ==> TRUE */ mcasp->serial_dir[slot] = TX_MODE; ]
[ 2327.893545] [ INFO: davinci_mcasp_set_channel_map() : #1903 : /* slot = tx_slot[chan]; */ chan ==> 2, slot ==> 2 ]
[ 2327.904770] [ INFO: davinci_mcasp_set_channel_map() : #1906 : /* if ( slot < mcasp->num_serializer ) ==> TRUE */ mcasp->serial_dir[slot] = TX_MODE; ]
[ 2327.919343] [ INFO: davinci_mcasp_set_channel_map() : #1903 : /* slot = tx_slot[chan]; */ chan ==> 3, slot ==> 3 ]
[ 2327.930574] [ INFO: davinci_mcasp_set_channel_map() : #1906 : /* if ( slot < mcasp->num_serializer ) ==> TRUE */ mcasp->serial_dir[slot] = TX_MODE; ]
[ 2327.945186] [ 'davinci-mcasp.c', #1919 : <== Exitting the function 'davinci_mcasp_set_channel_map()' : return( 0 ) ]
[ 2327.956239] [ 'botic-card.c', $178 : ==> Exiting the function 'botic_setup_serializers()' : Return ( 0 ) ]
[ 2327.966292] [ INFO: 'botic_hw_params()', #214 : /* Invoke the function 'snd_soc_dai_set_fmt( codec_dai, ser_setup.dai_fmt )' : set CODEC DAI configs
*/ ]
[ 2327.980595] [ 'soc-core.c', #2701 : ==> Entering the function 'snd_soc_dai_set_fmt()'; ]
[ 2327.989114] [ 'soc-core.c', #2702 : ( args : unsigned int fmt ==> 16385 ) ]
[ 2327.996811] [ 'soc-core.c', #2709 : <== Exiting the function 'snd_soc_dai_set_fmt()' : return ( -ENOTSUPP ) ]
[ 2328.007228] [ INFO: 'botic_hw_params()', #222 : /* Invoke the function 'snd_soc_dai_set_fmt()' : set CPU DAI configs */ ]
[ 2328.018638] [ 'soc-core.c', #2701 : ==> Entering the function 'snd_soc_dai_set_fmt()'; ]
[ 2328.027158] [ 'soc-core.c', #2702 : ( args : unsigned int fmt ==> 16385 ) ]
[ 2328.034858] [ 'soc-core.c', #2713 : <== Exiting the function 'snd_soc_dai_set_fmt()' and Return( 'dai->driver->ops->set_fmt( dai, fmt )' ); ]
[ 2328.048528] [ 'davinci-mcasp.c', #430 : ==> Entering the function 'davinci_mcasp_set_dai_fmt()' ]
[ 2328.057773] [ 'davinci-mcasp.c', #431 : args( unsigned int fmt ==> 16385 ) ]
[ 2328.065659] [ INFO: davinci_mcasp_set_dai_fmt() : #463 : switch ( fmt & SND_SOC_DAIFMT_FORMAT_MASK ) (==>1) ]
[ 2328.076346] [ INFO: davinci_mcasp_set_dai_fmt() : #485 : ==> case SND_SOC_DAIFMT_I2S ]
[ 2328.084952] [ INFO: davinci_mcasp_set_dai_fmt() : #521 : switch ( fmt & SND_SOC_DAIFMT_MASTER_MASK ) (==>16384) ]
[ 2328.095996] [ INFO: davinci_mcasp_set_dai_fmt() : #527 : ==> case SND_SOC_DAIFMT_CBS_CFS : /* codec is clock and frame slave */ ]
[ 2328.108533] [ INFO: davinci_mcasp_set_dai_fmt() : #583 : switch ( fmt & SND_SOC_DAIFMT_INV_MASK ) (==>0) ]
[ 2328.118953] [ INFO: davinci_mcasp_set_dai_fmt() : #609 : ==> case SND_SOC_DAIFMT_NB_NF /* fs_pol_rising ==> true */ ]
[ 2328.130362] [ INFO: davinci_mcasp_set_dai_fmt() : #625 : Frame Sync Polarity ==> [ 'FS Polarity is FALLING' ]
[ 2328.141049] [ 'davinci-mcasp.c', #640 : <== Exitting the function 'davinci_mcasp_set_dai_fmt()' return( ret ==> 0 ) ]
[ 2328.152097] [ INFO: 'botic_hw_params()', #246 : /* sampling rates ==> '48k series' */ ]
[ 2328.160431] [ INFO: 'botic_hw_params()', #249 : /* External Master Clock SW is 'ON' ==> set 48k SW to 'HIGH' */ ]
[ 2328.171212] [ INFO: 'botic_hw_params()', #283 : /* DSD Playback Mode is 'OFF' (PCM Playback Mode is 'ON') */ ]
[ 2328.181718] [ INFO: 'botic_hw_params()', #289 : /* Invoke the function 'snd_soc_dai_set_sysclk()' : set CODEC system clock */ ]
[ 2328.193856] [ 'soc-core.c', #2550 : ==> Entering the function 'snd_soc_dai_set_sysclk()'; ]
[ 2328.202643] [ 'soc-core.c', #2565 : <== Exiting the function 'snd_soc_dai_set_sysclk()' : return ( -ENOTSUPP ) ]
[ 2328.213329] [ INFO: 'botic_hw_params()', #297 : /* Invoke the function 'snd_soc_dai_set_sysclk()' : set CPU system clock */ ]
[ 2328.225277] [ 'soc-core.c', #2550 : ==> Entering the function 'snd_soc_dai_set_sysclk()'; ]
[ 2328.234062] [ 'soc-core.c', #2554 : <== Exiting the function 'snd_soc_dai_set_sysclk()' and Return( dai->driver->ops->set_sysclk( dai, clk_id, freq, dir ); ); ]
[ 2328.249362] [ 'davinci-mcasp.c', #751 : ==> Entering the function 'davinci_mcasp_set_sysclk()' ]
[ 2328.258502] [ 'davinci-mcasp.c', #771 : <== Exitting the function 'davinci_mcasp_set_sysclk()' : return( 0 ) ]
[ 2328.269011] [ INFO: 'botic_hw_params()', #305 : /* Invoke the function 'snd_soc_dai_set_clkdiv( cpu_dai, 0, 1 )' */ ]
[ 2328.280146] [ 'soc-core.c', #2610 : ==> Entering the function 'snd_soc_dai_set_clkdiv()'; ]
[ 2328.288935] [ 'soc-core.c', #2614 : <== Exiting the function 'snd_soc_dai_set_clkdiv()' and Return( dai->driver->ops->set_clkdiv(dai, div_id, div) ); ]
[ 2328.303419] [ 'davinci-mcasp.c', #648 : ==> Entering the function '__davinci_mcasp_set_clkdiv()' ]
[ 2328.312752] [ 'davinci-mcasp.c', #649 : args( div_id ==> 0, div ==> 1, bool explicit ==> 1 ) ]
[ 2328.322264] [ INFO: davinci_mcasp_set_dai_fmt() : #655 : switch ( div_id ) (==>0) ]
[ 2328.330510] [ INFO: __davinci_mcasp_set_clkdiv() : #660 : ==> case MCASP_CLKDIV_AUXCLK /* MCLK divider */ ]
[ 2328.341022] [ 'davinci-mcasp.c', #733 : <== Exitting the function '__davinci_mcasp_set_clkdiv()' : return( ret ==> 0 ) ]
[ 2328.352430] [ INFO: 'botic_hw_params()', #352 : /* Format ==> 'PCM : SNDRV_PCM_FORMAT_S24_LE : (6) ' : Invoke 'snd_soc_dai_set_clkdiv( cpu_dai, 2,
blr_ratio );' blr_ratio ==> 64 */ ]
[ 2328.369715] [ 'soc-core.c', #2610 : ==> Entering the function 'snd_soc_dai_set_clkdiv()'; ]
[ 2328.378496] [ 'soc-core.c', #2614 : <== Exiting the function 'snd_soc_dai_set_clkdiv()' and Return( dai->driver->ops->set_clkdiv(dai, div_id, div) ); ]
[ 2328.392978] [ 'davinci-mcasp.c', #648 : ==> Entering the function '__davinci_mcasp_set_clkdiv()' ]
[ 2328.402311] [ 'davinci-mcasp.c', #649 : args( div_id ==> 2, div ==> 64, bool explicit ==> 1 ) ]
[ 2328.411909] [ INFO: davinci_mcasp_set_dai_fmt() : #655 : switch ( div_id ) (==>2) ]
[ 2328.420154] [ INFO: __davinci_mcasp_set_clkdiv() : #690 : ==> case MCASP_CLKDIV_BCLK_FS_RATIO /* BCLK/LRCLK ratio */ ]
[ 2328.431751] [ 'davinci-mcasp.c', #733 : <== Exitting the function '__davinci_mcasp_set_clkdiv()' : return( ret ==> 0 ) ]
[ 2328.443159] [ INFO: 'botic_hw_params()', #359 : /* BCLK rate ==> 12288000 */ ]
[ 2328.450864] [ INFO: 'botic_hw_params()', #371 : /* divisor = ( sysclk + (bclk / 2) ) / bclk; ==> 4 : Invoke 'snd_soc_dai_set_clkdiv( cpu_dai, 1, divisor );' */ ]
[ 2328.465982] [ 'soc-core.c', #2610 : ==> Entering the function 'snd_soc_dai_set_clkdiv()'; ]
[ 2328.474770] [ 'soc-core.c', #2614 : <== Exiting the function 'snd_soc_dai_set_clkdiv()' and Return( dai->driver->ops->set_clkdiv(dai, div_id, div) ); ]
[ 2328.489253] [ 'davinci-mcasp.c', #648 : ==> Entering the function '__davinci_mcasp_set_clkdiv()' ]
[ 2328.498578] [ 'davinci-mcasp.c', #649 : args( div_id ==> 1, div ==> 4, bool explicit ==> 1 ) ]
[ 2328.508090] [ INFO: davinci_mcasp_set_dai_fmt() : #655 : switch ( div_id ) (==>1) ]
[ 2328.516332] [ INFO: __davinci_mcasp_set_clkdiv() : #668 : ==> case MCASP_CLKDIV_BCLK /* BCLK divider */ ]
[ 2328.526657] [ 'davinci-mcasp.c', #733 : <== Exitting the function '__davinci_mcasp_set_clkdiv()' : return( ret ==> 0 ) ]
[ 2328.538117] [ 'botic-card.c', #383 : ===> Exiting the function 'botic_hw_params()' : ( Return : 0 ) ]
[ 2328.547720] [ INFO: 'soc_pcm_hw_params()', #962 : Invoke 'soc_dai_hw_params( substream, &codec_params, codec_dai )' ]
[ 2328.558951] [ 'soc-pcm.c', #880 : ==> Entering the function 'soc_dai_hw_params()' ]
[ 2328.566918] [ 'soc-pcm.c', #892 : <== Exitting the function 'soc_dai_hw_params()' : return( 0 ) ]
[ 2328.576248] [ INFO: 'soc_pcm_hw_params()', #972 : codec_dai->rate = params_rate( &codec_params ); ==> 192000 ]
[ 2328.586939] [ INFO: 'soc_pcm_hw_params()', #973 : codec_dai->channels = params_channels( &codec_params ); ==> 6 ]
[ 2328.597897] [ INFO: 'soc_pcm_hw_params()', #974 : codec_dai->sample_bits = snd_pcm_format_physical_width( params_format(&codec_params) ); ==> 32 ]
[ 2328.611840] [ INFO: 'soc_pcm_hw_params()', #979 : Invoke 'soc_dai_hw_params( substream, params, cpu_dai )' ]
[ 2328.622252] [ 'soc-pcm.c', #880 : ==> Entering the function 'soc_dai_hw_params()' ]
[ 2328.630227] [ 'davinci-mcasp.c', #1555 : ==> Entering the function 'davinci_mcasp_hw_params()' ]
[ 2328.639380] [ INFO: davinci_mcasp_hw_params() : #1570 : /* channels = params_channels( params ); ==> 6, */ ]
[ 2328.650159] [ INFO: davinci_mcasp_hw_params() : #1571 : /* period_size = params_period_size( params ); ==> 7200, */ ]
[ 2328.661752] [ INFO: davinci_mcasp_hw_params() : #1582 : /* Invole 'davinci_mcasp_set_dai_fmt( cpu_dai, mcasp->dai_fmt )' */ mcasp->dai_fmt ==> (16385) ]
[ 2328.676592] [ 'davinci-mcasp.c', #430 : ==> Entering the function 'davinci_mcasp_set_dai_fmt()' ]
[ 2328.685834] [ 'davinci-mcasp.c', #431 : args( unsigned int fmt ==> 16385 ) ]
[ 2328.693717] [ INFO: davinci_mcasp_set_dai_fmt() : #463 : switch ( fmt & SND_SOC_DAIFMT_FORMAT_MASK ) (==>1) ]
[ 2328.704402] [ INFO: davinci_mcasp_set_dai_fmt() : #485 : ==> case SND_SOC_DAIFMT_I2S ]
[ 2328.713008] [ INFO: davinci_mcasp_set_dai_fmt() : #521 : switch ( fmt & SND_SOC_DAIFMT_MASTER_MASK ) (==>16384) ]
[ 2328.724054] [ INFO: davinci_mcasp_set_dai_fmt() : #527 : ==> case SND_SOC_DAIFMT_CBS_CFS : /* codec is clock and frame slave */ ]
[ 2328.736551] [ INFO: davinci_mcasp_set_dai_fmt() : #583 : switch ( fmt & SND_SOC_DAIFMT_INV_MASK ) (==>0) ]
[ 2328.746965] [ INFO: davinci_mcasp_set_dai_fmt() : #609 : ==> case SND_SOC_DAIFMT_NB_NF /* fs_pol_rising ==> true */ ]
[ 2328.758374] [ INFO: davinci_mcasp_set_dai_fmt() : #625 : Frame Sync Polarity ==> [ 'FS Polarity is FALLING' ]
[ 2328.769061] [ 'davinci-mcasp.c', #640 : <== Exitting the function 'davinci_mcasp_set_dai_fmt()' return( ret ==> 0 ) ]
[ 2328.780110] [ INFO: davinci_mcasp_hw_params() : #1612 : /* Invole 'mcasp_common_hw_param( mcasp, substream->stream, period_size * channels, channels, dsd_mode )' */ ]
[ 2328.796219] [ 'davinci-mcasp.c', #1016 : ==> Entering the function 'mcasp_common_hw_param()' ]
[ 2328.805188] [ 'davinci-mcasp.c', #1018 : args( int period_words ==> 43200, int channels ==> 6, bool dsd_mode ==> 0 ) ]
[ 2328.816867] [ INFO: 'mcasp_common_hw_param()', #1025 : ================================================================================ ]
[ 2328.829818] [ INFO: 'mcasp_common_hw_param()', #1026 : Sound Playback Channels : PCM 6 channel ]
[ 2328.842766] [ INFO: 'mcasp_common_hw_param()', #1028 : ================================================================================ ]
[ 2328.855713] [ INFO: mcasp_common_hw_param() : #1041 : max_active_serializers ==> 3 ]
[ 2328.864141] [ INFO: mcasp_common_hw_param() : #1069 : disable_pins ==> 0 ]
[ 2328.871820] [ INFO: 'mcasp_common_hw_param()', #1091 : /* for ( i = 0; i < mcasp->num_serializer; i++ ); mcasp->num_serializer ==> 4 ]
[ 2328.884785] [ INFO: 'mcasp_common_hw_param()', #1138 : /* ===== if ( stream == SNDRV_PCM_STREAM_PLAYBACK ) ==> TRUE ===== */ ]
[ 2328.897374] [ INFO: 'mcasp_common_hw_param()', #1144 : /* ===== active_serializers = tx_ser ==> 3 ===== */ ]
[ 2328.908604] [ INFO: 'mcasp_common_hw_param()', #1145 : /* ===== numevt = mcasp->txnumevt; ==> 16 ===== */ ]
[ 2328.919744] [ INFO: 'mcasp_common_hw_param()', #1146 : /* ===== reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET; ==> 4096 (0x1000) ===== */
]
[ 2328.933869] [ INFO: 'mcasp_common_hw_param()', #1214 : /* ===== numevt = (numevt / active_serializers) * active_serializers; ==> 15 ===== */ ]
[ 2328.948176] [ INFO: 'mcasp_common_hw_param()', #1215 : /* ===== period_words; ==> 43200 ===== */ ]
[ 2328.958508] [ INFO: 'mcasp_common_hw_param()', #1227 : /* ===== OUT while () loop ===== numevt ==> 15 ===== */ ]
[ 2328.970374] [ INFO: 'mcasp_common_hw_param()', #1239 : /* ===== dma_data->maxburst = numevt; ==> 15 ===== */ ]
[ 2328.981692] [ 'davinci-mcasp.c', #1241 : <== Exitting the function 'mcasp_common_hw_param()' : return( 0 ) ]
[ 2328.992015] [ INFO: davinci_mcasp_hw_params() : #1625 : /* Invole 'mcasp_i2s_hw_param( mcasp, substream->stream, channels, dsd_mode )' */ ]
[ 2329.005684] [ 'davinci-mcasp.c', #1258 : ==> Entering the function 'mcasp_i2s_hw_param()' ]
[ 2329.014381] [ 'davinci-mcasp.c', #1260 : args( int channels ==> 6, bool dsd_mode ==> 0 ) ]
[ 2329.023532] [ INFO: mcasp_i2s_hw_param() : #1275 : total_slots = mcasp->tdm_slots ==> 2 ]
[ 2329.032409] [ INFO: mcasp_i2s_hw_param() : #1305 : /* if ( mcasp->tdm_mask[stream] ) ==> FALSE */ ]
[ 2329.043276] [ INFO: mcasp_i2s_hw_param() : #1309 : active_serializers = (channels + total_slots - 1) / total_slots ==> 3 ]
[ 2329.055502] [ INFO: mcasp_i2s_hw_param() : #1321 : /* if ( active_serializers == 1 ) ==> FALSE : active_slots = total_slots; ==> 2 */ ]
[ 2329.068813] [ INFO: mcasp_i2s_hw_param() : #1329 : /* mask ==> 3 (0x3) */ ]
[ 2329.076690] [ 'davinci-mcasp.c', #1378 : <== Exitting the function 'mcasp_i2s_hw_param()' : return( 0 ) ]
[ 2329.086747] [ INFO: davinci_mcasp_hw_params() : #1634 : /* params_format(params) ==> 'SNDRV_PCM_FORMAT_S24_LE : (6)' , */ ]
[ 2329.099158] [ INFO: davinci_mcasp_hw_params() : #1684 : /* Invole 'davinci_config_channel_size( mcasp, word_length );' word_length ==> 24 */ ]
[ 2329.113188] [ 'davinci-mcasp.c', #915 : ==> Entering the function 'davinci_config_channel_size()' ]
[ 2329.122611] [ 'davinci-mcasp.c', #916 : args( int sample_width ==> 24 ) ]
[ 2329.130136] [ INFO: davinci_config_channel_size() : #923 : tx_rotate = (sample_width / 4) & 0x7; ==> 6 ]
[ 2329.140460] [ INFO: davinci_config_channel_size() : #924 : mask = (1ULL << sample_width) - 1; ==> 16777215 ]
[ 2329.151144] [ INFO: davinci_config_channel_size() : #925 : slot_width = sample_width; ==> 24 ]
[ 2329.160568] [ INFO: davinci_config_channel_size() : #957 : lot_width = sample_width;1; ==> 24 ]
[ 2329.170077] [ INFO: davinci_config_channel_size() : #961 : /* if ( mcasp->slot_width ) ==> TRUE mcasp->slot_width ==> 32 */ ]
[ 2329.182663] [ INFO: davinci_config_channel_size() : #971 : /* slot_width = mcasp->slot_width; ==> 32 */ ]
[ 2329.193166] [ INFO: davinci_config_channel_size() : #972 : /* rx_rotate = (slot_width - sample_width) / 4; ==> 2 */ ]
[ 2329.204754] [ INFO: davinci_config_channel_size() : #979 : /* mapping of the XSSZ bit-field : fmt = ( slot_width >> 1 ) - 1; ==> 15 */ ]
[ 2329.218157] [ INFO: davinci_config_channel_size() : #991 : tx_rotate ==> 6 ]
[ 2329.225953] [ 'davinci-mcasp.c', #1001 : <== Exitting the function 'davinci_config_channel_size()' : return( 0 ) ]
[ 2329.236821] [ INFO: davinci_mcasp_hw_params() : #1691 : /* mcasp->channels = channels ==> 6 */ ]
[ 2329.246517] [ 'davinci-mcasp.c', #1693 : <== Exitting the function 'davinci_mcasp_hw_params()' : return( 0 ) ]
[ 2329.257020] [ 'soc-pcm.c', #892 : <== Exitting the function 'soc_dai_hw_params()' : return( 0 ) ]
[ 2329.266350] [ 'soc-generic-dmaengine-pcm.c', #95 : ==> Entering the function 'dmaengine_pcm_hw_params()' ]
[ 2329.276406] [ 'soc-generic-dmaengine-pcm.c', #123 : <== Exitting the function 'dmaengine_pcm_hw_params()' : return( 'snd_pcm_lib_malloc_pages( substream, params_buffer_bytes(params) );' ) ]
[ 2329.294059] [ INFO: 'soc_pcm_hw_params()', #998 : cpu_dai->rate = params_rate( params ); ==> 192000 ]
[ 2329.303937] [ INFO: 'soc_pcm_hw_params()', #999 : cpu_dai->channels = params_channels( params ); ==> 6 ]
[ 2329.314079] [ INFO: 'soc_pcm_hw_params()', #1000 : cpu_dai->sample_bits = snd_pcm_format_physical_width( params_format(params) ); ==> 32 ]
[ 2329.327298] [ 'soc-pcm.c', #1005 : <== Exitting the function 'soc_pcm_hw_params()' : return( ret ==> 1 ) ]
[ 2329.337444] [ INFO: 'snd_pcm_hw_params()', #610 : /* runtime->format ==> 6, runtime->subformat ==> 0 ]
[ 2329.347407] [ INFO: 'snd_pcm_hw_params()', #611 : /* runtime->channels ==> 6, runtime->rate ==> 192000 ]
[ 2329.357556] [ INFO: 'snd_pcm_hw_params()', #612 : /* runtime->period_size ==> 7200, runtime->periods ==> 4 ]
[ 2329.368059] [ INFO: 'snd_pcm_hw_params()', #613 : /* runtime->buffer_size ==> 28800 ]
[ 2329.376483] [ INFO: 'snd_pcm_hw_params()', #617 : /* bits = snd_pcm_format_physical_width( runtime->format ); ==> 32 ]
[ 2329.387890] [ INFO: 'snd_pcm_hw_params()', #619 : /* ENDIAN : ==> 'Little Endian' ]
[ 2329.396226] [ INFO: 'snd_pcm_hw_params()', #620 : /* SIGNED/UNSIGNED : ==> 'Signed' ]
[ 2329.404742] [ INFO: 'snd_pcm_hw_params()', #634 : /* runtime->byte_align ==> 24, runtime->min_align ==> 1 ]
[ 2329.415175] [ 'pcm_native.c', #662 : <== Exitting the function 'snd_pcm_hw_params()' : return( 0 ) ]
[ 2329.425157] [ 'pcm_native.c', #1643 : ==> Entering the function 'snd_pcm_prepare()' ]
[ 2329.433339] [ 'soc-pcm.c', #786 : ==> Entering the function 'soc_pcm_prepare()' ]
[ 2329.441139] [ INFO: 'soc_pcm_prepare()', #844 : Invoke 'snd_soc_dai_digital_mute( cpu_dai, 1, substream->stream )' ]
[ 2329.455341] [ 'soc-core.c', #2855 : ==> Entering the function 'snd_soc_dai_digital_mute()'; ]
[ 2329.464401] [ 'soc-core.c', #2876 : <== Exiting the function 'snd_soc_dai_digital_mute()' : return ( -ENOTSUPP ) ]
[ 2329.475277] [ 'soc-core.c', #2855 : ==> Entering the function 'snd_soc_dai_digital_mute()'; ]
[ 2329.484249] [ 'soc-core.c', #2864 : <== Exiting the function 'snd_soc_dai_digital_mute()' and Return( 'dai->driver->ops->mute_stream( dai, mute, direction )' ); ]
[ 2329.499827] [ 'davinci-mcasp.c', #2092 : ==> Entering the function 'davinci_mcasp_mute_stream()' ]
[ 2329.509159] [ 'davinci-mcasp.c', #2094 : args( int mute ==> 0, int stream ==> 0 ) ]
[ 2329.517935] [ INFO: davinci_mcasp_mute_stream() : #2098 : /* mute_pin ==> -1 /* ]
[ 2329.526496] [ 'davinci-mcasp.c', #2116 : <== Exitting the function 'davinci_mcasp_mute_stream()' : return( 0 ) ]
[ 2329.537199] [ 'soc-pcm.c', #857 : <== Exitting the function 'soc_pcm_prepare()' : return( ret ==> 0 ) ]
[ 2329.547086] [ 'pcm_native.c', #1662 : <== Exitting the function 'snd_pcm_prepare()' : return ( res ==> 0 ) ]
[ 2329.567423] [ 'pcm_native.c', #1168 : ==> Entering the function 'snd_pcm_start()' ]
[ 2329.575413] [ 'pcm_native.c', #1170 : ===> Exiting the function snd_pcm_start() : Return : 'snd_pcm_action( &snd_pcm_action_start, substream, SNDRV_PCM_STATE_RUNNING );' ' ]
[ 2329.591521] [ 'soc-pcm.c', #1105 : ==> Entering the function 'soc_pcm_trigger()' ]
[ 2329.599426] [ 'davinci-mcasp.c', #1703 : ==> Entering the function 'davinci_mcasp_trigger()' ]
[ 2329.608388] [ 'davinci-mcasp.c', #227 : ==> Entering the function mcasp_start_tx(); ]
[ 2329.616537] [ INFO: mcasp_start_tx() : #231 : mcasp->txnumevt ==> 16 ]
[ 2329.623963] [ 'davinci-mcasp.c', #262 : <== Exiting the function mcasp_start_tx(); return ( VOID ) ]
[ 2329.633464] [ 'davinci-mcasp.c', #1727 : <== Exitting the function 'davinci_mcasp_trigger()' : return( ret ==> 0 )]
[ 2329.644327] [ 'soc-pcm.c', #1141 : <== Exitting the function 'soc_pcm_trigger()' : return( 0 ) ]
(ここから実際の曲の再生が始まる)
...
(再生終了)
[ 2349.612503] [ 'pcm_native.c', #1189 : ==> Entering the function 'snd_pcm_do_stop()' ]
[ 2349.620678] [ 'soc-pcm.c', #1105 : ==> Entering the function 'soc_pcm_trigger()' ]
[ 2349.628564] [ 'davinci-mcasp.c', #1703 : ==> Entering the function 'davinci_mcasp_trigger()' ]
[ 2349.637524] [ 'davinci-mcasp.c', #303 : ==> Entering the function 'mcasp_stop_tx()' ]
[ 2349.645671] [ 'davinci-mcasp.c', #324 : <== Exiting the function mcasp_stop_tx(); return( VOID ) ]
[ 2349.654995] [ 'davinci-mcasp.c', #1727 : <== Exitting the function 'davinci_mcasp_trigger()' : return( ret ==> 0 )]
[ 2349.665854] [ 'soc-pcm.c', #1141 : <== Exitting the function 'soc_pcm_trigger()' : return( 0 ) ]
[ 2349.675083] [ 'pcm_native.c', #1196 : <== Exitting the function 'snd_pcm_do_stop()' (return : 0) ]
[ 2349.684967] [ 'pcm_native.c', #1189 : ==> Entering the function 'snd_pcm_do_stop()' ]
[ 2349.693120] [ 'pcm_native.c', #1196 : <== Exitting the function 'snd_pcm_do_stop()' (return : 0) ]
[ 2349.702564] [ 'pcm_native.c', #1189 : ==> Entering the function 'snd_pcm_do_stop()' ]
[ 2349.710714] [ 'pcm_native.c', #1196 : <== Exitting the function 'snd_pcm_do_stop()' (return : 0) ]
[ 2349.720095] [ 'soc-pcm.c', #1041 : ==> Entering the function 'soc_pcm_hw_free()' ]
[ 2349.727973] [ 'soc-core.c', #2855 : ==> Entering the function 'snd_soc_dai_digital_mute()'; ]
[ 2349.736946] [ 'soc-core.c', #2876 : <== Exiting the function 'snd_soc_dai_digital_mute()' : return ( -ENOTSUPP ) ]
[ 2349.747820] [ 'soc-pcm.c', #1096 : <== Exitting the function 'soc_pcm_hw_free()' : return( 0 ) ]
[ 2349.757085] [ 'pcm_native.c' #2653 : ==> Entering the function snd_pcm_release(); ]
[ 2349.765062] [ 'soc-pcm.c', #693 : ==> Entering the function 'soc_pcm_close()' ]
[ 2349.772678] [ INFO: 'soc_pcm_open()', #715 : Invoke 'snd_soc_dai_digital_mute( cpu_dai, 1, substream->stream )' ]
[ 2349.783550] [ 'soc-core.c', #2855 : ==> Entering the function 'snd_soc_dai_digital_mute()'; ]
[ 2349.792517] [ 'soc-core.c', #2864 : <== Exiting the function 'snd_soc_dai_digital_mute()' and Return( 'dai->driver->ops->mute_stream( dai, mute, direction )' ); ]
[ 2349.808094] [ 'davinci-mcasp.c', #2092 : ==> Entering the function 'davinci_mcasp_mute_stream()' ]
[ 2349.817550] [ 'davinci-mcasp.c', #2094 : args( int mute ==> 1, int stream ==> 0 ) ]
[ 2349.826073] [ INFO: davinci_mcasp_mute_stream() : #2098 : /* mute_pin ==> -1 /* ]
[ 2349.834503] [ 'davinci-mcasp.c', #2116 : <== Exitting the function 'davinci_mcasp_mute_stream()' : return( 0 ) ]
[ 2349.845190] [ 'davinci-mcasp.c', #2069 : ==> Entering the function 'davinci_mcasp_shutdown()' ]
[ 2349.854250] [ 'davinci-mcasp.c', #2083 : <== Exitting the function 'davinci_mcasp_shutdown()' : return( VOID ) ]
[ 2349.865039] [ 'soc-pcm.c', #772 : <== Exitting the function 'soc_pcm_close()' : return( 0 ) ]
[ 2349.874018] [ 'pcm_native.c', #1995 : ==> Entering the function 'snd_pcm_unlink()' ]
[ 2349.882086] [ 'pcm_native.c', #2020 : <== Exitting the function 'snd_pcm_unlink()': return ( res ==> -114 ) ]
[ 2349.892427] [ 'pcm_native.c' #2672 : ===> Exiting the function snd_pcm_release() : Return( 0 ) ]
次に、問題のマルチチャネルPCM 5.1ch (6ch) 再生時のデバッグログを提示する。この場合、実際に出力されるチャネルのアサインは想定とは異なる物となっている
想定するMcASPのシリアライザーとI2S出力のチャネルマッピングは、
Serizlizer #0 : [ Front Left (ch:0) – Front Right (ch:1) ]
Serizlizer #1 : [ Front Center (ch:2) – Low Freq. (ch:3) ]
Serizlizer #2 : [ Surround Left (ch:4) – Surround Right (ch:5) ]
なのだが、実際に出力されるチャネルマッピングは、
Serizlizer #0 : [ Front Left (ch:0) – Low Freq. (ch:3) ]
Serizlizer #1 : [ Front Right (ch:1) – Surround Left (ch:4) ]
Serizlizer #2 : [ Front Center (ch:2) – Surround Right (ch:5) ]
となってしまう。
====== PCM 5.1ch (6ch) 16bit 44.1KHz [FLAC File] =====
[ 94.534547] [ 'pcm_native.c', #2522 : ==> Entering the function 'snd_pcm_playback_open()' ]
[ 94.543523] [ INFO: 'snd_pcm_playback_open()' : #2526 : /* Invoke 'nonseekable_open( inode, file );' */ ]
[ 94.555622] [ INFO: 'snd_pcm_playback_open()' : #2535 : /* Invoke 'snd_lookup_minor_data( inode, file );' */ ]
[ 94.566682] [ INFO: 'snd_pcm_playback_open()' : #2539 : /* Invoke 'snd_pcm_open( inode, file );' */ ]
[ 94.576695] [ 'pcm_native.c' #2567 : ==> Entering the function snd_pcm_open(); ]
[ 94.584402] [ INFO: 'snd_pcm_open()' : #2577 : /* Invoke 'snd_card_file_add( pcm->card, file );' */ ]
[ 94.594371] [ INFO: 'snd_pcm_open()' : #2597 : /* Invoke 'snd_pcm_open_file( file, pcm, stream );' */ ]
[ 94.604581] [ 'pcm_native.c', #2488 : ==> Entering the function 'snd_pcm_open_file()' ]
[ 94.614029] [ INFO: 'snd_pcm_open_file()' : #2494 : /* Invoke 'snd_pcm_open_substream( pcm, stream, file, &substream );' */ ]
[ 94.626974] [ 'pcm_native.c', #2428 : ==> Entering the function 'snd_pcm_open_substream()' ]
[ 94.635790] [ INFO: 'snd_pcm_open_substream()' : #2433 : /* Invoke 'snd_pcm_attach_substream( pcm, stream, file, &substream );' */ ]
[ 94.648681] [ INFO: 'snd_pcm_open_substream()' : #2448 : /* Invoke 'snd_pcm_hw_constraints_init( substream );' */ ]
[ 94.661028] [ 'soc-pcm.c', #454 : ==> Entering the function 'soc_pcm_open()' ]
[ 94.668594] [ 'davinci-mcasp.c', #1930 : ==> Entering the function 'davinci_mcasp_startup()' ]
[ 94.678397] [ INFO: 'davinci_mcasp_startup()', #1950 : /* tdm_slots = mcasp->tdm_slots ==> 2 */ ]
[ 94.688210] [ INFO: 'davinci_mcasp_startup()', #1977 : /* ruledata->serializers ==> 4, max_channels ==> 8 */ ]
[ 94.699358] [ INFO: 'davinci_mcasp_startup()', #1999 : /* max_channels ==> 8 */ ]
[ 94.707866] [ INFO: 'davinci_mcasp_startup()', #2002 : /* Invole 'snd_pcm_hw_constraint_minmax( ,SNDRV_PCM_HW_PARAM_CHANNELS, 2, max_channels );' */ ]
[ 94.723727] [ INFO: 'davinci_mcasp_startup()', #2008 : /* Invole 'snd_pcm_hw_constraint_list( 0, SNDRV_PCM_HW_PARAM_CHANNELS, &mcasp->chconstr[substream->stream] );' */ ]
[ 94.741221] [ INFO: 'davinci_mcasp_startup()', #2016 : /* Invole 'snd_pcm_hw_constraint_minmax( ,SNDRV_PCM_HW_PARAM_SAMPLE_BITS, 8, mcasp->slot_width );' mcasp->slot_width ==> 32 */ ]
[ 94.758992] [ 'davinci-mcasp.c', #2059 : <== Exitting the function 'davinci_mcasp_startup()' : return( 0 ) ]
[ 94.769392] [ 'soc-generic-dmaengine-pcm.c', #248 : ==> Entering the function 'dmaengine_pcm_open()' ]
[ 94.780206] [ INFO: 'dmaengine_pcm_open()', #255 : /* Invoke 'dmaengine_pcm_set_runtime_hwparams( substream )' */ ]
[ 94.792000] [ 'soc-generic-dmaengine-pcm.c', #132 : ==> Entering the function 'dmaengine_pcm_set_runtime_hwparams()' ]
[ 94.803168] [ 'soc-generic-dmaengine-pcm.c', #149 : <== Exitting the function 'dmaengine_pcm_set_runtime_hwparams()' : return( 'snd_soc_set_runtime_hwparams( substream, pcm->config->pcm_hardware );' ) ]
[ 94.822008] [ 'soc-generic-dmaengine-pcm.c', #263 : <== Exitting the function 'dmaengine_pcm_open()' : return( 'snd_dmaengine_pcm_open( substream, chan );' ) ]
[ 94.837018] [ INFO: 'soc_pcm_open()', #543 : soc_pcm_has_symmetry( substream ) ==> 'TRUE' ]
[ 94.847100] [ INFO: 'soc_pcm_open()', #566 : Invoke 'soc_pcm_apply_msb( substream )' ]
[ 94.856389] [ INFO: 'soc_pcm_open()', #588 : ASoC: codec dai name: 'botic-hifi' <----> cpu dai name:'48038000.mcasp' ]
[ 94.867916] [ INFO: 'soc_pcm_open()', #591 : ASoC: rate mask 0x40000000 ]
[ 94.875264] [ INFO: 'soc_pcm_open()', #594 : ASoC: min ch 2, max ch 8 ]
[ 94.882514] [ INFO: 'soc_pcm_open()', #597 : ASoC: min rate 11025, max rate 768000 ]
[ 94.890998] [ INFO: 'soc_pcm_open()', #601 : Invoke 'snd_soc_runtime_activate( rtd, substream->stream )' ]
[ 94.902443] [ 'soc-pcm.c', #607 : <== Exitting the function 'soc_pcm_open()' : return( 0 ) ]
[ 94.912181] [ INFO: 'snd_pcm_open_substream()' : #2461 : /* Invoke 'snd_pcm_hw_constraints_complete( substream );' */ ]
[ 94.923816] [ 'pcm_native.c', #2470 : <== Exitting the function 'snd_pcm_open_substream()' : return( 0 ) ]
[ 94.933879] [ 'pcm_native.c', #2515 : <== Exitting the function 'snd_pcm_open_file()' : return( 0 ) ]
[ 94.943575] [ 'pcm_native.c' #2636 : ===> Exiting the function 'snd_pcm_open()' : return( err ==> 0 ) ]
[ 94.953511] [ 'pcm_native.c', #2545 : <== Exitting the function 'snd_pcm_playback_open()' : return( err ==> 0 ) ]
[ 94.965616] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 94.974785] [ 'pcm_native.c', #2077 : ==> Entering the function 'snd_pcm_hw_rule_format()' ]
[ 94.983606] [ 'pcm_native.c', #2098 : <== Exitting the function 'snd_pcm_hw_rule_format()' : return( 'snd_mask_refine( mask, &m );' ) ]
[ 94.996379] [ 'pcm_native.c', #2106 : ==> Entering the function 'snd_pcm_hw_rule_sample_bits()' ]
[ 95.005621] [ 'pcm_native.c', #2136 : <== Exitting the function 'snd_pcm_hw_rule_sample_bits()' : return( 'snd_interval_refine( params, rule->var),
&t );' ) ]
[ 95.020559] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.031150] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.040268] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.049748] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.057988] [ 'pcm_native.c', #2106 : ==> Entering the function 'snd_pcm_hw_rule_sample_bits()' ]
[ 95.067236] [ 'pcm_native.c', #2136 : <== Exitting the function 'snd_pcm_hw_rule_sample_bits()' : return( 'snd_interval_refine( params, rule->var),
&t );' ) ]
[ 95.082153] [ 'pcm_native.c', #2077 : ==> Entering the function 'snd_pcm_hw_rule_format()' ]
[ 95.092065] [ 'pcm_native.c', #2098 : <== Exitting the function 'snd_pcm_hw_rule_format()' : return( 'snd_mask_refine( mask, &m );' ) ]
[ 95.105732] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.115258] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.123533] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.132968] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.141300] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.150817] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.159082] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.168501] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.176757] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.186213] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.194473] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.203933] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.212221] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.221662] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.229920] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.239349] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.247588] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.257018] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.265266] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.274751] [ 'pcm_native.c', #534 : ==> Entering the function 'snd_pcm_hw_params()' ]
[ 95.283006] [ INFO: 'snd_pcm_hw_params()', $574 : Invoke snd_pcm_hw_refine( substream, params ); ]
[ 95.292436] [ 'pcm_native.c', #288 : ==> Entering the function 'snd_pcm_hw_refine()' ]
[ 95.300688] [ 'pcm_native.c', #2077 : ==> Entering the function 'snd_pcm_hw_rule_format()' ]
[ 95.309480] [ 'pcm_native.c', #2098 : <== Exitting the function 'snd_pcm_hw_rule_format()' : return( 'snd_mask_refine( mask, &m );' ) ]
[ 95.322269] [ 'pcm_native.c', #2106 : ==> Entering the function 'snd_pcm_hw_rule_sample_bits()' ]
[ 95.331514] [ 'pcm_native.c', #2136 : <== Exitting the function 'snd_pcm_hw_rule_sample_bits()' : return( 'snd_interval_refine( params, rule->var),
&t );' ) ]
[ 95.346373] [ 'pcm_native.c', #469 : <== Exitting the function 'snd_pcm_hw_refine()' : return( ) ]
[ 95.355800] [ INFO: 'snd_pcm_hw_params()', $581 : Invoke snd_pcm_hw_params_choose( substream, params ); ]
[ 95.365861] [ 'soc-pcm.c', #907 : ==> Entering the function 'soc_pcm_hw_params()' ]
[ 95.373840] [ INFO: 'soc_pcm_hw_params()', #916 : Invoke 'soc_pcm_params_symmetry( substream, params )' ]
[ 95.383995] [ 'botic-card.c', #189 : ==> Entering the function 'botic_hw_params()'; ]
[ 95.392152] [ INFO: 'botic_hw_params()', #201 : /* format ==> SNDRV_PCM_FORMAT_S16_LE : (2) */ ]
[ 95.401575] [ INFO: 'botic_hw_params()', #203 : /* rate ==> 44100 */ ]
[ 95.408369] [ INFO: 'botic_hw_params()', #206 : /* Invoke the function 'botic_setup_serializers( cpu_dai, format, &ser_setup )' */ ]
[ 95.420863] [ 'botic-card.c', #94 : ==> Entering the function 'botic_setup_serializers()'; ]
[ 95.429652] [ 'botic-card.c', #95 : ( args : snd_pcm_format_t format ==> SNDRV_PCM_FORMAT_S16_LE : (2) ) ]
[ 95.440250] [ INFO: 'botic_setup_serializers()', #103 : /* User's Botic Serializer Setting ==> 'MMII' */ ]
[ 95.450324] [ INFO: 'botic_setup_serializers()', #155 : /* Invoke the function 'snd_soc_dai_set_channel_map()' */ ]
[ 95.461199] [ 'soc-core.c', #2813 : ==> Entering the function 'snd_soc_dai_set_channel_map()'; ]
[ 95.470442] [ 'soc-core.c', #2817 : <== Exiting the function 'snd_soc_dai_set_channel_map()' and Return( 'dai->driver->ops->set_channel_map( dai,
tx_num, tx_slot, rx_num, rx_slot )' ); ]
[ 95.488188] [ 'davinci-mcasp.c', #1841 : ==> Entering the function 'davinci_mcasp_set_channel_map()' ]
[ 95.497880] [ 'davinci-mcasp.c', #1842 : ( args : unsigned int tx_num ==> 4 , unsigned int rx_num ==> 0 ) ]
[ 95.508391] [ INFO: 'davinci_mcasp_set_channel_map()', #1850 : /* unsigned int *tx_slot */]
[ 95.517453] [ INFO: 'davinci_mcasp_set_channel_map()', #1851 : /* tx_slot[0] ==> 0 */]
[ 95.526150] [ INFO: 'davinci_mcasp_set_channel_map()', #1852 : /* tx_slot[1] ==> 1 */]
[ 95.534845] [ INFO: 'davinci_mcasp_set_channel_map()', #1853 : /* tx_slot[2] ==> 2 */]
[ 95.543541] [ INFO: 'davinci_mcasp_set_channel_map()', #1854 : /* tx_slot[3] ==> 3 */]
[ 95.552242] [ INFO: davinci_mcasp_set_channel_map() : #1893 : for ( slot = 0; slot < mcasp->num_serializer; slot++ ) : mcasp->num_serializer ==> 4 ]
[ 95.566552] [ INFO: davinci_mcasp_set_channel_map() : #1899 : /* for ( chan = 0; chan < tx_num; chan++ ) */ tx_num ==> 4 ]
[ 95.578504] [ INFO: davinci_mcasp_set_channel_map() : #1903 : /* slot = tx_slot[chan]; */ chan ==> 0, slot ==> 0 ]
[ 95.589738] [ INFO: davinci_mcasp_set_channel_map() : #1906 : /* if ( slot < mcasp->num_serializer ) ==> TRUE */ mcasp->serial_dir[slot] = TX_MODE; ]
[ 95.604314] [ INFO: davinci_mcasp_set_channel_map() : #1903 : /* slot = tx_slot[chan]; */ chan ==> 1, slot ==> 1 ]
[ 95.615548] [ INFO: davinci_mcasp_set_channel_map() : #1906 : /* if ( slot < mcasp->num_serializer ) ==> TRUE */ mcasp->serial_dir[slot] = TX_MODE; ]
[ 95.630125] [ INFO: davinci_mcasp_set_channel_map() : #1903 : /* slot = tx_slot[chan]; */ chan ==> 2, slot ==> 2 ]
[ 95.641354] [ INFO: davinci_mcasp_set_channel_map() : #1906 : /* if ( slot < mcasp->num_serializer ) ==> TRUE */ mcasp->serial_dir[slot] = TX_MODE; ]
[ 95.655928] [ INFO: davinci_mcasp_set_channel_map() : #1903 : /* slot = tx_slot[chan]; */ chan ==> 3, slot ==> 3 ]
[ 95.667160] [ INFO: davinci_mcasp_set_channel_map() : #1906 : /* if ( slot < mcasp->num_serializer ) ==> TRUE */ mcasp->serial_dir[slot] = TX_MODE; ]
[ 95.681741] [ 'davinci-mcasp.c', #1919 : <== Exitting the function 'davinci_mcasp_set_channel_map()' : return( 0 ) ]
[ 95.692789] [ 'botic-card.c', $178 : ==> Exiting the function 'botic_setup_serializers()' : Return ( 0 ) ]
[ 95.702843] [ INFO: 'botic_hw_params()', #214 : /* Invoke the function 'snd_soc_dai_set_fmt( codec_dai, ser_setup.dai_fmt )' : set CODEC DAI configs
*/ ]
[ 95.717145] [ 'soc-core.c', #2701 : ==> Entering the function 'snd_soc_dai_set_fmt()'; ]
[ 95.725662] [ 'soc-core.c', #2702 : ( args : unsigned int fmt ==> 16385 ) ]
[ 95.733366] [ 'soc-core.c', #2709 : <== Exiting the function 'snd_soc_dai_set_fmt()' : return ( -ENOTSUPP ) ]
[ 95.743782] [ INFO: 'botic_hw_params()', #222 : /* Invoke the function 'snd_soc_dai_set_fmt()' : set CPU DAI configs */ ]
[ 95.755193] [ 'soc-core.c', #2701 : ==> Entering the function 'snd_soc_dai_set_fmt()'; ]
[ 95.763708] [ 'soc-core.c', #2702 : ( args : unsigned int fmt ==> 16385 ) ]
[ 95.771410] [ 'soc-core.c', #2713 : <== Exiting the function 'snd_soc_dai_set_fmt()' and Return( 'dai->driver->ops->set_fmt( dai, fmt )' ); ]
[ 95.785080] [ 'davinci-mcasp.c', #430 : ==> Entering the function 'davinci_mcasp_set_dai_fmt()' ]
[ 95.794320] [ 'davinci-mcasp.c', #431 : args( unsigned int fmt ==> 16385 ) ]
[ 95.802204] [ INFO: davinci_mcasp_set_dai_fmt() : #463 : switch ( fmt & SND_SOC_DAIFMT_FORMAT_MASK ) (==>1) ]
[ 95.812891] [ INFO: davinci_mcasp_set_dai_fmt() : #485 : ==> case SND_SOC_DAIFMT_I2S ]
[ 95.821502] [ INFO: davinci_mcasp_set_dai_fmt() : #521 : switch ( fmt & SND_SOC_DAIFMT_MASTER_MASK ) (==>16384) ]
[ 95.832553] [ INFO: davinci_mcasp_set_dai_fmt() : #527 : ==> case SND_SOC_DAIFMT_CBS_CFS : /* codec is clock and frame slave */ ]
[ 95.845052] [ INFO: davinci_mcasp_set_dai_fmt() : #583 : switch ( fmt & SND_SOC_DAIFMT_INV_MASK ) (==>0) ]
[ 95.855466] [ INFO: davinci_mcasp_set_dai_fmt() : #609 : ==> case SND_SOC_DAIFMT_NB_NF /* fs_pol_rising ==> true */ ]
[ 95.866879] [ INFO: davinci_mcasp_set_dai_fmt() : #625 : Frame Sync Polarity ==> [ 'FS Polarity is FALLING' ]
[ 95.877571] [ 'davinci-mcasp.c', #640 : <== Exitting the function 'davinci_mcasp_set_dai_fmt()' return( ret ==> 0 ) ]
[ 95.888617] [ INFO: 'botic_hw_params()', #232 : /* sampling rates ==> '44k1 series' */ ]
[ 95.897043] [ INFO: 'botic_hw_params()', #235 : /* 'gpio_set_value( gpio_int_masterclk_enable, 0 )' : set Internal Master Clock 'DISABLE' */ ]
[ 95.910361] [ INFO: 'botic_hw_params()', #240 : /* External Master Clock SW is 'ON' ==> set 44k1 SW to 'LOW' */ ]
[ 95.921141] [ INFO: 'botic_hw_params()', #283 : /* DSD Playback Mode is 'OFF' (PCM Playback Mode is 'ON') */ ]
[ 95.931648] [ INFO: 'botic_hw_params()', #289 : /* Invoke the function 'snd_soc_dai_set_sysclk()' : set CODEC system clock */ ]
[ 95.943782] [ 'soc-core.c', #2550 : ==> Entering the function 'snd_soc_dai_set_sysclk()'; ]
[ 95.952570] [ 'soc-core.c', #2565 : <== Exiting the function 'snd_soc_dai_set_sysclk()' : return ( -ENOTSUPP ) ]
[ 95.963261] [ INFO: 'botic_hw_params()', #297 : /* Invoke the function 'snd_soc_dai_set_sysclk()' : set CPU system clock */ ]
[ 95.975216] [ 'soc-core.c', #2550 : ==> Entering the function 'snd_soc_dai_set_sysclk()'; ]
[ 95.984008] [ 'soc-core.c', #2554 : <== Exiting the function 'snd_soc_dai_set_sysclk()' and Return( dai->driver->ops->set_sysclk( dai, clk_id, freq, dir ); ); ]
[ 95.999306] [ 'davinci-mcasp.c', #751 : ==> Entering the function 'davinci_mcasp_set_sysclk()' ]
[ 96.008449] [ 'davinci-mcasp.c', #771 : <== Exitting the function 'davinci_mcasp_set_sysclk()' : return( 0 ) ]
[ 96.018955] [ INFO: 'botic_hw_params()', #305 : /* Invoke the function 'snd_soc_dai_set_clkdiv( cpu_dai, 0, 1 )' */ ]
[ 96.030095] [ 'soc-core.c', #2610 : ==> Entering the function 'snd_soc_dai_set_clkdiv()'; ]
[ 96.038883] [ 'soc-core.c', #2614 : <== Exiting the function 'snd_soc_dai_set_clkdiv()' and Return( dai->driver->ops->set_clkdiv(dai, div_id, div) ); ]
[ 96.053368] [ 'davinci-mcasp.c', #648 : ==> Entering the function '__davinci_mcasp_set_clkdiv()' ]
[ 96.062700] [ 'davinci-mcasp.c', #649 : args( div_id ==> 0, div ==> 1, bool explicit ==> 1 ) ]
[ 96.072212] [ INFO: davinci_mcasp_set_dai_fmt() : #655 : switch ( div_id ) (==>0) ]
[ 96.080456] [ INFO: __davinci_mcasp_set_clkdiv() : #660 : ==> case MCASP_CLKDIV_AUXCLK /* MCLK divider */ ]
[ 96.090962] [ 'davinci-mcasp.c', #733 : <== Exitting the function '__davinci_mcasp_set_clkdiv()' : return( ret ==> 0 ) ]
[ 96.102420] [ INFO: 'botic_hw_params()', #352 : /* Format ==> 'PCM : SNDRV_PCM_FORMAT_S16_LE : (2) ' : Invoke 'snd_soc_dai_set_clkdiv( cpu_dai, 2,
blr_ratio );' blr_ratio ==> 64 */ ]
[ 96.119716] [ 'soc-core.c', #2610 : ==> Entering the function 'snd_soc_dai_set_clkdiv()'; ]
[ 96.128494] [ 'soc-core.c', #2614 : <== Exiting the function 'snd_soc_dai_set_clkdiv()' and Return( dai->driver->ops->set_clkdiv(dai, div_id, div) ); ]
[ 96.142983] [ 'davinci-mcasp.c', #648 : ==> Entering the function '__davinci_mcasp_set_clkdiv()' ]
[ 96.152313] [ 'davinci-mcasp.c', #649 : args( div_id ==> 2, div ==> 64, bool explicit ==> 1 ) ]
[ 96.161915] [ INFO: davinci_mcasp_set_dai_fmt() : #655 : switch ( div_id ) (==>2) ]
[ 96.170160] [ INFO: __davinci_mcasp_set_clkdiv() : #690 : ==> case MCASP_CLKDIV_BCLK_FS_RATIO /* BCLK/LRCLK ratio */ ]
[ 96.181752] [ 'davinci-mcasp.c', #733 : <== Exitting the function '__davinci_mcasp_set_clkdiv()' : return( ret ==> 0 ) ]
[ 96.193161] [ INFO: 'botic_hw_params()', #359 : /* BCLK rate ==> 2822400 */ ]
[ 96.200778] [ INFO: 'botic_hw_params()', #371 : /* divisor = ( sysclk + (bclk / 2) ) / bclk; ==> 16 : Invoke 'snd_soc_dai_set_clkdiv( cpu_dai, 1, divisor );' */ ]
[ 96.215987] [ 'soc-core.c', #2610 : ==> Entering the function 'snd_soc_dai_set_clkdiv()'; ]
[ 96.224776] [ 'soc-core.c', #2614 : <== Exiting the function 'snd_soc_dai_set_clkdiv()' and Return( dai->driver->ops->set_clkdiv(dai, div_id, div) ); ]
[ 96.239266] [ 'davinci-mcasp.c', #648 : ==> Entering the function '__davinci_mcasp_set_clkdiv()' ]
[ 96.248588] [ 'davinci-mcasp.c', #649 : args( div_id ==> 1, div ==> 16, bool explicit ==> 1 ) ]
[ 96.258189] [ INFO: davinci_mcasp_set_dai_fmt() : #655 : switch ( div_id ) (==>1) ]
[ 96.266435] [ INFO: __davinci_mcasp_set_clkdiv() : #668 : ==> case MCASP_CLKDIV_BCLK /* BCLK divider */ ]
[ 96.276764] [ 'davinci-mcasp.c', #733 : <== Exitting the function '__davinci_mcasp_set_clkdiv()' : return( ret ==> 0 ) ]
[ 96.288285] [ 'botic-card.c', #383 : ===> Exiting the function 'botic_hw_params()' : ( Return : 0 ) ]
[ 96.297895] [ INFO: 'soc_pcm_hw_params()', #962 : Invoke 'soc_dai_hw_params( substream, &codec_params, codec_dai )' ]
[ 96.309127] [ 'soc-pcm.c', #880 : ==> Entering the function 'soc_dai_hw_params()' ]
[ 96.317094] [ 'soc-pcm.c', #892 : <== Exitting the function 'soc_dai_hw_params()' : return( 0 ) ]
[ 96.326424] [ INFO: 'soc_pcm_hw_params()', #972 : codec_dai->rate = params_rate( &codec_params ); ==> 44100 ]
[ 96.337019] [ INFO: 'soc_pcm_hw_params()', #973 : codec_dai->channels = params_channels( &codec_params ); ==> 6 ]
[ 96.347977] [ INFO: 'soc_pcm_hw_params()', #974 : codec_dai->sample_bits = snd_pcm_format_physical_width( params_format(&codec_params) ); ==> 16 ]
[ 96.361920] [ INFO: 'soc_pcm_hw_params()', #979 : Invoke 'soc_dai_hw_params( substream, params, cpu_dai )' ]
[ 96.372335] [ 'soc-pcm.c', #880 : ==> Entering the function 'soc_dai_hw_params()' ]
[ 96.380309] [ 'davinci-mcasp.c', #1555 : ==> Entering the function 'davinci_mcasp_hw_params()' ]
[ 96.389457] [ INFO: davinci_mcasp_hw_params() : #1570 : /* channels = params_channels( params ); ==> 6, */ ]
[ 96.400235] [ INFO: davinci_mcasp_hw_params() : #1571 : /* period_size = params_period_size( params ); ==> 2205, */ ]
[ 96.411830] [ INFO: davinci_mcasp_hw_params() : #1582 : /* Invole 'davinci_mcasp_set_dai_fmt( cpu_dai, mcasp->dai_fmt )' */ mcasp->dai_fmt ==> (16385) ]
[ 96.426678] [ 'davinci-mcasp.c', #430 : ==> Entering the function 'davinci_mcasp_set_dai_fmt()' ]
[ 96.435917] [ 'davinci-mcasp.c', #431 : args( unsigned int fmt ==> 16385 ) ]
[ 96.443800] [ INFO: davinci_mcasp_set_dai_fmt() : #463 : switch ( fmt & SND_SOC_DAIFMT_FORMAT_MASK ) (==>1) ]
[ 96.454483] [ INFO: davinci_mcasp_set_dai_fmt() : #485 : ==> case SND_SOC_DAIFMT_I2S ]
[ 96.463094] [ INFO: davinci_mcasp_set_dai_fmt() : #521 : switch ( fmt & SND_SOC_DAIFMT_MASTER_MASK ) (==>16384) ]
[ 96.474142] [ INFO: davinci_mcasp_set_dai_fmt() : #527 : ==> case SND_SOC_DAIFMT_CBS_CFS : /* codec is clock and frame slave */ ]
[ 96.486642] [ INFO: davinci_mcasp_set_dai_fmt() : #583 : switch ( fmt & SND_SOC_DAIFMT_INV_MASK ) (==>0) ]
[ 96.497063] [ INFO: davinci_mcasp_set_dai_fmt() : #609 : ==> case SND_SOC_DAIFMT_NB_NF /* fs_pol_rising ==> true */ ]
[ 96.508474] [ INFO: davinci_mcasp_set_dai_fmt() : #625 : Frame Sync Polarity ==> [ 'FS Polarity is FALLING' ]
[ 96.519163] [ 'davinci-mcasp.c', #640 : <== Exitting the function 'davinci_mcasp_set_dai_fmt()' return( ret ==> 0 ) ]
[ 96.530215] [ INFO: davinci_mcasp_hw_params() : #1612 : /* Invole 'mcasp_common_hw_param( mcasp, substream->stream, period_size * channels, channels, dsd_mode )' */ ]
[ 96.546325] [ 'davinci-mcasp.c', #1016 : ==> Entering the function 'mcasp_common_hw_param()' ]
[ 96.555296] [ 'davinci-mcasp.c', #1018 : args( int period_words ==> 13230, int channels ==> 6, bool dsd_mode ==> 0 ) ]
[ 96.566979] [ INFO: 'mcasp_common_hw_param()', #1025 : ================================================================================ ]
[ 96.579930] [ INFO: 'mcasp_common_hw_param()', #1026 : Sound Playback Channels : PCM 6 channel ]
[ 96.592881] [ INFO: 'mcasp_common_hw_param()', #1028 : ================================================================================ ]
[ 96.605827] [ INFO: mcasp_common_hw_param() : #1041 : max_active_serializers ==> 3 ]
[ 96.614252] [ INFO: mcasp_common_hw_param() : #1069 : disable_pins ==> 0 ]
[ 96.621867] [ INFO: 'mcasp_common_hw_param()', #1091 : /* for ( i = 0; i < mcasp->num_serializer; i++ ); mcasp->num_serializer ==> 4 ]
[ 96.634821] [ INFO: 'mcasp_common_hw_param()', #1138 : /* ===== if ( stream == SNDRV_PCM_STREAM_PLAYBACK ) ==> TRUE ===== */ ]
[ 96.647408] [ INFO: 'mcasp_common_hw_param()', #1144 : /* ===== active_serializers = tx_ser ==> 3 ===== */ ]
[ 96.658638] [ INFO: 'mcasp_common_hw_param()', #1145 : /* ===== numevt = mcasp->txnumevt; ==> 16 ===== */ ]
[ 96.669783] [ INFO: 'mcasp_common_hw_param()', #1146 : /* ===== reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET; ==> 4096 (0x1000) ===== */
]
[ 96.683906] [ INFO: 'mcasp_common_hw_param()', #1214 : /* ===== numevt = (numevt / active_serializers) * active_serializers; ==> 15 ===== */ ]
[ 96.698214] [ INFO: 'mcasp_common_hw_param()', #1215 : /* ===== period_words; ==> 13230 ===== */ ]
[ 96.708540] [ INFO: 'mcasp_common_hw_param()', #1227 : /* ===== OUT while () loop ===== numevt ==> 15 ===== */ ]
[ 96.720408] [ INFO: 'mcasp_common_hw_param()', #1239 : /* ===== dma_data->maxburst = numevt; ==> 15 ===== */ ]
[ 96.731726] [ 'davinci-mcasp.c', #1241 : <== Exitting the function 'mcasp_common_hw_param()' : return( 0 ) ]
[ 96.742055] [ INFO: davinci_mcasp_hw_params() : #1625 : /* Invole 'mcasp_i2s_hw_param( mcasp, substream->stream, channels, dsd_mode )' */ ]
[ 96.755730] [ 'davinci-mcasp.c', #1258 : ==> Entering the function 'mcasp_i2s_hw_param()' ]
[ 96.764429] [ 'davinci-mcasp.c', #1260 : args( int channels ==> 6, bool dsd_mode ==> 0 ) ]
[ 96.773579] [ INFO: mcasp_i2s_hw_param() : #1275 : total_slots = mcasp->tdm_slots ==> 2 ]
[ 96.782455] [ INFO: mcasp_i2s_hw_param() : #1305 : /* if ( mcasp->tdm_mask[stream] ) ==> FALSE */ ]
[ 96.793321] [ INFO: mcasp_i2s_hw_param() : #1309 : active_serializers = (channels + total_slots - 1) / total_slots ==> 3 ]
[ 96.805546] [ INFO: mcasp_i2s_hw_param() : #1321 : /* if ( active_serializers == 1 ) ==> FALSE : active_slots = total_slots; ==> 2 */ ]
[ 96.818855] [ INFO: mcasp_i2s_hw_param() : #1329 : /* mask ==> 3 (0x3) */ ]
[ 96.826735] [ 'davinci-mcasp.c', #1378 : <== Exitting the function 'mcasp_i2s_hw_param()' : return( 0 ) ]
[ 96.836793] [ INFO: davinci_mcasp_hw_params() : #1634 : /* params_format(params) ==> 'SNDRV_PCM_FORMAT_S16_LE : (2)' , */ ]
[ 96.849199] [ INFO: davinci_mcasp_hw_params() : #1684 : /* Invole 'davinci_config_channel_size( mcasp, word_length );' word_length ==> 16 */ ]
[ 96.863232] [ 'davinci-mcasp.c', #915 : ==> Entering the function 'davinci_config_channel_size()' ]
[ 96.872655] [ 'davinci-mcasp.c', #916 : args( int sample_width ==> 16 ) ]
[ 96.880177] [ INFO: davinci_config_channel_size() : #923 : tx_rotate = (sample_width / 4) & 0x7; ==> 4 ]
[ 96.890503] [ INFO: davinci_config_channel_size() : #924 : mask = (1ULL << sample_width) - 1; ==> 65535 ]
[ 96.900916] [ INFO: davinci_config_channel_size() : #925 : slot_width = sample_width; ==> 16 ]
[ 96.910336] [ INFO: davinci_config_channel_size() : #957 : lot_width = sample_width;1; ==> 16 ]
[ 96.919845] [ INFO: davinci_config_channel_size() : #961 : /* if ( mcasp->slot_width ) ==> TRUE mcasp->slot_width ==> 32 */ ]
[ 96.932433] [ INFO: davinci_config_channel_size() : #971 : /* slot_width = mcasp->slot_width; ==> 32 */ ]
[ 96.942943] [ INFO: davinci_config_channel_size() : #972 : /* rx_rotate = (slot_width - sample_width) / 4; ==> 4 */ ]
[ 96.954535] [ INFO: davinci_config_channel_size() : #979 : /* mapping of the XSSZ bit-field : fmt = ( slot_width >> 1 ) - 1; ==> 15 */ ]
[ 96.967936] [ INFO: davinci_config_channel_size() : #991 : tx_rotate ==> 4 ]
[ 96.975728] [ 'davinci-mcasp.c', #1001 : <== Exitting the function 'davinci_config_channel_size()' : return( 0 ) ]
[ 96.986599] [ INFO: davinci_mcasp_hw_params() : #1691 : /* mcasp->channels = channels ==> 6 */ ]
[ 96.996292] [ 'davinci-mcasp.c', #1693 : <== Exitting the function 'davinci_mcasp_hw_params()' : return( 0 ) ]
[ 97.006797] [ 'soc-pcm.c', #892 : <== Exitting the function 'soc_dai_hw_params()' : return( 0 ) ]
[ 97.016128] [ 'soc-generic-dmaengine-pcm.c', #95 : ==> Entering the function 'dmaengine_pcm_hw_params()' ]
[ 97.026186] [ 'soc-generic-dmaengine-pcm.c', #123 : <== Exitting the function 'dmaengine_pcm_hw_params()' : return( 'snd_pcm_lib_malloc_pages( substream, params_buffer_bytes(params) );' ) ]
[ 97.043846] [ INFO: 'soc_pcm_hw_params()', #998 : cpu_dai->rate = params_rate( params ); ==> 44100 ]
[ 97.053627] [ INFO: 'soc_pcm_hw_params()', #999 : cpu_dai->channels = params_channels( params ); ==> 6 ]
[ 97.063774] [ INFO: 'soc_pcm_hw_params()', #1000 : cpu_dai->sample_bits = snd_pcm_format_physical_width( params_format(params) ); ==> 16 ]
[ 97.076997] [ 'soc-pcm.c', #1005 : <== Exitting the function 'soc_pcm_hw_params()' : return( ret ==> 1 ) ]
[ 97.087147] [ INFO: 'snd_pcm_hw_params()', #610 : /* runtime->format ==> 2, runtime->subformat ==> 0 ]
[ 97.097111] [ INFO: 'snd_pcm_hw_params()', #611 : /* runtime->channels ==> 6, runtime->rate ==> 44100 ]
[ 97.107166] [ INFO: 'snd_pcm_hw_params()', #612 : /* runtime->period_size ==> 2205, runtime->periods ==> 3 ]
[ 97.117680] [ INFO: 'snd_pcm_hw_params()', #613 : /* runtime->buffer_size ==> 6615 ]
[ 97.126013] [ INFO: 'snd_pcm_hw_params()', #617 : /* bits = snd_pcm_format_physical_width( runtime->format ); ==> 16 ]
[ 97.137437] [ INFO: 'snd_pcm_hw_params()', #619 : /* ENDIAN : ==> 'Little Endian' ]
[ 97.145775] [ INFO: 'snd_pcm_hw_params()', #620 : /* SIGNED/UNSIGNED : ==> 'Signed' ]
[ 97.154292] [ INFO: 'snd_pcm_hw_params()', #634 : /* runtime->byte_align ==> 12, runtime->min_align ==> 1 ]
[ 97.164718] [ 'pcm_native.c', #662 : <== Exitting the function 'snd_pcm_hw_params()' : return( 0 ) ]
[ 97.174373] [ 'pcm_native.c', #1643 : ==> Entering the function 'snd_pcm_prepare()' ]
[ 97.182543] [ 'soc-pcm.c', #786 : ==> Entering the function 'soc_pcm_prepare()' ]
[ 97.190339] [ INFO: 'soc_pcm_prepare()', #844 : Invoke 'snd_soc_dai_digital_mute( cpu_dai, 1, substream->stream )' ]
[ 97.203486] [ 'soc-core.c', #2855 : ==> Entering the function 'snd_soc_dai_digital_mute()'; ]
[ 97.212516] [ 'soc-core.c', #2876 : <== Exiting the function 'snd_soc_dai_digital_mute()' : return ( -ENOTSUPP ) ]
[ 97.223393] [ 'soc-core.c', #2855 : ==> Entering the function 'snd_soc_dai_digital_mute()'; ]
[ 97.232367] [ 'soc-core.c', #2864 : <== Exiting the function 'snd_soc_dai_digital_mute()' and Return( 'dai->driver->ops->mute_stream( dai, mute, direction )' ); ]
[ 97.247942] [ 'davinci-mcasp.c', #2092 : ==> Entering the function 'davinci_mcasp_mute_stream()' ]
[ 97.257274] [ 'davinci-mcasp.c', #2094 : args( int mute ==> 0, int stream ==> 0 ) ]
[ 97.265792] [ INFO: davinci_mcasp_mute_stream() : #2098 : /* mute_pin ==> -1 /* ]
[ 97.274218] [ 'davinci-mcasp.c', #2116 : <== Exitting the function 'davinci_mcasp_mute_stream()' : return( 0 ) ]
[ 97.285146] [ 'soc-pcm.c', #857 : <== Exitting the function 'soc_pcm_prepare()' : return( ret ==> 0 ) ]
[ 97.295144] [ 'pcm_native.c', #1662 : <== Exitting the function 'snd_pcm_prepare()' : return ( res ==> 0 ) ]
[ 97.307447] [ 'pcm_native.c', #1168 : ==> Entering the function 'snd_pcm_start()' ]
[ 97.315426] [ 'pcm_native.c', #1170 : ===> Exiting the function snd_pcm_start() : Return : 'snd_pcm_action( &snd_pcm_action_start, substream, SNDRV_PCM_STATE_RUNNING );' ' ]
[ 97.331534] [ 'soc-pcm.c', #1105 : ==> Entering the function 'soc_pcm_trigger()' ]
[ 97.339431] [ 'davinci-mcasp.c', #1703 : ==> Entering the function 'davinci_mcasp_trigger()' ]
[ 97.348390] [ 'davinci-mcasp.c', #227 : ==> Entering the function mcasp_start_tx(); ]
[ 97.356536] [ INFO: mcasp_start_tx() : #231 : mcasp->txnumevt ==> 16 ]
[ 97.363963] [ 'davinci-mcasp.c', #262 : <== Exiting the function mcasp_start_tx(); return ( VOID ) ]
[ 97.373465] [ 'davinci-mcasp.c', #1727 : <== Exitting the function 'davinci_mcasp_trigger()' : return( ret ==> 0 )]
[ 97.384326] [ 'soc-pcm.c', #1141 : <== Exitting the function 'soc_pcm_trigger()' : return( 0 ) ]
(ここから実際の曲の再生が始まる)
...
(再生終了)
[ 143.916145] [ 'pcm_native.c', #1189 : ==> Entering the function 'snd_pcm_do_stop()' ]
[ 143.924319] [ 'soc-pcm.c', #1105 : ==> Entering the function 'soc_pcm_trigger()' ]
[ 143.932201] [ 'davinci-mcasp.c', #1703 : ==> Entering the function 'davinci_mcasp_trigger()' ]
[ 143.941163] [ 'davinci-mcasp.c', #303 : ==> Entering the function 'mcasp_stop_tx()' ]
[ 143.949313] [ 'davinci-mcasp.c', #324 : <== Exiting the function mcasp_stop_tx(); return( VOID ) ]
[ 143.958638] [ 'davinci-mcasp.c', #1727 : <== Exitting the function 'davinci_mcasp_trigger()' : return( ret ==> 0 )]
[ 143.969503] [ 'soc-pcm.c', #1141 : <== Exitting the function 'soc_pcm_trigger()' : return( 0 ) ]
[ 143.978736] [ 'pcm_native.c', #1196 : <== Exitting the function 'snd_pcm_do_stop()' (return : 0) ]
[ 143.989485] [ 'pcm_native.c', #1189 : ==> Entering the function 'snd_pcm_do_stop()' ]
[ 143.997646] [ 'pcm_native.c', #1196 : <== Exitting the function 'snd_pcm_do_stop()' (return : 0) ]
[ 144.007024] [ 'pcm_native.c', #1189 : ==> Entering the function 'snd_pcm_do_stop()' ]
[ 144.015173] [ 'pcm_native.c', #1196 : <== Exitting the function 'snd_pcm_do_stop()' (return : 0) ]
[ 144.024526] [ 'soc-pcm.c', #1041 : ==> Entering the function 'soc_pcm_hw_free()' ]
[ 144.032414] [ 'soc-core.c', #2855 : ==> Entering the function 'snd_soc_dai_digital_mute()'; ]
[ 144.041386] [ 'soc-core.c', #2876 : <== Exiting the function 'snd_soc_dai_digital_mute()' : return ( -ENOTSUPP ) ]
[ 144.052265] [ 'soc-pcm.c', #1096 : <== Exitting the function 'soc_pcm_hw_free()' : return( 0 ) ]
[ 144.061527] [ 'pcm_native.c' #2653 : ==> Entering the function snd_pcm_release(); ]
[ 144.069508] [ 'soc-pcm.c', #693 : ==> Entering the function 'soc_pcm_close()' ]
[ 144.077114] [ INFO: 'soc_pcm_open()', #715 : Invoke 'snd_soc_dai_digital_mute( cpu_dai, 1, substream->stream )' ]
[ 144.087986] [ 'soc-core.c', #2855 : ==> Entering the function 'snd_soc_dai_digital_mute()'; ]
[ 144.096955] [ 'soc-core.c', #2864 : <== Exiting the function 'snd_soc_dai_digital_mute()' and Return( 'dai->driver->ops->mute_stream( dai, mute, direction )' ); ]
[ 144.112547] [ 'davinci-mcasp.c', #2092 : ==> Entering the function 'davinci_mcasp_mute_stream()' ]
[ 144.121881] [ 'davinci-mcasp.c', #2094 : args( int mute ==> 1, int stream ==> 0 ) ]
[ 144.130400] [ INFO: davinci_mcasp_mute_stream() : #2098 : /* mute_pin ==> -1 /* ]
[ 144.138833] [ 'davinci-mcasp.c', #2116 : <== Exitting the function 'davinci_mcasp_mute_stream()' : return( 0 ) ]
[ 144.149517] [ 'davinci-mcasp.c', #2069 : ==> Entering the function 'davinci_mcasp_shutdown()' ]
[ 144.158570] [ 'davinci-mcasp.c', #2083 : <== Exitting the function 'davinci_mcasp_shutdown()' : return( VOID ) ]
[ 144.169272] [ 'soc-pcm.c', #772 : <== Exitting the function 'soc_pcm_close()' : return( 0 ) ]
[ 144.178238] [ 'pcm_native.c', #1995 : ==> Entering the function 'snd_pcm_unlink()' ]
[ 144.186304] [ 'pcm_native.c', #2020 : <== Exitting the function 'snd_pcm_unlink()': return ( res ==> -114 ) ]
[ 144.196639] [ 'pcm_native.c' #2672 : ===> Exiting the function snd_pcm_release() : Return( 0 ) ]
マルチチャネルのPCMファイル再生時にチャネルマッピングが想定とは異なる原因を突き止めるため、デバッグログとソースコードの睨めっこを延々と繰り返していたが、チャネルマッピングを変更する方法が良くわからなかった.チャネル関係のマッピングを行ってそうな関数名は “davinci-mcasp.c” ファイルの中に、”davinci_mcasp_ch_constraint() “や”davinci_mcasp_set_tdm_slot” などの関数があるので、そのあたりのコードをちょこちょこ弄ってみたが、チャネルのマッピングを変更することはできなかった.
チャネルのマッピングが影響しそうな部分として、マルチチャネルPCMデータのブロックを”McASP” の機能を使って入れ替えることを検討したが、”McASP” の各種ドキュメントを読み込んでもどこから手をつけて良いのか全く解らなかった.ホストコンピュータ側からDMAチャネルを通じてPCMのブロックデータの順番を入れ替えることができれば良いのだが、そんな高度なDMAデータ転送テクニックはとてもじゃないけど、私の貧弱なIoTデバイスの知識では不可能だろう.
このような訳で、ALSAを含めた”Botic”コードまわりでコードを修正してチャネルマッピングを変更することはできないでいた.LightMPD-Botic環境でのI2S方式によるPCMマルチチャネル再生は長い間諦めて放置していた.
最近、自宅の荷物の整理をしていたら過去に制作したマルチチャネルDACシステムが出てきたので、長い間棚上げにしていた LightMPD-Botic によるI2Sマルチチャネル再生に再度取り組んでみることにした.”Botic”コードまわりの改変は現実的ではないので、今回は”Botic”のホスト側であるMPDまわりのコード改修で何とかできないか検討することにした.
MPD側でMcASPに送り込むPCMデータのチャネルアサインを変更する方法が見つかった
これまで、マルチチャネルPCMのチャネルマッピングの問題は”Botic”側(ALSA,McASP)側に問題があると思い込んでいたが、マルチチャネルPCM再生時にチャネルのマッピングがおかしくなる以外は何の問題も生じていない.だとすればホスト側のMPDまわりに問題(あるいは解決策)があるのではないかと考え、MPDまわりのドキュメントとソースコードを読みあさることにした.
今まで、MPDのドキュメントを隅から隅まで眺めたことがなかったので気づかなかったが、マニュアルページの “Configuration” -> “Configuring filters” という項目があることに気付いた。ほんの数行の簡単な説明であったがその中に、
“Configured filters may then be added to the filters setting of an audio_output section, see Configuring audio outputs.”
と書かれており、”audio_output section” に使用するフィルタープラグインの情報を設定すれば良い旨のことが書かれていた.マニュアルのすぐ上の項目 “Configuring audio outputs” に、
audio_output {
type "alsa"
name "my ALSA device"
device "hw:0"
filters "volume"
}
filter {
plugin "volume"
name "software volume"
}
の様に記載しろと書かれている。どのようなフィルタープラグインがあるのか調べてみると、”Filter plugins” に、
“route” という名前のプラグインがあり、機能は “Reroute channels” となっている. この説明では、
routes “0>0, 1>1, …”
のように記載することになっている.”入力側Ch番号” > “出力側Ch番号” の組み合わせをチャネル数分記載すれば良いようだ.
この例に倣って、今回問題となっているチャネルマッピングを変更するために、”mpd.conf”ファイルに
audio_output {
type "alsa"
name "uda"
device "hw:0,0"
priority "FIFO:54"
mixer_type "disabled"
dsd_usb "no"
dsd_native. "yes"
dsd_native_type "3"
buffer_time "150000"
period_time. "37500"
filters "fix51chmap"
}
filter {
plugin "route"
name "fix51chmap"
routes "0>0,1>3,2>1,3>4,4>2,5>5"
}
filter {
plugin "route"
name "fix71chmap"
routes "0>0,1>4,2>1,3>5,4>2,5>6,6>3,7>7"
}
というような記載を書き加えてみたところ、何とあっさりとマルチチャネルPCM再生のチャネルマッピング問題が解決してしまった.あまりにも簡単な解決方法で、拍子抜けしてしまった.(今までの苦労は一体何だったんだろうか…)
マルチチャネルPCMデータの再生時にチャネルマッピングがおかしなことになる現象は、どうやらMPD(ALSA)側のチャネルアサインに問題があることが原因のようだが、FLACなどのファイル(データエンコード)形式では、5.1chの場合 FL, FR, FC, LFC, SL, SR の順に定義されているらしいが、それ以外ではこのチャネルの順序は環境依存で明確な規定はないらしい.
MPDのGitHubのページの “Discussions” に、“Channel order playing 5.1 audio files #2060” という問い合わせがあり、他にも今回と同じような現象に遭遇した人たちの事例が載っていた.
今回は MPD側の設定変更で問題を解決できたが、折角なので、LightMPD-BoticのカーネルのバージョンとLightMPDのルートイメージをカスタマイズしたバージョンを作成してみようと思う.LightMPDは基本的にRAMファイル上のLinuxシステムに構築されたシステムで、何時でも電源ブチッ(OFF)が可能な優れものなのだが、ユーザ側でカスタマイズすることが難しいという問題があるが、私のネットワークオーディオシステムとして今でも現役で活躍している優れものだ.
LightMPDのルートイメージの作成方法については、デジファイのおとさんが『lightMPDのrootイメージの作成方法(暫定版)』で、手順を公開しているので、LightMPDのカスタマイズ版を作成する場合の参考にすると良いだろう.記事の後半部分はまだ執筆されていなく、独自のパッケージの追加方法などについては自分で試行錯誤しなければならないだろう.
LightMPD-Boticを動かしているホストコンピュータのBeagleBone Black/Greenは現状ではまだ入手可能だが、Raspberry Piとは違って、世間からはほとんど忘れ去られた過去の遺物のような存在かもしれないが、TIのSoCに組み込まれた “McASP” によるI2S出力機能はとても強力なので、他のSoCチップメーカも同様な機能を組み込んで欲しいところだが、自作派以外のDACの選択肢はUSBしかないので、I2S出力でのDAC接続など眼中にないだろう.
BeagleBoneは秋月電子で取り扱ってくれていたが、秋月のホームページ上にはまだ BeagleBone Green が載っているので、自作派の方でBotic環境を利用したい場合は、早めに入手しておいた方が良いだろう。Digikeyなどでは比較的簡単に入手できるようだが、昔は5千円程度で購入可能な安価なボードだったが、今では高価なコンピュータボードになってしまったようだ.
昔から電子工作に携わってきたオーディオ自作派であれば、Botic用のインタフェース基板を自作することはそれ程難しいことではないが、電子工作の経験がないとLightMPD-Botic環境の構築は難しいだろう.ここ数年ネットワークオーディオ関連の話題も殆ど聞かなくなってしまったが、これまでネットワークオーディオを支えてきた人たちもどんどん高齢化して、オーディオ界隈から離れてしまったようだ.
ここ数年、ロックやジャズ、ソウル界の大御所たちの訃報の嵐が続いているが、長年Hi-Fiオーディオに携わってきた人たちも店じまいする人たちが多いようで寂しい限りだ.特にオーディオ自作派にとっては現在のオーディオを取り巻く状況は厳しいものがある.現在のHi-Fiオーディオ界隈は超弩級高額システムと安直な安物のオーディオ機器とに二極分化してしまっている.Hi-Fiオーディオ自作派はガラパゴスのゾウガメと同じようにもうじき絶滅種となってしまうのだろう.