hal: prevent device switch when speaker swap channel
am: 5b30b062ee
Change-Id: Ie5dfd7acdc0d701e7c3d5395301fde1998f11cf6
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 4b91bcd..1f8da65 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -1701,7 +1701,13 @@
} 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;
diff --git a/hal/msm8960/platform.c b/hal/msm8960/platform.c
index 8e8350b..9f10aeb 100644
--- a/hal/msm8960/platform.c
+++ b/hal/msm8960/platform.c
@@ -697,7 +697,13 @@
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;
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 8f1cba9..c07dd90 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -2549,7 +2549,13 @@
} 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;