乐趣区

关于openharmony:RK系列开发板音频驱动适配指南四

背景:

通过 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 模块的驱动编译。

退出移动版