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); gpioDev_set(INT_MIC_SEL);
break; break;
case PATH(SOURCE_MCU, SINK_SPK):
case PATH(SOURCE_RTX, SINK_SPK): case PATH(SOURCE_RTX, SINK_SPK):
radio_enableAfOutput(); radio_enableAfOutput();
// Fallthrough
case PATH(SOURCE_MCU, SINK_SPK):
gpioDev_set(AF_MUTE);
break; break;
default: default:
@ -159,9 +162,12 @@ void audio_disconnect(const enum AudioSource source, const enum AudioSink sink)
gpioDev_clear(INT_MIC_SEL); gpioDev_clear(INT_MIC_SEL);
break; break;
case PATH(SOURCE_MCU, SINK_SPK):
case PATH(SOURCE_RTX, SINK_SPK): case PATH(SOURCE_RTX, SINK_SPK):
radio_disableAfOutput(); radio_disableAfOutput();
// Fallthrough
case PATH(SOURCE_MCU, SINK_SPK):
gpioDev_clear(AF_MUTE);
break; break;
default: 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, 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, 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, 0xE0, 0x8B);
writeReg(M::CONFIG, 0x26, 0xFE); // Undocumented register, disable FM audio output
} }
template< class M > template< class M >
@ -221,5 +222,4 @@ void HR_Cx000< M >::stopAnalogTx()
writeReg(M::CONFIG, 0x60, 0x00); // Stop analog transmission writeReg(M::CONFIG, 0x60, 0x00); // Stop analog transmission
writeReg(M::CONFIG, 0xE0, 0xC9); // Codec enabled, LineIn1, LineOut2, I2S slave mode 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, 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() 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() void radio_disableAfOutput()
{ {
gpioDev_clear(AF_MUTE); // Undocumented register, disable FM receive
C6000.writeCfgRegister(0x26, 0xFE);
} }
void radio_enableRx() void radio_enableRx()