Linux 音频 (三)Codec驱动

本文详细解释了codec驱动在Linux平台中的应用,以es8323和es8388芯片为例,涉及I2C配置、codec驱动的注册过程,特别是snd_soc_register_codec函数的作用,以及关键结构体如snd_soc_dai_driver和snd_soc_codec_driver的解释。
摘要由CSDN通过智能技术生成

1 简介

        一般就是用于 A/D 与 D/A转换编解码等等。

2 codec 驱动代码解析

2.1 codec常见功能部件

        

2.2 codec驱动分析

2.2.1 注册

        主控为rk的平台,以es8323.c为例(es8388也可以用此驱动)来进行分析,目前用的是es8388这个芯片

        由于es8388  在我的板子上是挂在i2c0这个总线 下所以配置的dts也应该对应上。

        对于i2c 子系统不太了解的 可以查阅我之前写的文章

linux i2c驱动(三)I2C主从设备驱动-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Terrble_liar/article/details/137709501?spm=1001.2014.3001.5502

     对应的设备树如下:

               

        主要看es8388 这个节点  

        compatible 与 驱动中对应上 原本是没有es8388的 可以自行添加。

匹配成功后调用到es8323_i2c_probe  根据此函数展开分析。probe中会调用到snd_soc_register_codec 用来注册 codec的设备driver 与 dai driver,有些codec驱动可能用的是snd_soc_register_component,不过都是大同小异的 我们就snd_soc_register_codec来分析。

        调用到snd_soc_register_codec主要会做以下三个事情

                1.初始化component结构体的关键的成员,dai_drv  component_drv等等。

                2.获取dapm(Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思)的资源。

                3.注册codec这段的dai驱动。把dai 与 component联系起来

2.2.2 关键的结构体

路径 kernel\include\sound\soc.h

struct snd_soc_component:

             codec这段的组件 里面会包含 snd_soc_dai_driver也就是codec端dai控制器的驱动以及snd_soc_component_driver,可以理解为codec其他一些功能组件的驱动。

snd_soc_dai_driver:

        关键点会包含snd_soc_dai_ops,里面包含了一些dai的功能,列如启动关闭等等相关的一些操作。

可以看到在es8388的驱动中都是有相关实现的。

snd_soc_codec_driver:

        codec本身的driver相关的一些函数接口,列如probe remove,IO操作等等。

        

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值