Part Number: PCMD3140
I am implementing VAD (Voice Activity Detection) functionality within the Linux driver (tlv320adcx140) for the PCMD3140IRTER codec. I am encountering an issue where VAD interrupts stop generating as soon as an active recording session begins, even though the configuration should allow concurrent VAD processing.
During audio recording with arecord -D hw:0,0 -f S16_LE -r 48000 -c 4 -vv test.wav, VAD interrupts stop being generated, even though the VAD_CFG2 register is correctly set to 0x8 (which should enable ‘VAD processing during ADC recording and VAD interrupts generation’).
I noticed a direct link between the PWR_CFG register and the operation of VAD interrupts:
PWR_CFG = 0x61 (VAD KO): When the register assumes this value (set automatically by the driver during active recording), VAD interrupts cease immediately.
PWR_CFG = 0x21 / 0x01 (VAD OK, but Audio Mute): With these values, interrupts resume functioning. However, if I set these values during an ongoing recording, the audio capture becomes muted. This happens because setting bit 6 to 0 disables the power supply to the PDM channels (Power control for PDM channels).
Isolation test: I tried manually setting PWR_CFG = 0x61 without starting any recording (arecord off). Even in this condition, VAD interrupts are not generated. This leads me to conclude that the interrupt block is specifically caused by the internal configuration activated by the value 0x61 of the PWR_CFG register, regardless of whether there is an active data stream or not. However, the technical reason for this conflict is not clear to me.
To facilitate analysis, I am attaching the register dumps in three different scenarios:
VAD Working: IDLE state (interrupts active): regdump_idle_vad_ok.txt
During arecord: Recording active (no interrupts): regdump_active_recording_vad_fail.txt
Manual Test PWR_CFG = 0x61: No recording (no interrupts): regdump_manual_pwrcfg_0x61_vad_fail.txt
Best regards,
Mattia



