don't mute adc if mic or phone in

This commit is contained in:
Steven Dan
2026-05-23 15:19:25 +08:00
parent 012dbc4bfa
commit 7fe1385ec0
2 changed files with 46 additions and 20 deletions

View File

@@ -818,8 +818,6 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
}
}
if (!mic_stable) {
mic_jack_adc_mute = 1;
mic_restore_deadline = 0;
mic_insert_dac_mute = 0;
mic_insert_dac_deadline = 0;
// 改动原因MIC 拔出边沿立即拉 DAC 寄存器静音,减轻瞬态 pop满 500ms相对拔出时刻后 mic_pull_dac_mute 清零恢复 g_dac_vol 对应音量。
@@ -834,20 +832,36 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
} else {
mic_pull_dac_mute = 0;
mic_pull_dac_deadline = 0;
// 改动原因:去抖后由拔出→插入的边沿:立刻 mic_insert_dac_mute 哑 DAC自该稳定插入时刻起 500ms 后清除以恢复 g_dac_vol(与 ADC 的 mic_restore 同源边沿,时间基准一致)
// 改动原因:去抖后由拔出→插入的边沿:立刻 mic_insert_dac_mute 哑 DAC自该稳定插入时刻起 500ms 后清除以恢复 g_dac_vol。
if (mic_stable && !mic_stable_prev) {
mic_restore_deadline = now + C1_JACK_RESTORE_DELAY;
mic_insert_dac_mute = 1;
mic_insert_dac_deadline = now + C1_JACK_RESTORE_DELAY;
}
if (mic_jack_adc_mute && mic_restore_deadline != 0 && timeafter(now, mic_restore_deadline)) {
mic_jack_adc_mute = 0;
}
if (mic_insert_dac_mute && mic_insert_dac_deadline != 0 && timeafter(now, mic_insert_dac_deadline)) {
mic_insert_dac_mute = 0;
mic_insert_dac_deadline = 0;
}
}
// 改动原因ADC 插拔策略——仅 MIC+耳机均拔出时 mic_jack_adc_mute 强制静音任一端插入且此前为双拔出静音时500ms 后清除以按 g_mute_switch 恢复;仅拔一端而另一端仍在则立即解除强制静音。
{
unsigned both_jacks_out = (!mic_stable && !hp_stable) ? 1u : 0u;
if (both_jacks_out) {
mic_jack_adc_mute = 1;
mic_restore_deadline = 0;
} else {
if ((mic_stable && !mic_stable_prev) || (hp_stable && !hp_stable_prev)) {
if (mic_jack_adc_mute) {
mic_restore_deadline = now + C1_JACK_RESTORE_DELAY;
}
}
if (mic_jack_adc_mute && mic_restore_deadline == 0) {
mic_jack_adc_mute = 0;
} else if (mic_jack_adc_mute && mic_restore_deadline != 0 && timeafter(now, mic_restore_deadline)) {
mic_jack_adc_mute = 0;
mic_restore_deadline = 0;
}
}
}
hp_stable_prev = hp_stable;
mic_stable_prev = mic_stable;
}
@@ -862,8 +876,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
i_c1_led_ctrl.set_mic_mute_state(mute_switch);
last_mute_switch_for_led = mute_switch;
}
// 改动原因:MIC 物理拔出时 mic_jack_adc_mute 强制 ADC 静音;插入 500ms 按 g_mute_switch 恢复
// g_mute_switch==0 静音→effective_adc_vol=0==1 非静音→用 g_adc_vol。此前误写 mute_switch!=0 导致与按键/LED 相反。
// 改动原因:仅双拔出时 mic_jack_adc_mute 强制 ADC 静音;任一端插入 500ms 或未处于双拔出静音态时按 g_mute_switch0→01→g_adc_vol。
unsigned effective_adc_vol = mic_jack_adc_mute ? 0 : ((mute_switch == 0) ? 0 : adc_vol);
// 改动原因:耳机拔出或 MIC 插/拔防 pop 时写 C1_DAC_MUTE不改 g_dac_vol各事件满 500ms 或互斥清除后按 g_dac_vol 写回 0x0034。