- 履歴一覧
- 履歴 を表示
- linux-2.6/ALSA は削除されています。
*参照元 [#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]