hal: add support to separate headset and headphones mixer backend am: 6c5e87cca3
am: 3a04c9e7a3
Change-Id: I5234bfe4b17acaf4e363a64ca5c072ea79ef9366
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 440d810..927ebae 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);