*参照元 [#i2602357]
#backlinks

*説明 [#e067dd67]
FIXME: なにをするもの?

-ALSA SoC Layer
--DAPM(Dynamic Audio Power Management)
---
--DAI(Digital Audio Interfaces)
---


**参考 [#b6bb99c9]


**関連モジュール [#m8242ada]

必要そうなものメモ。

-
--[[linux-4.4.1/snd_soc_platform_driver]]
--[[linux-4.4.1/snd_soc_register_platform()]]

-
--[[linux-4.4.1/snd_soc_component_driver]]
--[[linux-4.4.1/snd_soc_dai_driver]]
--[[linux-4.4.1/snd_soc_register_component()]]

-
--[[linux-4.4.1/snd_soc_register_card()]]


** 例 [#na2337a3]

platform_bus を使う場合、

 struct hoge_device {
     struct snd_soc_card card;
 };
 
 static int hoge_probe(struct platform_device *pdev)
 {
     struct hoge_device *d;
     struct device *dev = &pdev->dev;
     ...
     d = devm_kzalloc(dev, sizeof(struct hoge_device));
     ...
     snd_soc_register_platform(dev, &hoge_snd_soc_platform_driver);
     ...
     snd_soc_register_component(dev, &hoge_snd_soc_component_driver,
         hoge_snd_soc_dai_drivers, ARRAY_SIZE(hoge_snd_soc_dai_drivers));
     ...
     //FIXME: 他の手立てがありそう
     d->card.dev = dev;
     snd_soc_card_set_drvdata(&d->card, d);
     snd_soc_register_card(&d->card);
     ...
     return 0;
 }

-ドライバの固有情報の保存場所について
--pdev->dev と d->card.dev が同じ device を指しているため、platform_set_drvdata() で pdev->dev->driver_data に書くのは NG です。
--snd_soc_register_card() が card->dev->driver_data を上書きするため、消えてしまいます。
--おそらく snd_soc_card_set_drvdata() を使って、card->drvdata に保存すべきでしょう。
--[[linux-4.4.1/platform_get_drvdata()]]
--[[linux-4.4.1/platform_set_drvdata()]]
--[[linux-4.4.1/snd_soc_card_get_drvdata()]]
--[[linux-4.4.1/snd_soc_card_set_drvdata()]]

 static int hoge_remove(struct platform_device *pdev)
 {
     struct snd_soc_card *card = platform_get_drvdata(pdev);
     struct hoge_device *d = snd_soc_card_get_drvdata(card);
     struct device *dev = &pdev->dev;
     ...
     snd_soc_unregister_card(&d->card);
     ...
     snd_soc_unregister_component(dev);
     ...
     snd_soc_unregister_platform(dev);
     ...
     return 0;
 }
 
 static struct platform_driver hoge_driver = {
     .driver = {
         .name = "hoge",
     },
     .probe = hoge_probe,
     .remove = hoge_remove,
 };
 module_platform_driver(hoge_driver);


*コメント [#vd3dc98b]

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS