hal: update snd device selection in auto hal
Use BUS device associated usecases for SND
device selection on automotive platform.
The criteria for SND device selection are
* HFP calls: usecase->id;
* NON HFP calls: out->car_audio_stream.
Change-Id: If5eb1283e6bfec074efceb4f545a28fdd3dbf601
Signed-off-by: Guodong Hu <guodhu@codeaurora.org>
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 40cea6c..cea5e74 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -2432,11 +2432,18 @@
ALOGE("%s: stream.out is NULL", __func__);
return -EINVAL;
}
- out_snd_device = platform_get_output_snd_device(adev->platform,
- usecase->stream.out);
- in_snd_device = platform_get_input_snd_device(adev->platform,
- NULL,
- usecase->stream.out->devices);
+ if (usecase->devices & AUDIO_DEVICE_OUT_BUS) {
+ out_snd_device = audio_extn_auto_hal_get_output_snd_device(adev,
+ uc_id);
+ in_snd_device = audio_extn_auto_hal_get_input_snd_device(adev,
+ uc_id);
+ } else {
+ out_snd_device = platform_get_output_snd_device(adev->platform,
+ usecase->stream.out);
+ in_snd_device = platform_get_input_snd_device(adev->platform,
+ NULL,
+ usecase->stream.out->devices);
+ }
usecase->devices = usecase->stream.out->devices;
} else if (usecase->type == TRANSCODE_LOOPBACK_RX) {
if (usecase->stream.inout == NULL) {
@@ -2517,8 +2524,11 @@
if (out_snd_device == SND_DEVICE_NONE) {
struct stream_out *voip_out = adev->primary_output;
struct stream_in *voip_in = get_voice_communication_input(adev);
- out_snd_device = platform_get_output_snd_device(adev->platform,
- usecase->stream.out);
+ if (usecase->devices & AUDIO_DEVICE_OUT_BUS)
+ out_snd_device = audio_extn_auto_hal_get_output_snd_device(adev, uc_id);
+ else
+ out_snd_device = platform_get_output_snd_device(adev->platform,
+ usecase->stream.out);
voip_usecase = get_usecase_from_list(adev, USECASE_AUDIO_PLAYBACK_VOIP);
if (voip_usecase)
@@ -2580,10 +2590,11 @@
return 0;
}
- if ((is_btsco_device(out_snd_device,in_snd_device) && !adev->bt_sco_on) ||
- (is_a2dp_device(out_snd_device) && !audio_extn_a2dp_source_is_ready())) {
- ALOGD("SCO/A2DP is selected but they are not connected/ready hence dont route");
- return 0;
+ if (!(usecase->devices & AUDIO_DEVICE_OUT_BUS) &&
+ ((is_btsco_device(out_snd_device,in_snd_device) && !adev->bt_sco_on) ||
+ (is_a2dp_device(out_snd_device) && !audio_extn_a2dp_source_is_ready()))) {
+ ALOGD("SCO/A2DP is selected but they are not connected/ready hence dont route");
+ return 0;
}
if (out_snd_device != SND_DEVICE_NONE &&