CS7000: avoid spillover of FM audio when switching to HR_C6000 DAC output

This commit is contained in:
Silvano Seva 2024-10-22 18:50:35 +02:00
parent 6513d5593a
commit f883d4e7e1
3 changed files with 14 additions and 5 deletions

View File

@ -122,9 +122,12 @@ void audio_connect(const enum AudioSource source, const enum AudioSink sink)
gpioDev_set(INT_MIC_SEL);
break;
case PATH(SOURCE_MCU, SINK_SPK):
case PATH(SOURCE_RTX, SINK_SPK):
radio_enableAfOutput();
// Fallthrough
case PATH(SOURCE_MCU, SINK_SPK):
gpioDev_set(AF_MUTE);
break;
default:
@ -159,9 +162,12 @@ void audio_disconnect(const enum AudioSource source, const enum AudioSink sink)
gpioDev_clear(INT_MIC_SEL);
break;
case PATH(SOURCE_MCU, SINK_SPK):
case PATH(SOURCE_RTX, SINK_SPK):
radio_disableAfOutput();
// Fallthrough
case PATH(SOURCE_MCU, SINK_SPK):
gpioDev_clear(AF_MUTE);
break;
default:

View File

@ -201,6 +201,7 @@ void HR_Cx000< M >::fmMode()
writeReg(M::CONFIG, 0x36, 0x10); // Vocoder codec packet interface enabled
writeReg(M::CONFIG, 0x36, 0x12); // Receiving and opening the voice channel in FM mode Codec switch, 1 means on, 0 means off.
writeReg(M::CONFIG, 0xE0, 0x8B);
writeReg(M::CONFIG, 0x26, 0xFE); // Undocumented register, disable FM audio output
}
template< class M >
@ -221,5 +222,4 @@ void HR_Cx000< M >::stopAnalogTx()
writeReg(M::CONFIG, 0x60, 0x00); // Stop analog transmission
writeReg(M::CONFIG, 0xE0, 0xC9); // Codec enabled, LineIn1, LineOut2, I2S slave mode
writeReg(M::CONFIG, 0x34, 0x98); // FM bpf enabled, 25kHz bandwidth
writeReg(M::CONFIG, 0x26, 0xFD); // Undocumented register, enable FM receive
}

View File

@ -184,12 +184,15 @@ bool radio_checkRxDigitalSquelch()
void radio_enableAfOutput()
{
gpioDev_set(AF_MUTE);
// Undocumented register, bits [1:0] seem to enable/disable FM audio RX.
// 0xFD enable FM receive.
C6000.writeCfgRegister(0x26, 0xFD);
}
void radio_disableAfOutput()
{
gpioDev_clear(AF_MUTE);
// Undocumented register, disable FM receive
C6000.writeCfgRegister(0x26, 0xFE);
}
void radio_enableRx()