1 因为 snd_soc_register_codec snd_soc_register_dai 函数都需要 platform_device 相关数据。
所以 在probe 函数中调用
2 snd_soc_register_codec 中 snd_soc_codec_driver 没用name,那么它会继承 probe函数的参数 platform_device的名字
同样 snd_soc_register_dai中的 snd_soc_dai_drive 也没用name,它也会继承 probe函数的参数 platform_device的名字。
3
codec 跟 platform 都用 snd_soc_dai_driver 用来描述 各自的dai
snd_soc_codec_driver 中的 ops 涉及到 启动 关闭 参数设置
4
控制接口:snd_soc_codec_driver 作为codec的驱动,跟 snd_soc_platform_driver 驱动一样辅助自己模块的dai。
codec注意 :
1
.codec_name = “wm8976-codec”, // 对应驱动 codec 文件
.codec_dai_name = “wm8976-iis”, // 对应驱动 codec 文件
.cpu_dai_name = “s3c2440-iis”,
2 其中两个name 会出现在 codec 文件中
3
两个关键点
DAI:snd_soc_dai_driver 描述的是codec的参数
控制接口:snd_soc_codec_driver
4
int snd_soc_register_codec(struct device *dev,
const struct snd_soc_codec_driver *codec_drv,
struct snd_soc_dai_driver *dai_drv,
int num_dai)
上面两个关键点 通过这个函数进行绑定
5 snd_soc_codec_driver (控制接口) 是做什么的?
猜测是 对codec 进行读写
参考
Alsa驱动snd_soc_read_driver的实现
platform注意:
1
关键点
DAI:snd_soc_dai_drive
2
使用
snd_soc_register_dai 对 snd_soc_dai_drive结构体进行注册
3
snd_soc_dai_drive 描述的是 平台(platform)的参数
platform 扩展
1 关键点
snd_soc_platform_driver
2 snd_soc_platform_driver 作用 (用来控制,似乎主流是dma。辅助cpu跟dai)
a 负责管理音频数据
b 把音频数据通过dma或其他操作传送至cpu dai
3 链接函数
snd_soc_register_platform (同样会使 snd_soc_platform_driver 继承 platform_device 的name
4 snd_soc_platform_driver 中的 ops 中的 open函数会
把snd_pcm_substream中的runtime中的hw 成员进行赋值,类型是snd_pcm_hardware.
(platform 里面的ops的open,会在应用层的open设备节点的时候,就调用)