hal: Enable USB RX and Handset Mic combination support for Voice call
-For voice call usecase if connected USB OUT device does not have a
mic, currently we fallback to Earpiece-Handset mic device pair.
-With tunnel mode USB support, we can instead use USB RX and
Handset Mic as a device pair for the voice call.
-Update device selection to ensure that this pair is selected.
Change-Id: I0fc6c990bef91d675ea5f2bf13b3ed0b576db9ee
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 6b63919..5a7b9d4 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -386,7 +386,8 @@
[SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET] = "voice-tty-hco-handset",
[SND_DEVICE_OUT_VOICE_TX] = "voice-tx",
[SND_DEVICE_OUT_AFE_PROXY] = "afe-proxy",
- [SND_DEVICE_OUT_USB_HEADSET] = "usb-headphones",
+ [SND_DEVICE_OUT_USB_HEADSET] = "usb-headset",
+ [SND_DEVICE_OUT_USB_HEADPHONES] = "usb-headphones",
[SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET] = "speaker-and-usb-headphones",
[SND_DEVICE_OUT_TRANSMISSION_FM] = "transmission-fm",
[SND_DEVICE_OUT_ANC_HEADSET] = "anc-headphones",
@@ -519,6 +520,7 @@
[SND_DEVICE_OUT_VOICE_TX] = 45,
[SND_DEVICE_OUT_AFE_PROXY] = 0,
[SND_DEVICE_OUT_USB_HEADSET] = 45,
+ [SND_DEVICE_OUT_USB_HEADPHONES] = 45,
[SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET] = 14,
[SND_DEVICE_OUT_TRANSMISSION_FM] = 0,
[SND_DEVICE_OUT_ANC_HEADSET] = 26,
@@ -653,6 +655,7 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TX)},
{TO_NAME_INDEX(SND_DEVICE_OUT_AFE_PROXY)},
{TO_NAME_INDEX(SND_DEVICE_OUT_USB_HEADSET)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_USB_HEADPHONES)},
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET)},
{TO_NAME_INDEX(SND_DEVICE_OUT_TRANSMISSION_FM)},
{TO_NAME_INDEX(SND_DEVICE_OUT_ANC_HEADSET)},
@@ -1289,7 +1292,8 @@
backend_tag_table[SND_DEVICE_OUT_VOICE_TX] = strdup("afe-proxy");
backend_tag_table[SND_DEVICE_IN_VOICE_RX] = strdup("afe-proxy");
backend_tag_table[SND_DEVICE_OUT_AFE_PROXY] = strdup("afe-proxy");
- backend_tag_table[SND_DEVICE_OUT_USB_HEADSET] = strdup("usb-headphones");
+ backend_tag_table[SND_DEVICE_OUT_USB_HEADSET] = strdup("usb-headset");
+ backend_tag_table[SND_DEVICE_OUT_USB_HEADPHONES] = strdup("usb-headphones");
backend_tag_table[SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET] =
strdup("speaker-and-usb-headphones");
backend_tag_table[SND_DEVICE_IN_USB_HEADSET_MIC] = strdup("usb-headset-mic");
@@ -1309,6 +1313,7 @@
hw_interface_table[SND_DEVICE_OUT_DISPLAY_PORT] = strdup("DISPLAY_PORT_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_DISPLAY_PORT] = strdup("SLIMBUS_0_RX-and-DISPLAY_PORT_RX");
hw_interface_table[SND_DEVICE_OUT_USB_HEADSET] = strdup("USB_AUDIO_RX");
+ hw_interface_table[SND_DEVICE_OUT_USB_HEADPHONES] = strdup("USB_AUDIO_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET] = strdup("SLIMBUS_0_RX-and-USB_AUDIO_RX");
hw_interface_table[SND_DEVICE_OUT_VOICE_TX] = strdup("AFE_PCM_RX");
@@ -3300,7 +3305,10 @@
audio_extn_set_afe_proxy_channel_mixer(adev, 2);
snd_device = SND_DEVICE_OUT_USB_HEADSET;
} else if (devices & AUDIO_DEVICE_OUT_USB_DEVICE) {
- snd_device = SND_DEVICE_OUT_USB_HEADSET;
+ if (audio_extn_usb_is_capture_supported())
+ snd_device = SND_DEVICE_OUT_USB_HEADSET;
+ else
+ snd_device = SND_DEVICE_OUT_USB_HEADPHONES;
} else if (devices & AUDIO_DEVICE_OUT_FM_TX) {
snd_device = SND_DEVICE_OUT_TRANSMISSION_FM;
} else if (devices & AUDIO_DEVICE_OUT_EARPIECE) {
@@ -3702,7 +3710,10 @@
out_device & AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
} else if (out_device & AUDIO_DEVICE_OUT_USB_DEVICE) {
- snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
+ if (audio_extn_usb_is_capture_supported())
+ snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
+ else
+ snd_device = SND_DEVICE_IN_HANDSET_MIC;
} else {
ALOGE("%s: Unknown output device(s) %#x", __func__, out_device);
ALOGW("%s: Using default handset-mic", __func__);
@@ -5767,7 +5778,8 @@
char *str)
{
int ret;
- if (out_snd_device == SND_DEVICE_OUT_USB_HEADSET) {
+ if ((out_snd_device == SND_DEVICE_OUT_USB_HEADSET) ||
+ (out_snd_device == SND_DEVICE_OUT_USB_HEADPHONES)) {
ret = audio_extn_usb_enable_sidetone(out_snd_device, enable);
if (ret)
ALOGI("%s: usb device %d does not support device sidetone\n",