soc駆動、学習分析
カーネルドライブ.
デバイス--バス--駆動.3つの間の関連.
概要
最近はサウンドカードの駆動に関するものを作っているからです.従って,本論文では,soc下のwm 9713のサウンドカードフローを解析した.およびsocの部分.
(1)どこから来ましたか.
デバイス--バス--駆動.3つの間の関連.
概要
最近はサウンドカードの駆動に関するものを作っているからです.従って,本論文では,soc下のwm 9713のサウンドカードフローを解析した.およびsocの部分.
(1)どこから来ましたか.
//sound/soc/soc-core.c
static int __devinit snd_soc_init(void)
{
printk(KERN_INFO "ASoC version %s
", SND_SOC_VERSION);
return platform_driver_register(&soc_driver);
}
/* ASoC platform driver */
static struct platform_driver soc_driver = {
.driver = {
.name = "soc-audio",
},
.probe = soc_probe,
.remove = soc_remove,
.suspend = soc_suspend,
.resume = soc_resume,
};
/* probes a new socdev */
static int soc_probe(struct platform_device *pdev)
{
int ret = 0, i;
struct snd_soc_device *socdev = platform_get_drvdata(pdev);
struct snd_soc_machine *machine = socdev->machine;
struct snd_soc_platform *platform = socdev->platform;
struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
// probe。
// soc s3c 。 smdk2450_wm9713.c
if (machine->probe) {
ret = machine->probe(pdev);
if(ret < 0)
return ret;
}
for (i = 0; i < machine->num_links; i++)
{
struct snd_soc_cpu_dai *cpu_dai = machine->dai_link[i].cpu_dai;
if (cpu_dai->probe) {
ret = cpu_dai->probe(pdev);
if(ret < 0)
goto cpu_dai_err;
}
}
if (codec_dev->probe) {
ret = codec_dev->probe(pdev);
if(ret < 0)
goto cpu_dai_err;
}
if (platform->probe) {
ret = platform->probe(pdev);
if(ret < 0)
goto platform_err;
}
//......
return ret;
}