OpenHarmony开源社区
直播中

软通动力HOS

3年用户 221经验值
擅长:EMC/MEI设计 EDA/IC设计 处理器/DSP
私信 关注
[经验]

RK系列开发板音频驱动适配指南(四)

RK系列开发板音频驱动适配指南(一)
RK系列开发板音频驱动适配指南(二)
RK系列开发板音频驱动适配指南(三)
RK系列开发板音频驱动适配指南(四)

背景:

经过DAI、DMA、Codec文章对RK系列开发板音频驱动适配指南已经阐述了,本次主要介绍音频驱动适配中的HCS适配。

RK系列开发板 HCS适配:

配置HCS的主要作用是完成各设备节点、服务的参数与私有数据配置,一般在设备驱动注册与初始化时加载到系统中,在音频处理场景中的各阶段使用。HDF框架提供了2组配置文件 ,分别是公用参数配置文件和设备私有数据配置的,公有参数须按HCS规范配置,私有数据配置既遵守HCS规范,开发者还可自定义配置项,并提供配置解析方法即可。

公有参数配置

  • 配置文件路径:
  • vendor\xxxx\RK系列开发板\hdf
  • 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";
\}
}

私有参数配置

  • 配置文件路径:
  • 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模块的驱动编译。

更多回帖

发帖
×
20
完善资料,
赚取积分