ASoC框架分为3部分:
platform(用来描述芯片的DAI接口,负责数据传输):含有 DMADAI:snd_soc_dai_driver,
用来表示支持哪些格式数据,
提供设置格式的函数,
启动数据传输
数据传输:snd_soc_platform_driver
codec (用来描述音频编解码芯片,含有2部分:DAI接口,控制接口):DAI:snd_soc_dai_driver,
用来表示支持哪些格式数据,
提供设置格式的函数
控制接口:snd_soc_codec_driver
读写芯片的寄存器
machine (snd_soc_card,snd_soc_dai_link,用来确定使用哪一个platform,哪一个codec芯片)
最后会注册一个名为“soc-audio”的平台设备,
导致soc-core.c中的soc_probe函数被调用,
进而分配/设置/注册 snd_card ****************************************************
分配注册一个名为soc-audio的平台设备这个平台设备有一个私有数据 snd_soc_card snd_soc_card里有一项snd_soc_dai_link snd_soc_dai_link被用来决定ASOC各部分的驱动 3 snd_soc_dai_link 描述 A snd_soc_dai_link结构体中的部分成员,通过各种name的字符串描述了框架中使用的是哪一个平台,哪一个CPU DAI接口,哪一个codec,codec中的DAI接口等信息。 B 其中 平台 、CPU的DAI接口 、codec的名字 都使用的是 platform_device 和对应的 platform_driver的 .name (name 会被相关的函数 继承给 各个模块的结构体) 而 codec中的DAI 使用的是 static struct snd_soc_dai_driver 的 .name ****************************************************