phhusson / treble_experimentations

Notes about tinkering with Android Project Treble
3.33k stars 655 forks source link

Samsung no voice in call on second sim #2602

Open Konstont1n opened 6 months ago

Konstont1n commented 6 months ago

Describe the bug

Phone has two SIM cards.

GSIs activate both SIM cards, receives calls and SMS on both, and the Internet works on each of them.

But there is no voice when calling from the second SIM card. I can’t hear the other person, the other person can’t hear me.

At the same time, everything is fine with the first SIM card.

If you rearrange the SIM cards, the one in the second slot will have no voice on calls.

To Reproduce

Can be reproduced on any GSI.

I checked on:

aosp_arm64-exp-SQ3A.220705.003.A1-8672226-6554a6c4 system-squeak-arm64-ab-vndklite-gapps.img.xz aosp-arm64-ab-gapps-vndklite-14.0-20231217 lineage-20.0-20231214-UNOFFICIAL-arm64_bgN PixelExperience_Plus_arm64-ab-12.1-20221118-UNOFFICIAL PixelExperience_Plus_arm64-bgN-12.1-20230609-1510-MeowIce-GSI PixelExperience_Plus_arm64-ab-13.0-20230914-UNOFFICIAL PixelOS-13.0-20230710-arm64_bgN and few other...

the same on any dialer-app

but on the stock firmware sim2 works fine.

LogCat's

I made two logs in a row. First with the SIM1 (where there is a voice), then with SIM2. logcat_SIM1.txt logcat_SIM2.txt

files are synchronized by line numbers

Smartphone (please complete the following information):

Additional context

While I was looking for a solution, I found a mention of same problem on other Samsung dual-sim phones.

For example on:

Samsung Galaxy A23 4G (SM-A235F) Samsung Galaxy A71 (SM-A715FZ)

Konstont1n commented 6 months ago

This is what I found.

I am a complete zero in Linux terminology, I write in my own words, as I understand.

Having carefully compared the logs that GSI and stock give when calling from SIM1 and SIM2, the following was discovered:

On stock:

Call from SIM1: D/voice (820): voice_start_usecase: enter usecase:voicemmode1-call D/audio_hw_primary(820): select_devices for use case (voicemmode1-call)

Call from SIM2: D/voice (820): voice_start_usecase: enter usecase:voicemmode2-call D/audio_hw_primary(820): select_devices for use case (voicemmode2-call)

On GSI: Call from SIM1: D/voice (2251): voice_start_usecase: enter usecase:voicemmode1-call D/audio_hw_primary(2251): select_devices for use case (voicemmode1-call)

Call from SIM2: D/voice (2251): voice_start_usecase: enter usecase:voicemmode1-call D/audio_hw_primary(2251): select_devices for use case (voicemmode1-call)

The difference is that when making a call, the stock accesses voicemmode1 from SIM1 and voicemmode2 from SIM2

While GSI only accesses voicemmode1 all the time.

After digging a little deeper into the vendor's files, I found the following:

<usecase name="USECASE_VOICEMMODE1_CALL" type="in" id="2"/> <usecase name="USECASE_VOICEMMODE1_CALL" type="out" id="2"/> <usecase name="USECASE_VOICEMMODE2_CALL" type="in" id="19"/> <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="19"/>

Some in_id, out_id...

The same lines are also mentioned in some other xml files of the vendor.

I googled a bit and found:

[USECASE_VOICEMMODE1_CALL] = "voicemmode1-call", [USECASE_VOICEMMODE2_CALL] = "voicemmode2-call",

But I dare to assume that in all GSIs that I tried, when calling from SIM2, the sound is output from the SIM1 source.

It looks like in all GSIs that I tried, when calling from SIM2, the sound input and output is from the SIM1 source.

That is why both I and my interlocutor hear silence.

The same silence is recorded from the line by the BCR module and its other analogues.

So the question is: who and how use this command voicemmode1 and where/how to fix it?

Thesola10 commented 3 weeks ago

Also affects Note10+ d2q (SM-N9750), on AndyYan's GSI builds

zefrs commented 1 week ago

+1, this is also not working on SM-S901E