完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Platform: Rockchip
OS: Android 6.0 Kernel: 3.10.92 Audio HAL控制驱动中的寄存器是通过kcontrol结构实现的,kcontrol有多种类型,如mixer, mux等,由struct snd_kcontrol_new表示。 简单型控件: 只有一个控制量,比如一个开关。如: static const struct snd_kcontrol_new rt3261_snd_controls[] = { SOC_SINGLE("Mono Playback Switch", RT3261_MONO_OUT, RT3261_L_MUTE_SFT, 1, 1), }; 名字是”Mono Playback Switch”, 寄存器是RT3261_MONO_OUT, 控制的bit位是RT3261_L_MUTE_SFT 对应的宏定义: SOC_SINGLEMixer控件: 用于音频通道的路由控制,由多个输入和一个输出组成,多个输入可以自由地混合在一起,形成混合后的输出。 对于Mixer控件,我们可以认为是多个简单控件的组合,通常,我们会为mixer的每个输入端都单独定义一个简单控件来控制该路输入的开启和关闭,反应在代码上,就是定义一个soc_kcontrol_new数组,如 static const struct snd_kcontrol_new rt3261_dig_l_mix[] = { SOC_DAPM_SINGLE("DAC L1 Switch", RT3261_DIG_MIXER, RT3261_M_STO_L_DAC_L_SFT, 1, 1), SOC_DAPM_SINGLE("DAC L2 Switch", RT3261_DIG_MIXER, RT3261_M_DAC_L2_DAC_L_SFT, 1, 1), }; 宏定义和前者一样。 Mux控件: mux控件与mixer控件类似,也是多个输入端和一个输出端的组合控件,与mixer控件不同的是,mux控件的多个输入端同时只能有一个被选中。如: static const struct snd_kcontrol_new rt3261_sto_adc_l1_mux = SOC_DAPM_ENUM("Stereo ADC L1 source", rt3261_stereo_adc1_enum); 对应的宏定义: SOC_ENUM还有很多衍生版本: SOC_ENUM_SINGLE_EXT,SOC_VALUE_ENUM_DOUBLE等。 不管如何定义,最终都会提供给用户空间三个关键接口(函数指针): info: 获取当前kcontrol支持信息。 get: 获取当前kcontrol信息。 put: 设置kcontorl信息。 用户空间对kcontrol的控制接口通过ioctl进行,cmd是SNDRV_CTL_IOCTL_ELEM_WRITE。 目前平台有两个模块有调用: 1. tinymix自带部分。 位于 external/tinyalsa/mixer.c 2. rk audio HAL部分。 位于hardware/rockchip/audio/tinyalsa_hal/alsa_mixer.c |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1475 浏览 1 评论
RK3568平台,进入烧录模式,部分电脑提示无法识别,无法烧录
4724 浏览 1 评论
【RK3568 Android11.0】如何在设置-显示-HDMI-分辨率设置中添加3840*2160的选项?
7223 浏览 1 评论
瑞芯微第二代8nm高性能AIOT平台 RK3576 详细介绍
1761 浏览 0 评论
7330 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-15 20:20 , Processed in 0.712985 second(s), Total 76, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号