背景:
经过DAI、DMA、Codec文章对RK系列开发板音频驱动适配指南已经阐述了,本次主要介绍音频驱动适配中的HCS适配。
RK系列开发板 HCS适配:
配置HCS的主要作用是完成各设备节点、服务的参数与私有数据配置,一般在设备驱动注册与初始化时加载到系统中,在音频处理场景中的各阶段使用。HDF框架提供了2组配置文件 ,分别是公用参数配置文件和设备私有数据配置的,公有参数须按HCS规范配置,私有数据配置既遵守HCS规范,开发者还可自定义配置项,并提供配置解析方法即可。
1.1.公有参数配置
•配置文件路径:
vendor\xxxx\RK系列开发板\hdfconfig\khdf\deviceinfo
•DAI模块:
•DMA模块:
•Codec模块:
1.2.私有参数配置
•配置文件路径:
vendor\xxxx\RK系列开发板\hdf_config\khdf\audio
•audio_config.hcs:audio声卡配置信息,配置选择运行时的codec、dai、dma、dsp具体芯片:
controller_0x120c1000 :: card_controller {
match_attr = "hdf_audio_driver_0"; //私有配置关键字,通过此与 device_info.hcs中的各个模块的私有属性进行匹配
serviceName = "hdf_audio_codec_dev0"; //此声卡对外提供的服务名称
codecName = "codec_service_0"; //此声卡使用的codec服务名称
platformName = "dma_service_0"; //此声卡使用的dma服务名称
cpuDaiName = "dai_service"; //此声卡使用的cpu dai服务名称
codecDaiName = "codec_dai"; //此声卡使用的codec dai服务名称
dspName = "dsp_service_0"; //此声卡使用的dsp服务名称
dspDaiName = "dsp_dai"; //此声卡使用的dsp dai服务名称
}
controller_0x120c1001 :: card_controller {
match_attr = "hdf_audio_driver_1";
serviceName = "hdf_audio_smartpa_dev0";
accessoryName = "codec_service_1";
platformName = "dma_service_0";
cpuDaiName = "dai_service";
accessoryDaiName = "accessory_dai";
dspName = "dsp_service_0";
dspDaiName = "dsp_dai";
}
•dai_config.hcs:dai的私有配置信息:
controller_0x120c1020 :: dai_controller {
match_attr = "hdf_dai_driver"; //cpu dai私有配置关键字
serviceName = "dai_service"; //配置对应的服务名称,要和device_info.hcs中的cpu dai模块服务名称相同
idInfo {
chipName = "RK系列开发板";
chipIdRegister = 0xff880000;
chipIdSize = 0x1000;
}
regConfig {
ctrlParamsSeqConfig = [
0xffffff, 0xffffff, 0, 0, 0x0, 0x2, 0x3, 0, 0, // accessory enable
0xffffff, 0xffffff, 0, 0, 0x0, 0x2, 0x3, 0, 0 // codec enable
];
controlsConfig = [
6, 4, 0,
7, 4, 0
];
daiStartupSeqConfig = [
0x0000, 0x0000, 0, 0, 0, 0xF, 0xF, 0, 0xf, // AIP_I2S_REG_CFG0
0x0004, 0x0004, 0, 0, 0, 0xF, 0xF, 0, 0xf, // AIP_I2S_REG_CFG1
0x0008, 0x0008, 0, 0, 0, 0xFFFFF, 0xFFFFF, 0, 0x00071f1f,
0x0010 0x0010, 16,16,0, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0x1f0100
];
daiParamsSeqConfig = [
0x0008, 0x0008, 16, 16, 0x0, 0xFF, 0xFF, 0, 0x0, // ao i2s_frequency
0x0008, 0x0008, 0, 0, 0x1E, 0xFF, 0xFF, 0, 0x0, // ao i2s_frequency
0x0000, 0x0000, 0, 0, 0x0, 0xF, 0xF, 0, 0x0, // ao i2s_format
0x0000, 0x0000, 15, 15, 0x0, 0x3, 0x3, 0, 0x0, // ao i2s_channel
0x0008, 0x0008, 16, 16, 0x0, 0xFF, 0xFF, 0, 0x0, // ai i2s_frequency
0x0008, 0x0008, 8, 8, 0x1E, 0xFF, 0xFF, 0, 0x0, // ai i2s_frequency
0x0004, 0x0004, 0, 0, 0x0, 0xF, 0xF, 0, 0x0, // ai i2s_format
0x0004, 0x0004, 15, 15, 0x0, 0x3, 0x3, 0, 0x0 // ai i2s_channel
];
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
总结:
加上前三篇RK系列开发板音频驱动的适配介绍,以及本次介绍HCS的适配步骤以及核心代码,音频驱动的适配,基本就完成了。接下来一篇会讲解Audio模块的驱动编译。