Linux 音频(五)Machine 驱动

1.概述

        前面章节介绍了codec与platform驱动,但是仅仅只有这两个驱动,是无法构成一个完整的声卡来进行正常的工作的,需要Machine驱动来把他们串起来。个人理解machine驱动就是用来实例化一个声卡节点的,一般在Linux下 /proc/asound/cards。

2.代码研究

        一般通用的machine驱动在的路径是kernel\sound\soc\generic\simple-card.c,此驱动可以适用于一般的场景。

        不过上述这个驱动只适用单个codec对单个dai,rk为了支持多个dai对多个codec  做了kernel\sound\soc\rockchip\rockchip_multicodecs.c这个新machine驱动,接下来将以此驱动展开概述。

2.1关键的数据结构

        2.1.1 snd_soc_dai_link

        

截取了部分 主要说几个关键字段。

        cpu_dai_name:音频链路需要找到cpu_dai对应的名称,platform 驱动在probe的时候会去把这个字段添加到dai_list,machine驱动会去遍历找到同名的。

        platform_name:machine驱动音频链路需要遍历platform_list名称,找到对应与之相符的。

        codec_name:machine驱动音频链路需要遍历codec_list名称,找到对应与之相符的。

        codec_dai_name:machine驱动音频链路需要遍历codec_dai_list名称,找到对应与之相符的。

        ops:一些关键的回调函数。用于配置codec_dai cpu_dai 系统时钟。

2.2 dts配置:

        一般关键的就这些字段,当然还有一些别的字段就不一一列举了,在machine驱动中会去一一解析这些字段再把platform驱动与codec驱动串起来。

  2.3  rockchip_multicodecs.c

匹配还是会用到Linux platform设备总线框架,不过与大多数不通的是,这个文件没有写Init接口,而是用了另外个宏module_platform_driver

        这个宏其实就是写了 init 与 exit接口来调用platform_driver_register,platform_driver_unregister来装载卸载驱动。

        匹配成功后调用probe函数解析设备树对应信息,给dai_link结构体赋值,后续会调用到

devm_snd_soc_register_card->snd_soc_register_card来注册声卡。

        主要调用流程如下图:

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值