背景:
通过DAI、DMA、Codec文章对RK系列开发板音频驱动适配指南曾经论述了,本次次要介绍音频驱动适配中的HCS适配。
RK系列开发板 HCS适配:
配置HCS的次要作用是实现各设施节点、服务的参数与公有数据配置,个别在设施驱动注册与初始化时加载到零碎中,在音频解决场景中的各阶段应用。HDF框架提供了2组配置文件 ,别离是专用参数配置文件和设施公有数据配置的,私有参数须按HCS标准配置,公有数据配置既恪守HCS标准,开发者还可自定义配置项,并提供配置解析办法即可。
1.1.私有参数配置
•配置文件门路:
vendor\xxxx\RK系列开发板\hdfconfig\khdf\deviceinfo
•DAI模块:
device_dai0 :: device { device0 :: deviceNode { policy = 1; // dai模块只对内核提供服务 priority = 50; // dai模块需在HDF_AUDIO模块之前加载 preload = 0; // dai模块加载形式 permission = 0666; // dai模块拜访权限 moduleName = "DAI_RK系列开发板"; // 模块名,与g_daiDriverEntry中的模块名统一 serviceName = "dai_service"; // 对外提供的服务名称 deviceMatchAttr = "hdf_dai_driver"; //公有配置属性名称,通过此名称匹配对应的公有数据 }}
•DMA模块:
device_dma :: device { device0 :: deviceNode { policy = 1; priority = 50; preload = 0; permission = 0666; moduleName = "DMA_RK系列开发板"; // 模块名,与g_platformDriverEntry中的模块名统一 serviceName = "dma_service_0"; deviceMatchAttr = "hdf_dma_driver"; }}
•Codec模块:
device_codec_ex :: device { device0 :: deviceNode { policy = 1; priority = 50; preload = 0; permission = 0666; moduleName = "CODEC_ES8316"; // 模块名,与g_es8388DriverEntry中的模块名统一 serviceName = "codec_service_1"; deviceMatchAttr = "hdf_codec_driver_ex"; }}
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 ]; }}
总结:
加上前三篇RK系列开发板音频驱动的适配介绍,以及本次介绍HCS的适配步骤以及外围代码,音频驱动的适配,根本就实现了。接下来一篇会解说Audio模块的驱动编译。