*参照元 [#pb5fc51f]
#backlinks

*説明 [#v7b2bce4]
せつめい

-これはなに?



*とりあえずメモ領域 [#wff83999]



*snd-soc-core.ko [#f31d8674]

**SoC のサウンドカードドライバが使う共通モジュール。 [#l720faab]

-/lib/modules/current/kernel/sound/soc/snd-soc-core.ko
にインストールされる。
--中心となるのは [[linux-2.6.33/sound/soc/soc-core.c]] など。


**謎な点 [#obdf1200]

-snd_soc_new_pcms()?
--AC97 限定なのか??
--sound/soc/codecs/ の下でしか呼ばれないのはなぜ?
-snd_soc_register_dai()?
--これも AC97 絡み??
-snd_soc_register_platform()?


**デバイス追加時の動き [#xb5b7cce]

-snd-soc-core は init 時に "soc-audio" という名前のドライバを
platform バスに登録する。
--[[linux-2.6.33/snd_soc_init()]]

-SoC 用サウンドカードドライバなどが、
platform バスに "soc-audio" ドライバを使う platform デバイスを追加したとき、
snd-soc-core の soc_probe 関数(probe コールバック)が呼ばれる。
--/sys/bus/platform/drivers にて platform バスのドライバ一覧が見られる。
--[[linux-2.6.33/soc_probe()]]

 デバイスの追加の仕方(SoC 用サウンドカードドライバ側の init などで行う)
 ------------------------------------------------------------------------
 struct snd_soc_device soc_dev = {
 	...
 };
 
 static int __init xxxx_soc_init(void)
 {
 	dev = platform_device_alloc("soc-audio", -1); //★1
 	
 	platform_set_drvdata(dev, &soc_dev); //★2
 	soc_dev.dev = &dev->dev; //★3
 	ret = platform_device_add(dev);
 	
 	(...)
 }

-説明
--★1: "soc-audio" ドライバを使う platform デバイスを作成する。
--★2: platform デバイスに snd_soc_device へのポインタを持たせる。
--★3: snd_soc_device の dev メンバは、platform デバイスが持っている dev メンバと同じデバイス構造体を指す。

-soc_probe 以降は下記のような処理が行われる。
--[[linux-2.6.33/soc_probe()]]
--[[linux-2.6.33/snd_soc_register_card()]]
--[[linux-2.6.33/snd_soc_instantiate_cards()]]
--[[linux-2.6.33/snd_soc_instantiate_card()]]

** snd_soc_instantiate_card での処理 [#pfe8fd41]

-card の probe コールバック
--snd_soc_card の probe 関数ポインタをコールバックする。
--[[linux-2.6.33/snd_soc_card]]

-cpu_dai の probe コールバック
--snd_soc_card の dai_link(snd_soc_dai_link 型の配列へのポインタ)の全要素に対して、
cpu_dai(snd_soc_dai 型)の
probe 関数ポインタをコールバックする。
--[[linux-2.6.33/snd_soc_dai_link]]
--[[linux-2.6.33/snd_soc_dai]]

-device の probe コールバック
--snd_soc_device の codec_dev(snd_soc_codec_device 型のポインタ)の
probe 関数ポインタをコールバックする。
--[[linux-2.6.33/snd_soc_device]]
--[[linux-2.6.33/snd_soc_codec_device]]

-platform の probe コールバック
--snd_soc_platform の
probe 関数ポインタをコールバックする。
--snd_soc_card が要求している platform と一致する platform が ALSA に登録されていることが前提。
登録された platform の一覧は platform_list にある。
--[[linux-2.6.33/snd_soc_platform]]
--[[linux-2.6.33/platform_list(global)]]

-dai_link の init コールバック
--snd_soc_card の dai_link(snd_soc_dai_link 型の配列へのポインタ)の全要素に対して、
init 関数ポインタをコールバックする。





*コメント [#g357d405]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS