EG25 R07 audio codec detection problems

Hi @all,

we are working on an electronics board (carrier board) for an EG25-G (mini PCIe) with a TLV320AIC3104 codec and have encountered a problem with the automatic codec detection of the EG25 firmware.

I also have a Quectel mini PCIe EVB available for testing.

EG25-G Firmware: EG25GGBR07A08M2G_A0.301.A0.301

In the AT Commands Manual V2.0 QDAI command documentation, note 7 states that R07 firmwares detect the codec type by I2C probing and that it is not possible to set it via QDAI.

Below you will find two I2C initialization traces recorded with Digilent Waveforms, one with the mini PCIe EVB and one with our carrier board. Different probing results are visible for the 7-bit slave addresses 0x18 (AIC3104) and 0x1b (ALC5616). From this, I conclude that firmware R07 has detected that either an AIC3104 or an ALC5616 is connected.

EVB hardware:

I2C init trace “Quectel mini PCIe EVB” with ALC5616 codec

Start, h31 [ h18 | RD ], h01 NAK, stop
Start, h30 [ h18 | WR ], hFE,
Restart, h31 [ h18 | RD ], h01 NAK, Stop // AIC3104 not found: as expected
Start, h30 [ h18 | WR ], hFE,
Restart, h31 [ h18 | RD ], h01 NAK, stop
Start, h34 [ h1A | WR ], h00, h00, stop
Start, h34 [ h1A | WR ], h7E,
Restart, h35 [ h1A | RD ], h01, h02 NAK, Stop
Start, h36 [ h1B | WR ], hFF,
Restart, h37 [ h1B | RD ], h00, h00 NAK, Stop // ALC5616 found: as expected

Our carrier hardware:

I2C init trace “Carrier” with TLV320AIC3104 codes

Start, h31 [ h18 | RD ], h00 NAK, stop
Start, h30 [ h18 | WR ], hFE,
Restart, h31 [ h18 | RD ], h00 NAK, Stop // AIC3104 found: as expected
Start, h30 [ h18 | WR ], hFE,
Restart, h31 [ h18 | RD ], h00 NAK, stop
Start, h34 [ h1A | WR ], h00, h00, stop
Start, h34 [ h1A | WR ], h7E,
Restart, h35 [ h1A | RD ], h01, h02 NAK, Stop
Start, h36 [ h1B | WR ], hFF,
Restart, h37 [ h1B | RD ], h01, h02 NAK, Stop // ALC5616 not found: as expected

From my perspective, everything is correct so far. However, the EG25 on our carrier board will no longer communicate with the AIC3104, never again:

mini PCIe EVB: When I initiate a call via QNavigator, dozens of registers of the ALC5616 are configured to set the audio paths, and the audio works.

Carrier board: When I initiate a call via QNavigator, no communication occurs with 0x18, and consequently, the audio does not work. I only see one time three write accesses to address 0x10.

Further investigations via adb root shell revealed the following:

Even after successful probing of the AIC3104 (see I2C init trace “Carrier” with TLV320AIC3104 codes), a different codec (MAX9860) is ultimately registered as the Linux codec.

cat /sys/devices/soc:sound/*_name
max9860-codec.2-0010
max9860-hifi
max9860-hifi

In the case of Quectel EVB, ALC5616 is correctly bound as the Linux codec:

cat /sys/devices/soc:sound/*_name
rt5616.2-001b
rt5616-aif1
rt5616-aif1

If the AIC3104 is artificially kept in reset mode and the EG25 is rebooted, the following appears:

cat /sys/devices/soc:sound/*_name
quec-stub-codec.2-0001
quec-stub-rx
quec-stub-tx

Is there an explanation for wrong MAX9860 registration as linux codec or can I somehow disable the automatic codec probing? In fact there is no I2C-slave with 7-Bit address 0x10 (MAX9860)

Is an upgrade to EG25GGBR07A08M2G_A0.304.A0.304 needed?

Kind regards,
Manuel

Hi @mdatkchai

I have sent an email to follow up through your email address. Kindly check.