背景:
前两篇文章曾经具体解说了 DAI 驱动适配、DMA 驱动适配,本次次要介绍音频驱动适配中的 Codec 模块适配。
RK 系列开发板 ES8388 Codec 模块适配:
Codec 其次要作用是对 PCM(Pulse Code Modulation)或 Mic、Linein 等输出的信号进行 D / A 或 A / D 转换,并对音频信号做出相应的解决,如音量控制等;且对音频通路进行管制。Soc 与 Codec 别离通过 I2S 实现音频数据传输,通过 I2C 与实现管制信号传输(非 SoC 内置的 Codec 时), 其中 I2C 驱动由 HDF 框架提供。ADM 定义的 Codec 接口包含:Codec 设施初始化、读写寄存器、Codec DAI 初始化、Codec DAI 启动和 Codec DAI 下发硬件参数共 6 个接口。
在适配器模块中实例化 ADM 定义的 DAI 两个构造体:CodecData(Codec 数据集)、DaiData(Codec 端 DAI 数据集)和 AudioDaiOps(Codec 端 DAI 操作集);在操作集模块中实现 Codec 的业务接口函数, 若非 SoC 内置 Codec 时,则还须要实现通过 I2C 读写 Codec 寄存器的性能函数;配置 Codec 设施节点私有参数,若有须要,则可配置 Codec 相干寄存器信息等公有参数。
文件门路与构造:
– 文件门路:device/rockchip/RK 系列开发板 /audio/codec
– 文件构造
├── codec
├── include
│ └── es8388_codec_ops.h
└── src
├──es8388_codec_adapter.c
└──es8388_codec_ops.c
RK 系列开发板 Codec 模块关系:
1.1.es8388 codecadapter
•实例化 Codec 数据集:g_es8388Data,核心成员字段值定义如下:
Init = Es8388DeviceInit;
Read = Es8388DeviceRegRead;
Write = Es8388DeviceRegWrite。
•实例化 Codec 端 DAI 操作集:g_es8388DaiDeviceOps,核心成员字段值定义如下:
Startup = Es8388DaiStartup;
HwParams = Es8388DaiHwParams。
•实例化 Codec 端 DAI 数据集:g_es8388DaiData,核心成员字段值定义如下:
DaiInit = Es8388DaiDeviceInit;
drvDaiName = “codec_dai”,Codec 端 DAI 驱动名称
ops = &g_es8388DaiDeviceOps,Codec 端 DAI 操作集地址。
•实例化 HdfDriverEntry 类型的 Codec 驱动实体:g_es8388DriverEntry,核心成员字段值定义如下:
moduleVersion = 1,模块版本号;
moduleName = “CODEC_ES8388″,模块名;
Bind = CodecDriverBind;
Init = CodecDriverInit;
Release = CodecDriverRelease。
Codec 驱动注册到鸿蒙零碎:HDFINIT(ges8388DriverEntry)。
•实现以下函数:
CodecDriverInit,Codec 驱动初始化函数;
CodecDriverBind,Codec 驱动绑定函数;
CodecDriverRelease,Codec 驱动开释函数。
1.2.es8388codecops
•实现以下函数:
Es8388DeviceInit,初始化 Codec 设施函数;
Es8388DeviceRegRead,读 Codec 设施寄存器函数;
Es8388DeviceRegWrite,写 Codec 设施寄存器函数;
Es8388DaiDeviceInit,初始化 Codec 端 DAI 设施函数;
Es8388DaiStartup,启动 Codec 端 DAI 设施函数;
Es8388DaiHwParams,下发 Codec 端 DAI 硬件参数函数。
总结:
本文具体介绍 Codec 模块适配步骤以及外围代码,联合前两篇的音频驱动适配文章置信读者会对音频适配根本曾经把握了外围点,之后的文章中,会逐渐更新音频驱动的 Audio HCS 配置等。