已绑定手机 已实名认证
|
1. K类功放驱动代码请根据功放IC datasheet去写,比如操作GPIO16发出脉冲来设置K类功放;PA控制函数GPIO_EnableAmplifier。
Pinmap_cfg.c,
-- {PIN_IISDI_REG, (PIN_SLP_Z|PIN_SPD_EN|PIN_FUNC_3|PIN_FPD_EN|PIN_BSR_WPX|PIN_DS_0|PIN_DSLP_EN)},
++ {PIN_IISDI_REG, (PIN_SLP_OE|PIN_SPX_EN|PIN_FUNC_3|PIN_FPX_EN|PIN_BSR_WPX|PIN_DS_0|PIN_DSLP_EN)},
...
{52, 1, PM_OUTPUT, PM_NO_INT },//CAM_PWDN0
++ {16, 0, PM_OUTPUT, PM_NO_INT },
gpio_cfg.c,
-- {GPIO_PROD_SPEAKER_PA_EN_ID, GPIO_PROD_TYPE_BB0, GPIO_PROD_HIGH_LEVEL, GPIO_PROD_NUM_INVALID, (GPIO_CB)_GPIO_OpenPA },
++ {GPIO_PROD_SPEAKER_PA_EN_ID, GPIO_PROD_TYPE_BB0, GPIO_PROD_HIGH_LEVEL, 16, PNULL},
以上修改后,16脚就能输出高低电平了;如果需要发N个脉冲来设置K类功放工作模式,那么请修改:
PUBLIC void GPIO_EnableAmplifier (BOOLEAN b_enable)
{
if (_GPIO_Check_Amplifier_Share())
{
_GPIO_Control_Amplifier_Shared (SCI_FALSE,b_enable);
}
else
{
_GPIO_PROD_SetVal (GPIO_PROD_SPEAKER_PA_EN_ID, b_enable); //自行修改此处
}
}
2. 修改音频通路(外放模式走耳机通路)。
nv修改:
audio_arm/audio_arm/Handsfree/AudioStructure/dev_path_set/dev_set[0] = 0x32
audio_dsp_codec/dsp_codec_config/Handsfree/AudioStructure/path_set = 0x61F
代码修改:
armvb_as.c,
ARMVB_SetVolumeType,
else if(AUDIO_DEVICE_MODE_HANDFREE == cur_dev_mode)
{
-- ARMVB_SetPgaLevel(0,AUDIO_ALL_CHAN,pga_gain&0xFFFF,AUDIO_SPK);
++ ARMVB_SetPgaLevel(0,AUDIO_ALL_CHAN,pga_gain&0xFFFF,AUDIO_HP);
}
ARMVB_FM_SetVolume,
if(AUDIO_DEVICE_MODE_HANDFREE == cur_dev_mode)
{
-- ARMVB_SetPgaLevel(0,AUDIO_ALL_CHAN,gobl_gain,AUDIO_LINEIN | AUDIO_SPK);
++ ARMVB_SetPgaLevel(0,AUDIO_ALL_CHAN,gobl_gain,AUDIO_LINEIN | AUDIO_HP);
}
ARMVB_Linein_SetVolume,
if(AUDIO_DEVICE_MODE_HANDFREE == cur_dev_mode)
{
-- ARMVB_SetPgaLevel(0,AUDIO_ALL_CHAN,gobl_gain,AUDIO_LINEIN | AUDIO_SPK);
++ ARMVB_SetPgaLevel(0,AUDIO_ALL_CHAN,gobl_gain,AUDIO_LINEIN | AUDIO_HP);
}#ifdef PA_K_HPR
dspvb_as.c,
DSPVB_Codec_SetVolume,
else if(AUDIO_DEVICE_MODE_HANDFREE == cur_dev_mode)
{
-- DSPVB_SetPgaLevel(0,AUDIO_CHAN_L,pga_da_gain_l,AUDIO_SPK);
-- DSPVB_SetPgaLevel(0,AUDIO_CHAN_R,pga_da_gain_r,AUDIO_SPK);
++ DSPVB_SetPgaLevel(0,AUDIO_CHAN_L,pga_da_gain_l,AUDIO_HP);
++ DSPVB_SetPgaLevel(0,AUDIO_CHAN_R,pga_da_gain_r,AUDIO_HP);
}
3. 播音停止时关闭外部功放
chip_drv\chip_module\audio\codec\sprd\sprd_codec_phy.c,
PUBLIC void __sprd_codec_pa_mute(uint32 is_mute)
{
SPRD_CODEC_DBG("__sprd_codec_pa_mute:%d",is_mute);
if( is_mute )
{
__sprd_codec_ap_pa_mute();
++ __sprd_codec_ext_pa_ctl(0,0);
#if !(PGA_SMOOTH_ADJUST)
__sprd_codec_ext_pa_ctl(0,0);
__sprd_codec_ap_lout(0);
#endif
}
else
{
__sprd_codec_ap_lout(1);
__sprd_codec_ext_pa_ctl(1,0);
}
}
4. HP通路做外放需要顺带修改的其他点
chip_drv\chip_module\audio\codec\sprd\v1\sprd_codec_ap_phy_sc1161.c
PUBLIC void __sprd_codec_ap_ear(uint32 en)
{
+ uint32 reg = SPRD_CODEC_AP_REG_GET(&aud_codec_ctrl_ptr->ana_cdc2);
_sprd_codec_ap_en_op(en, &aud_codec_ctrl_ptr->ana_cdc2, RCV_EN);
+ if (en || (!en && !(reg & HPL_EN)))
_sprd_codec_ap_vcm_buf_en(en);
_sprd_codec_ap_receiver_dummy_loop_end_en(en);
_sprd_codec_ap_ear_stereo(en);
__sprd_codec_ap_ear_mixer(en);
}
PUBLIC void __sprd_codec_ap_hp(uint32 en, uint32 chan)
{
SPRD_CODEC_AP_PRINT("__sprd_codec_ap_hp %d", en);
...
} else {
//_sprd_codec_ap_dac_dc_offset_en(en);
//__sprd_codec_ap_dac_en(en, AUDIO_ALL_CHAN);
// Don't close hp buf, otherwise there will be pop noise
- // _sprd_codec_ap_vcm_buf_en(en);
+ if (g_HeadPhoneStatus.Connected == SCI_FALSE)
+ _sprd_codec_ap_vcm_buf_en(en);
_sprd_codec_ap_en_op(en, &aud_codec_ctrl_ptr->ana_cdc2, HPL_EN);
_sprd_codec_ap_en_op(en, &aud_codec_ctrl_ptr->ana_cdc2, HPR_EN);
_sprd_codec_ap_hplr_dummy_loop_dis_all();
}
}
5. 修改Handsfree模式下的音频参数NV
由于原始Handsfree下音频参数是针对OUTPA通路的,现在硬件设计为外放接在HP通路,那原始的参数自然不适用了,比如明显的一点就是通路上的模拟增益都对不上了(HP通路上的PGA部件增益范围与OUTPA通路上的PGA部件增益范围不一样)。不调整参数的话,可能会造成声音效果异常。调整思路:先把Handsfree下的与音效有关的参数先调成与Headset一样,然后再做细节调整,如下:
把
audio_arm\audio_arm\Handsfree\AudioStructure\app_config_info_set\app_config_info\app_config_info[0]\arm_volume\arm_volume[0..15]
audio_arm\audio_arm\Handsfree\AudioStructure\app_config_info_set\app_config_info\app_config_info[1]\arm_volume\arm_volume[0..15]
调成与
audio_arm\audio_arm\Headset\AudioStructure\app_config_info_set\app_config_info\app_config_info[0]\arm_volume\arm_volume[0..15]
audio_arm\audio_arm\Headset\AudioStructure\app_config_info_set\app_config_info\app_config_info[1]\arm_volume\arm_volume[0..15]
一样
把
audio_dsp_codec\dsp_codec_config\Handsfree\AudioStructure\vol_cfg1\vol_cfg1[0..15]
改成
audio_dsp_codec\dsp_codec_config\Headset\AudioStructure\vol_cfg1\vol_cfg1[0..15]
一样
6. 如果是K类功放走HP通路 + 喇叭听筒二合一,则除了以上修改外,再加上下面的修改:
K类二合一请仿照K类功放第2点修改(K类功放是让外放模式走耳机通路,那现在就是要改成听筒模式也走耳机通路)。
nv修改:
audio_arm/audio_arm/Handset/AudioStructure/dev_path_set/dev_set[0] = 0x32
audio_dsp_codec/dsp_codec_config/Handset/AudioStructure/path_set = 0x61F
代码修改:
armvb_as.c,
ARMVB_SetVolumeType,
else if(AUDIO_DEVICE_MODE_HANDHOLD == cur_dev_mode)
{
-- ARMVB_SetPgaLevel(0,AUDIO_ALL_CHAN,pga_gain&0xFFFF,AUDIO_EAR);
++ ARMVB_SetPgaLevel(0,AUDIO_ALL_CHAN,pga_gain&0xFFFF,AUDIO_HP);
}
dspvb_as.c,
DSPVB_Codec_SetVolume,
else if(AUDIO_DEVICE_MODE_HANDHOLD == cur_dev_mode)
{
-- DSPVB_SetPgaLevel(0,AUDIO_CHAN_L,pga_da_gain_l,AUDIO_EAR);
-- DSPVB_SetPgaLevel(0,AUDIO_CHAN_R,pga_da_gain_r,AUDIO_EAR);
++ DSPVB_SetPgaLevel(0,AUDIO_CHAN_L,pga_da_gain_l,AUDIO_HP);
++ DSPVB_SetPgaLevel(0,AUDIO_CHAN_R,pga_da_gain_r,AUDIO_HP);
}
另外请仿照K类功放第5点的修改,根据需要自行调整Handset模式下的音量参数。
|
|