hal: add support to separate headset and headphones mixer backend
add backend apply support for voice headphone path
Test: local build
Bug: 112520435
Change-Id: I0955167872863f17f0e31aaedc4ee8834730aa4e
Signed-off-by: yixuanjiang <yixuanjiang@google.com>
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 9559573..a93d52a 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -600,7 +600,6 @@
int enable_audio_route(struct audio_device *adev,
struct audio_usecase *usecase)
{
- snd_device_t snd_device;
char mixer_path[50];
if (usecase == NULL)
@@ -608,15 +607,21 @@
ALOGV("%s: enter: usecase(%d)", __func__, usecase->id);
- if (usecase->type == PCM_CAPTURE)
- snd_device = usecase->in_snd_device;
- else
- snd_device = usecase->out_snd_device;
audio_extn_utils_send_app_type_cfg(adev, usecase);
audio_extn_utils_send_audio_calibration(adev, usecase);
- strcpy(mixer_path, use_case_table[usecase->id]);
- platform_add_backend_name(adev->platform, mixer_path, snd_device);
audio_extn_sound_trigger_update_stream_status(usecase, ST_EVENT_STREAM_BUSY);
+ strcpy(mixer_path, use_case_table[usecase->id]);
+
+ if (usecase->type == VOICE_CALL) {
+ platform_add_backend_name(adev->platform, mixer_path, usecase->in_snd_device);
+ if (!strstr(mixer_path, " "))
+ platform_add_backend_name(adev->platform, mixer_path, usecase->out_snd_device);
+ } else if (usecase->type == PCM_CAPTURE) {
+ platform_add_backend_name(adev->platform, mixer_path, usecase->in_snd_device);
+ } else {
+ platform_add_backend_name(adev->platform, mixer_path, usecase->out_snd_device);
+ }
+
ALOGD("%s: usecase(%d) apply and update mixer path: %s", __func__, usecase->id, mixer_path);
audio_route_apply_and_update_path(adev->audio_route, mixer_path);
@@ -627,19 +632,24 @@
int disable_audio_route(struct audio_device *adev,
struct audio_usecase *usecase)
{
- snd_device_t snd_device;
char mixer_path[50];
if (usecase == NULL)
return -EINVAL;
ALOGV("%s: enter: usecase(%d)", __func__, usecase->id);
- if (usecase->type == PCM_CAPTURE)
- snd_device = usecase->in_snd_device;
- else
- snd_device = usecase->out_snd_device;
strcpy(mixer_path, use_case_table[usecase->id]);
- platform_add_backend_name(adev->platform, mixer_path, snd_device);
+
+ if (usecase->type == VOICE_CALL) {
+ platform_add_backend_name(adev->platform, mixer_path, usecase->in_snd_device);
+ if (!strstr(mixer_path, " "))
+ platform_add_backend_name(adev->platform, mixer_path, usecase->out_snd_device);
+ } else if (usecase->type == PCM_CAPTURE) {
+ platform_add_backend_name(adev->platform, mixer_path, usecase->in_snd_device);
+ } else {
+ platform_add_backend_name(adev->platform, mixer_path, usecase->out_snd_device);
+ }
+
ALOGD("%s: usecase(%d) reset and update mixer path: %s", __func__, usecase->id, mixer_path);
audio_route_reset_and_update_path(adev->audio_route, mixer_path);
audio_extn_sound_trigger_update_stream_status(usecase, ST_EVENT_STREAM_FREE);