hal: add support for USB_HEADSET in device selection
Currently, only USB devices of type USB_DEVICE are supported.
Add support for USB_HEADSET devices in HAL device selection
based on the device sent by audio policy.
CRs-Fixed: 2150144
Change-Id: I7a18ee024ef50d5e1da99d9bed20c81d424cf805
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index a86c200..2d415be 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -915,6 +915,7 @@
{AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET , 9},
{AUDIO_DEVICE_OUT_USB_ACCESSORY , -1},
{AUDIO_DEVICE_OUT_USB_DEVICE , -1},
+ {AUDIO_DEVICE_OUT_USB_HEADSET , -1},
{AUDIO_DEVICE_OUT_REMOTE_SUBMIX , 9},
{AUDIO_DEVICE_OUT_PROXY , 9},
{AUDIO_DEVICE_OUT_FM , 7},
@@ -940,6 +941,7 @@
{AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET , 9},
{AUDIO_DEVICE_OUT_USB_ACCESSORY , -1},
{AUDIO_DEVICE_OUT_USB_DEVICE , -1},
+ {AUDIO_DEVICE_OUT_USB_HEADSET , -1},
{AUDIO_DEVICE_OUT_REMOTE_SUBMIX , 9},
{AUDIO_DEVICE_OUT_PROXY , 9},
/* Add the correct be ids */
@@ -966,6 +968,7 @@
{AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET , 9},
{AUDIO_DEVICE_OUT_USB_ACCESSORY , -1},
{AUDIO_DEVICE_OUT_USB_DEVICE , -1},
+ {AUDIO_DEVICE_OUT_USB_HEADSET , -1},
{AUDIO_DEVICE_OUT_REMOTE_SUBMIX , 9},
{AUDIO_DEVICE_OUT_PROXY , 9},
/* Add the correct be ids */
@@ -992,6 +995,7 @@
{AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET , 9},
{AUDIO_DEVICE_OUT_USB_ACCESSORY , -1},
{AUDIO_DEVICE_OUT_USB_DEVICE , -1},
+ {AUDIO_DEVICE_OUT_USB_HEADSET , -1},
{AUDIO_DEVICE_OUT_REMOTE_SUBMIX , 9},
{AUDIO_DEVICE_OUT_PROXY , 9},
/* Add the correct be ids */
@@ -3711,8 +3715,10 @@
} else if (devices == (AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET |
AUDIO_DEVICE_OUT_SPEAKER)) {
snd_device = SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET;
- } else if (devices == (AUDIO_DEVICE_OUT_USB_DEVICE |
- AUDIO_DEVICE_OUT_SPEAKER)) {
+ } else if ((devices == (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_SPEAKER)) ||
+ (devices == (AUDIO_DEVICE_OUT_USB_HEADSET |
+ AUDIO_DEVICE_OUT_SPEAKER))) {
snd_device = SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET;
} else if ((devices & AUDIO_DEVICE_OUT_SPEAKER) &&
(devices & AUDIO_DEVICE_OUT_ALL_A2DP)) {
@@ -3768,7 +3774,9 @@
} else {
snd_device = SND_DEVICE_OUT_VOICE_HEADPHONES;
}
- } else if (devices & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (devices &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (voice_is_in_call(adev)) {
switch (adev->voice.tty_mode) {
case TTY_MODE_FULL:
@@ -3904,7 +3912,9 @@
ALOGD("%s: setting USB hadset channel capability(2) for Proxy", __func__);
audio_extn_set_afe_proxy_channel_mixer(adev, 2);
snd_device = SND_DEVICE_OUT_USB_HEADSET;
- } else if (devices & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (devices &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported())
snd_device = SND_DEVICE_OUT_USB_HEADSET;
else
@@ -4007,7 +4017,7 @@
snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC_NS;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC_AEC;
}
platform_set_echo_reference(adev, true, out_device);
@@ -4041,7 +4051,7 @@
snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC_AEC;
}
platform_set_echo_reference(adev, true, out_device);
@@ -4145,7 +4155,9 @@
ALOGE("%s: Invalid TTY mode (%#x)", __func__, adev->voice.tty_mode);
}
goto exit;
- } else if (out_device & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (out_device &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
switch (adev->voice.tty_mode) {
case TTY_MODE_FULL:
snd_device = SND_DEVICE_IN_VOICE_TTY_FULL_USB_MIC;
@@ -4242,7 +4254,9 @@
}
} else if (out_device & AUDIO_DEVICE_OUT_TELEPHONY_TX) {
snd_device = SND_DEVICE_IN_VOICE_RX;
- } else if (out_device & AUDIO_DEVICE_OUT_USB_DEVICE) {
+ } else if (out_device &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported()) {
snd_device = SND_DEVICE_IN_VOICE_USB_HEADSET_MIC;
}
@@ -4321,7 +4335,7 @@
else
snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
}
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_VOICE_RECOG_USB_HEADSET_MIC;
}
} else if (source == AUDIO_SOURCE_UNPROCESSED) {
@@ -4341,7 +4355,7 @@
}
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_MIC;
}
} else if ((source == AUDIO_SOURCE_VOICE_COMMUNICATION) ||
@@ -4419,7 +4433,7 @@
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
} else if (in_device & AUDIO_DEVICE_IN_FM_TUNER) {
snd_device = SND_DEVICE_IN_CAPTURE_FM;
- } else if (in_device & AUDIO_DEVICE_IN_USB_DEVICE ) {
+ } else if (audio_is_usb_in_device(in_device | AUDIO_DEVICE_BIT_IN)) {
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
} else {
ALOGE("%s: Unknown input device(s) %#x", __func__, in_device);
@@ -4464,7 +4478,9 @@
} else if (out_device & AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET ||
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) {
+ } else if (out_device &
+ (AUDIO_DEVICE_OUT_USB_DEVICE |
+ AUDIO_DEVICE_OUT_USB_HEADSET)) {
if (audio_extn_usb_is_capture_supported())
snd_device = SND_DEVICE_IN_USB_HEADSET_MIC;
else