don't mute adc if mic or phone in
This commit is contained in:
@@ -818,8 +818,6 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!mic_stable) {
|
if (!mic_stable) {
|
||||||
mic_jack_adc_mute = 1;
|
|
||||||
mic_restore_deadline = 0;
|
|
||||||
mic_insert_dac_mute = 0;
|
mic_insert_dac_mute = 0;
|
||||||
mic_insert_dac_deadline = 0;
|
mic_insert_dac_deadline = 0;
|
||||||
// 改动原因:MIC 拔出边沿立即拉 DAC 寄存器静音,减轻瞬态 pop;满 500ms(相对拔出时刻)后 mic_pull_dac_mute 清零恢复 g_dac_vol 对应音量。
|
// 改动原因: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 {
|
} else {
|
||||||
mic_pull_dac_mute = 0;
|
mic_pull_dac_mute = 0;
|
||||||
mic_pull_dac_deadline = 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) {
|
if (mic_stable && !mic_stable_prev) {
|
||||||
mic_restore_deadline = now + C1_JACK_RESTORE_DELAY;
|
|
||||||
mic_insert_dac_mute = 1;
|
mic_insert_dac_mute = 1;
|
||||||
mic_insert_dac_deadline = now + C1_JACK_RESTORE_DELAY;
|
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)) {
|
if (mic_insert_dac_mute && mic_insert_dac_deadline != 0 && timeafter(now, mic_insert_dac_deadline)) {
|
||||||
mic_insert_dac_mute = 0;
|
mic_insert_dac_mute = 0;
|
||||||
mic_insert_dac_deadline = 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;
|
hp_stable_prev = hp_stable;
|
||||||
mic_stable_prev = mic_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);
|
i_c1_led_ctrl.set_mic_mute_state(mute_switch);
|
||||||
last_mute_switch_for_led = mute_switch;
|
last_mute_switch_for_led = mute_switch;
|
||||||
}
|
}
|
||||||
// 改动原因:MIC 物理拔出时 mic_jack_adc_mute 强制 ADC 静音;插入 500ms 后按 g_mute_switch 恢复:
|
// 改动原因:仅双拔出时 mic_jack_adc_mute 强制 ADC 静音;任一端插入满 500ms 或未处于双拔出静音态时按 g_mute_switch:0→0,1→g_adc_vol。
|
||||||
// g_mute_switch==0 静音→effective_adc_vol=0;==1 非静音→用 g_adc_vol。此前误写 mute_switch!=0 导致与按键/LED 相反。
|
|
||||||
unsigned effective_adc_vol = mic_jack_adc_mute ? 0 : ((mute_switch == 0) ? 0 : 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。
|
// 改动原因:耳机拔出或 MIC 插/拔防 pop 时写 C1_DAC_MUTE(不改 g_dac_vol);各事件满 500ms 或互斥清除后按 g_dac_vol 写回 0x0034。
|
||||||
|
|||||||
@@ -394,7 +394,7 @@ static inline i2c_regop_res_t NAU88C22_REGWRITE(unsigned reg, unsigned val, clie
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// debug_printf("write reg [0x%02X] [0x%02X]\n", reg, val);
|
debug_printf("write reg [0x%02X] [0x%02X]\n", reg, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -557,7 +557,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
|||||||
// 改动原因:MIC 插入(去抖稳定后)立即哑 DAC 防 pop,稳定插入起再计 500ms 后恢复 DAC;拔出时清零;不改 g_dac_vol。
|
// 改动原因:MIC 插入(去抖稳定后)立即哑 DAC 防 pop,稳定插入起再计 500ms 后恢复 DAC;拔出时清零;不改 g_dac_vol。
|
||||||
unsigned mic_insert_dac_mute = 0;
|
unsigned mic_insert_dac_mute = 0;
|
||||||
unsigned mic_insert_dac_deadline = 0;
|
unsigned mic_insert_dac_deadline = 0;
|
||||||
// 改动原因:MIC 拔出强制 ADC mute;插入 500ms 后按 g_mute_switch+g_adc_vol 恢复,不修改 g_mute_switch,故 mic mute LED 不受插拔影响。
|
// 改动原因:仅当 MIC 与耳机均拔出时强制 ADC mute;任一端插入 500ms 后按 g_mute_switch+g_adc_vol 恢复,不修改 g_mute_switch。
|
||||||
unsigned mic_jack_adc_mute = 0;
|
unsigned mic_jack_adc_mute = 0;
|
||||||
unsigned mic_restore_deadline = 0;
|
unsigned mic_restore_deadline = 0;
|
||||||
unsigned mic_stable_prev = 0xFFFFFFFFu;
|
unsigned mic_stable_prev = 0xFFFFFFFFu;
|
||||||
@@ -821,8 +821,6 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!mic_stable) {
|
if (!mic_stable) {
|
||||||
mic_jack_adc_mute = 1;
|
|
||||||
mic_restore_deadline = 0;
|
|
||||||
mic_insert_dac_mute = 0;
|
mic_insert_dac_mute = 0;
|
||||||
mic_insert_dac_deadline = 0;
|
mic_insert_dac_deadline = 0;
|
||||||
// 改动原因:MIC 拔出边沿立即拉 DAC 寄存器静音,减轻瞬态 pop;满 500ms(相对拔出时刻)后 mic_pull_dac_mute 清零恢复 g_dac_vol 对应音量。
|
// 改动原因:MIC 拔出边沿立即拉 DAC 寄存器静音,减轻瞬态 pop;满 500ms(相对拔出时刻)后 mic_pull_dac_mute 清零恢复 g_dac_vol 对应音量。
|
||||||
@@ -837,20 +835,36 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
|||||||
} else {
|
} else {
|
||||||
mic_pull_dac_mute = 0;
|
mic_pull_dac_mute = 0;
|
||||||
mic_pull_dac_deadline = 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) {
|
if (mic_stable && !mic_stable_prev) {
|
||||||
mic_restore_deadline = now + C1_JACK_RESTORE_DELAY;
|
|
||||||
mic_insert_dac_mute = 1;
|
mic_insert_dac_mute = 1;
|
||||||
mic_insert_dac_deadline = now + C1_JACK_RESTORE_DELAY;
|
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)) {
|
if (mic_insert_dac_mute && mic_insert_dac_deadline != 0 && timeafter(now, mic_insert_dac_deadline)) {
|
||||||
mic_insert_dac_mute = 0;
|
mic_insert_dac_mute = 0;
|
||||||
mic_insert_dac_deadline = 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;
|
hp_stable_prev = hp_stable;
|
||||||
mic_stable_prev = mic_stable;
|
mic_stable_prev = mic_stable;
|
||||||
}
|
}
|
||||||
@@ -865,8 +879,7 @@ void AudioHwRemote2(streaming chanend c, client interface i2c_master_if i2c, cli
|
|||||||
i_c1_led_ctrl.set_mic_mute_state(mute_switch);
|
i_c1_led_ctrl.set_mic_mute_state(mute_switch);
|
||||||
last_mute_switch_for_led = mute_switch;
|
last_mute_switch_for_led = mute_switch;
|
||||||
}
|
}
|
||||||
// 改动原因:MIC 物理拔出时 mic_jack_adc_mute 强制 ADC 静音;插入 500ms 后按 g_mute_switch 恢复:
|
// 改动原因:仅双拔出时 mic_jack_adc_mute 强制 ADC 静音;任一端插入满 500ms 或未处于双拔出静音态时按 g_mute_switch:0→0,1→g_adc_vol。
|
||||||
// g_mute_switch==0 静音→effective_adc_vol=0;==1 非静音→用 g_adc_vol。此前误写 mute_switch!=0 导致与按键/LED 相反。
|
|
||||||
unsigned effective_adc_vol = mic_jack_adc_mute ? 0 : ((mute_switch == 0) ? 0 : 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。
|
// 改动原因:耳机拔出或 MIC 插/拔防 pop 时写 C1_DAC_MUTE(不改 g_dac_vol);各事件满 500ms 或互斥清除后按 g_dac_vol 写回 0x0034。
|
||||||
|
|||||||
Reference in New Issue
Block a user