MTK Android5.1 单独调整主副麦的模拟增益PGA(MT6350_PMIC)

news/2024/12/22 15:10:11/

MTK Android5.1 单独调整主副麦的模拟增益PGA(MT6350_PMIC)

项目使用副麦消噪,但是副麦增益太小,需要单独修改副麦增益,使用工程模式APP和Audio Tuning Tool调整的MIC的Level4的值,都会同时调整主麦和副麦的增益,而且这个调整的增益应该是数字增益!其实,主麦和副麦模拟信号进入PMIC之后,还是分别有一个模拟增益的调整的,不过好像工程模式APP和Audio Tuning Tool的工具没办法调整,需要去源码找!

先看两张图:


从图上可以看到,主麦VIN0和耳机麦VIN1进来之后,有一个名字叫PGAL的放大器,然后才到ADCL的模数转换器,副麦VIN2进来之后,有一个名字叫PGAR的放大器,然后才到ADCR的模数转换器。可以看到PGA的增益调节范围是-6dB~24dB,每6个dB一级。

再看PMIC的寄存器控制:




可以看到,寄存器AUDTOP_CON0的bit4到bit6控制PGAL的增益,也就是主麦增益,寄存器AUDTOP_CON1的bit8到bit10控制PGAR的增益,也就是副麦增益,范围都是-6dB~24dB,总共6个挡,每6个dB一挡。

知道了寄存器名字,去源码里面找,找到目录:kernel/sound/soc/mediatek/mt_soc_audio_6580/mt_soc_codec_63xx.c
里面有两个函数如下:

static int Audio_PGA1_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
{int index = 0;int index2 = 5;printk("%s()\n", __func__);if (ucontrol->value.enumerated.item[0] > ARRAY_SIZE(ADC_UL_PGA_GAIN)){printk("return -EINVAL\n");return -EINVAL;}index = ucontrol->value.integer.value[0];printk("%s(),index=%d\n", __func__,index);//index = index / 6;if (index > index2){index = index2;}//const int PreAmpGain[] = {-6, 0, 6, 12, 18, 24};//index2 -= index;printk("%s(),index=%d,index2=%d\n", __func__,index,index2);Ana_Set_Reg(AUDTOP_CON0, index << 4, 0x00000070);mCodec_data->mAudio_Ana_Volume[AUDIO_ANALOG_VOLUME_MICAMP1] = ucontrol->value.integer.value[0];return 0;
}static int Audio_PGA2_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
{int index = 0;int index2 = 5;printk("%s()\n", __func__);if (ucontrol->value.enumerated.item[0] > ARRAY_SIZE(ADC_UL_PGA_GAIN)){printk("return -EINVAL\n");return -EINVAL;}index = ucontrol->value.integer.value[0];printk("%s(),index=%d\n", __func__,index);if (index > index2){index = index2;}//const int PreAmpGain[] = {-6, 0, 6, 12, 18, 24};printk("%s(),index=%d\n", __func__,index);Ana_Set_Reg(AUDTOP_CON1, index << 8, 0x00000700);mCodec_data->mAudio_Ana_Volume[AUDIO_ANALOG_VOLUME_MICAMP2] = ucontrol->value.integer.value[0];return 0;
}

第一个函数Audio_PGA1_Set设置PGAL主麦的增益Ana_Set_Reg(AUDTOP_CON0, index << 4, 0x00000070)index就是要写入寄存器bit4到bit6的值,范围是0~5,对应-6, 0, 6, 12, 18, 24这几个dB增益;
第二个函数Audio_PGA2_Set设置PGAR副麦的增益Ana_Set_Reg(AUDTOP_CON1, index << 8, 0x00000700),同样的,index范围是0~5,对应-6, 0, 6, 12, 18, 24这几个dB增益。

接下来修改一下index的值,看看有没有效果。通过串口log,知道了我的机器的index默认值是2,也就是6dB,现在做如下修改:

static int Audio_PGA2_Set(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
{......printk("%s(),index=%d\n", __func__,index);index = 5;    //强制设置增益的级别Ana_Set_Reg(AUDTOP_CON1, index << 8, 0x00000700);mCodec_data->mAudio_Ana_Volume[AUDIO_ANALOG_VOLUME_MICAMP2] = ucontrol->value.integer.value[0];return 0;
}

将控制副麦PGA的index强制设置为5,也就是24dB,然后再次录音,看以下两图对比:


可以看到,修改之前,副麦的增益很小,修改之后,副麦增益变大,但是主麦修改前后都没有变!!
因为只改了Audio_PGA2_Set这个函数,这个控制副麦,修改Audio_PGA1_Set函数,就可以看到主麦增益的变化了!

注意,这里修改的都是模拟增益,是麦克风的模拟电信号进入PMIC之后,直接放大的,所以,对于系统的所有模式都有影响,无论是通话还是普通录音!

但是这是强制修改了系统,不推荐使用,项目最终也没有用这种修改,是在上层做的,感兴趣的可以追一下这两个函数的调用,到hal层以及上层audio服务,index的值就是上层写下来的!


http://www.ppmy.cn/news/172589.html

相关文章

HDU 6350 Always Online(最大流+并查集)

Description 给出一个 n n 个点m" role="presentation" style="position: relative;">mm条边的无向图&#xff0c;任意两点之间至多两条路径&#xff0c;以 flow(s,t) f l o w ( s , t ) 表示 s,t s , t 两点之间的最大流&#xff0c;求 ∑1≤s&l…

zabbix通过SNMP V3监控华为防火墙USG6350

1.华为防火墙开启snmp V3(图形界面配置) 防火墙接口开启SNMP服务&#xff08;找到通往zabbix服务器的那个网络接口或VLAN&#xff0c;这步很重要&#xff01;&#xff09; 找到通往zabbix服务器的那个网络接口或VLAN 防火墙配置完成&#xff01; 2.配置zabbix服务器端 yum …

USG 6350 SFTP 配置

进入视图模式 system-view interface GigabitEthernet 1/0/0 service-manage ssh permit service-manage enable 启用 sftp sftp server enable VTY认证 user-interface vty 0 4 authentication-mode aaa protocol inbound ssh user privilege level 3 新建用户名为SFTP的…

[Linux Audio Driver] SM6350平台音频bring up ( 一 )

0. 背景 这个是高通5G平台&#xff0c;音频的内容改的比较多&#xff0c;比较直接的是platform.c就直接移动到vendor了&#xff1b;目前 高通那边的趋势还是把音频逐渐从kernel剥离&#xff0c;android 7/android 8的时候&#xff0c;machine driver&#xff0c;codec driver都…

华为USG6350防洪墙SNMP最简单功能配置

https://www.cnblogs.com/vincent-liang/p/7785089.html

spring cloud搭建(service)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Markdown 语法的使用

1.标题的使用 #加空格 代表一级标题 &#xff0c;##加空格代表二级标题&#xff0c;一次类推&#xff0c;最多支持六级标题。 2.文本居中 <center>这是要居中的文本内容</center> 3.插入图片 方式简单粗暴 直接截图粘贴。 4.超链接 第一种&#xff1a;百度一…

“超低能,劲搞笑”笑话管理系统 v2.0

导读&#xff1a; 1、常规管理 网站管理、公告管理、发布公告、留言管理、模板管理、评论管理 2、FSO生成管理 生成首页、生成栏目、生成内容页 3、文章管理 发表文章、文章管理、栏目管理 默认后台地址:admin/login.asp 用户名admin 密码admin 上传后需要重新生成所…