Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b30b062 authored by andysu's avatar andysu Committed by Eric Laurent
Browse files

hal: prevent device switch when speaker swap channel



Issue happens while music playback with touch sound enabled.
music playback started in the first place and touch sound created
low-latency playback with device switch when device orientation
changed.
This fix disabled the device switch when acdb tuning is the same
for SPEAKER & SPEAKER_REVERSE. Since walleye uses ADSP mixer control
for swap channel, the acdb setting is the same for SPEAKER &
SPEAKER_REVERSE.
Test: self-tested for over 50 times.
Bug: 77499491

Change-Id: Ie602cf1b1ee533a46714c569fa0da9b40da9e25b
Signed-off-by: default avatarandysu <andysu@android.com>
parent 9c021b94
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -1701,7 +1701,13 @@ snd_device_t platform_get_output_snd_device(void *platform, audio_devices_t devi
    } else if (devices & AUDIO_DEVICE_OUT_LINE) {
        snd_device = SND_DEVICE_OUT_LINE;
    } else if (devices & AUDIO_DEVICE_OUT_SPEAKER) {
        if (my_data->speaker_lr_swap)
        /*
         * Perform device switch only if acdb tuning is different between SPEAKER & SPEAKER_REVERSE,
         * Or there will be a small pause while performing device switch.
         */
        if (my_data->speaker_lr_swap &&
            (acdb_device_table[SND_DEVICE_OUT_SPEAKER] !=
            acdb_device_table[SND_DEVICE_OUT_SPEAKER_REVERSE]))
            snd_device = SND_DEVICE_OUT_SPEAKER_REVERSE;
        else
            snd_device = SND_DEVICE_OUT_SPEAKER;
+7 −1
Original line number Diff line number Diff line
@@ -697,7 +697,13 @@ snd_device_t platform_get_output_snd_device(void *platform, audio_devices_t devi
        devices & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
        snd_device = SND_DEVICE_OUT_HEADPHONES;
    } else if (devices & AUDIO_DEVICE_OUT_SPEAKER) {
        if (my_data->speaker_lr_swap)
        /*
         * Perform device switch only if acdb tuning is different between SPEAKER & SPEAKER_REVERSE,
         * Or there will be a small pause while performing device switch.
         */
        if (my_data->speaker_lr_swap &&
            (acdb_device_table[SND_DEVICE_OUT_SPEAKER] !=
            acdb_device_table[SND_DEVICE_OUT_SPEAKER_REVERSE]))
            snd_device = SND_DEVICE_OUT_SPEAKER_REVERSE;
        else
            snd_device = SND_DEVICE_OUT_SPEAKER;
+7 −1
Original line number Diff line number Diff line
@@ -2549,7 +2549,13 @@ snd_device_t platform_get_output_snd_device(void *platform, audio_devices_t devi
    } else if (devices & AUDIO_DEVICE_OUT_SPEAKER_SAFE) {
        snd_device = SND_DEVICE_OUT_SPEAKER_SAFE;
    } else if (devices & AUDIO_DEVICE_OUT_SPEAKER) {
        if (my_data->speaker_lr_swap)
        /*
         * Perform device switch only if acdb tuning is different between SPEAKER & SPEAKER_REVERSE,
         * Or there will be a small pause while performing device switch.
         */
        if (my_data->speaker_lr_swap &&
            (acdb_device_table[SND_DEVICE_OUT_SPEAKER] !=
            acdb_device_table[SND_DEVICE_OUT_SPEAKER_REVERSE]))
            snd_device = SND_DEVICE_OUT_SPEAKER_REVERSE;
        else
            snd_device = SND_DEVICE_OUT_SPEAKER;