audio: use of audio_route_{apply/reset}_and_update_path APIs
enable/disable device and route using the new APIs to update
controls in the order listed in mixer paths file.
Change-Id: Ic0a8874e4a2080347cfa0c2e66af606a08a207a7
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 7e43274..8982813 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -162,8 +162,7 @@
}
static int enable_audio_route(struct audio_device *adev,
- struct audio_usecase *usecase,
- bool update_mixer)
+ struct audio_usecase *usecase)
{
snd_device_t snd_device;
char mixer_path[50];
@@ -180,18 +179,15 @@
strcpy(mixer_path, use_case_table[usecase->id]);
platform_add_backend_name(mixer_path, snd_device);
- ALOGV("%s: apply mixer path: %s", __func__, mixer_path);
- audio_route_apply_path(adev->audio_route, mixer_path);
- if (update_mixer)
- audio_route_update_mixer(adev->audio_route);
+ ALOGV("%s: apply and update mixer path: %s", __func__, mixer_path);
+ audio_route_apply_and_update_path(adev->audio_route, mixer_path);
ALOGV("%s: exit", __func__);
return 0;
}
static int disable_audio_route(struct audio_device *adev,
- struct audio_usecase *usecase,
- bool update_mixer)
+ struct audio_usecase *usecase)
{
snd_device_t snd_device;
char mixer_path[50];
@@ -206,18 +202,15 @@
snd_device = usecase->out_snd_device;
strcpy(mixer_path, use_case_table[usecase->id]);
platform_add_backend_name(mixer_path, snd_device);
- ALOGV("%s: reset mixer path: %s", __func__, mixer_path);
- audio_route_reset_path(adev->audio_route, mixer_path);
- if (update_mixer)
- audio_route_update_mixer(adev->audio_route);
+ ALOGV("%s: reset and update mixer path: %s", __func__, mixer_path);
+ audio_route_reset_and_update_path(adev->audio_route, mixer_path);
ALOGV("%s: exit", __func__);
return 0;
}
static int enable_snd_device(struct audio_device *adev,
- snd_device_t snd_device,
- bool update_mixer)
+ snd_device_t snd_device)
{
if (snd_device < SND_DEVICE_MIN ||
snd_device >= SND_DEVICE_MAX) {
@@ -237,18 +230,15 @@
return -EINVAL;
}
- ALOGV("%s: snd_device(%d: %s)", __func__,
- snd_device, platform_get_snd_device_name(snd_device));
- audio_route_apply_path(adev->audio_route, platform_get_snd_device_name(snd_device));
- if (update_mixer)
- audio_route_update_mixer(adev->audio_route);
+ const char * dev_path = platform_get_snd_device_name(snd_device);
+ ALOGV("%s: snd_device(%d: %s)", __func__, snd_device, dev_path);
+ audio_route_apply_and_update_path(adev->audio_route, dev_path);
return 0;
}
static int disable_snd_device(struct audio_device *adev,
- snd_device_t snd_device,
- bool update_mixer)
+ snd_device_t snd_device)
{
if (snd_device < SND_DEVICE_MIN ||
snd_device >= SND_DEVICE_MAX) {
@@ -261,11 +251,10 @@
}
adev->snd_dev_ref_cnt[snd_device]--;
if (adev->snd_dev_ref_cnt[snd_device] == 0) {
+ const char * dev_path = platform_get_snd_device_name(snd_device);
ALOGV("%s: snd_device(%d: %s)", __func__,
- snd_device, platform_get_snd_device_name(snd_device));
- audio_route_reset_path(adev->audio_route, platform_get_snd_device_name(snd_device));
- if (update_mixer)
- audio_route_update_mixer(adev->audio_route);
+ snd_device, dev_path);
+ audio_route_reset_and_update_path(adev->audio_route, dev_path);
}
return 0;
}
@@ -303,33 +292,27 @@
ALOGV("%s: Usecase (%s) is active on (%s) - disabling ..",
__func__, use_case_table[usecase->id],
platform_get_snd_device_name(usecase->out_snd_device));
- disable_audio_route(adev, usecase, false);
+ disable_audio_route(adev, usecase);
switch_device[usecase->id] = true;
num_uc_to_switch++;
}
}
if (num_uc_to_switch) {
- /* Make sure all the streams are de-routed before disabling the device */
- audio_route_update_mixer(adev->audio_route);
-
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
if (switch_device[usecase->id]) {
- disable_snd_device(adev, usecase->out_snd_device, false);
+ disable_snd_device(adev, usecase->out_snd_device);
}
}
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
if (switch_device[usecase->id]) {
- enable_snd_device(adev, snd_device, false);
+ enable_snd_device(adev, snd_device);
}
}
- /* Make sure new snd device is enabled before re-routing the streams */
- audio_route_update_mixer(adev->audio_route);
-
/* Re-route all the usecases on the shared backend other than the
specified usecase to new snd devices */
list_for_each(node, &adev->usecase_list) {
@@ -337,11 +320,9 @@
/* Update the out_snd_device only before enabling the audio route */
if (switch_device[usecase->id] ) {
usecase->out_snd_device = snd_device;
- enable_audio_route(adev, usecase, false);
+ enable_audio_route(adev, usecase);
}
}
-
- audio_route_update_mixer(adev->audio_route);
}
}
@@ -375,27 +356,21 @@
ALOGV("%s: Usecase (%s) is active on (%s) - disabling ..",
__func__, use_case_table[usecase->id],
platform_get_snd_device_name(usecase->in_snd_device));
- disable_audio_route(adev, usecase, false);
+ disable_audio_route(adev, usecase);
switch_device[usecase->id] = true;
num_uc_to_switch++;
}
}
if (num_uc_to_switch) {
- /* Make sure all the streams are de-routed before disabling the device */
- audio_route_update_mixer(adev->audio_route);
-
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
if (switch_device[usecase->id]) {
- disable_snd_device(adev, usecase->in_snd_device, false);
- enable_snd_device(adev, snd_device, false);
+ disable_snd_device(adev, usecase->in_snd_device);
+ enable_snd_device(adev, snd_device);
}
}
- /* Make sure new snd device is enabled before re-routing the streams */
- audio_route_update_mixer(adev->audio_route);
-
/* Re-route all the usecases on the shared backend other than the
specified usecase to new snd devices */
list_for_each(node, &adev->usecase_list) {
@@ -403,11 +378,9 @@
/* Update the in_snd_device only before enabling the audio route */
if (switch_device[usecase->id] ) {
usecase->in_snd_device = snd_device;
- enable_audio_route(adev, usecase, false);
+ enable_audio_route(adev, usecase);
}
}
-
- audio_route_update_mixer(adev->audio_route);
}
}
@@ -538,25 +511,25 @@
/* Disable current sound devices */
if (usecase->out_snd_device != SND_DEVICE_NONE) {
- disable_audio_route(adev, usecase, true);
- disable_snd_device(adev, usecase->out_snd_device, false);
+ disable_audio_route(adev, usecase);
+ disable_snd_device(adev, usecase->out_snd_device);
}
if (usecase->in_snd_device != SND_DEVICE_NONE) {
- disable_audio_route(adev, usecase, true);
- disable_snd_device(adev, usecase->in_snd_device, false);
+ disable_audio_route(adev, usecase);
+ disable_snd_device(adev, usecase->in_snd_device);
}
/* Enable new sound devices */
if (out_snd_device != SND_DEVICE_NONE) {
if (usecase->devices & AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND)
check_usecases_codec_backend(adev, usecase, out_snd_device);
- enable_snd_device(adev, out_snd_device, false);
+ enable_snd_device(adev, out_snd_device);
}
if (in_snd_device != SND_DEVICE_NONE) {
check_and_route_capture_usecases(adev, usecase, in_snd_device);
- enable_snd_device(adev, in_snd_device, false);
+ enable_snd_device(adev, in_snd_device);
}
if (usecase->type == VOICE_CALL)
@@ -564,12 +537,10 @@
out_snd_device,
in_snd_device);
- audio_route_update_mixer(adev->audio_route);
-
usecase->in_snd_device = in_snd_device;
usecase->out_snd_device = out_snd_device;
- enable_audio_route(adev, usecase, true);
+ enable_audio_route(adev, usecase);
return status;
}
@@ -592,10 +563,10 @@
}
/* 1. Disable stream specific mixer controls */
- disable_audio_route(adev, uc_info, true);
+ disable_audio_route(adev, uc_info);
/* 2. Disable the tx device */
- disable_snd_device(adev, uc_info->in_snd_device, true);
+ disable_snd_device(adev, uc_info->in_snd_device);
list_remove(&uc_info->list);
free(uc_info);
@@ -853,7 +824,7 @@
usecase = node_to_item(node, struct audio_usecase, list);
if (usecase->type == PCM_PLAYBACK &&
usecase->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
- disable_audio_route(adev, usecase, true);
+ disable_audio_route(adev, usecase);
}
}
@@ -865,7 +836,7 @@
usecase = node_to_item(node, struct audio_usecase, list);
if (usecase->type == PCM_PLAYBACK &&
usecase->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
- enable_audio_route(adev, usecase, true);
+ enable_audio_route(adev, usecase);
}
}
@@ -892,10 +863,10 @@
adev->visualizer_stop_output(out->handle);
/* 1. Get and set stream specific mixer controls */
- disable_audio_route(adev, uc_info, true);
+ disable_audio_route(adev, uc_info);
/* 2. Disable the rx device */
- disable_snd_device(adev, uc_info->out_snd_device, true);
+ disable_snd_device(adev, uc_info->out_snd_device);
list_remove(&uc_info->list);
free(uc_info);
@@ -1005,11 +976,11 @@
}
/* 2. Get and set stream specific mixer controls */
- disable_audio_route(adev, uc_info, true);
+ disable_audio_route(adev, uc_info);
/* 3. Disable the rx and tx devices */
- disable_snd_device(adev, uc_info->out_snd_device, false);
- disable_snd_device(adev, uc_info->in_snd_device, true);
+ disable_snd_device(adev, uc_info->out_snd_device);
+ disable_snd_device(adev, uc_info->in_snd_device);
list_remove(&uc_info->list);
free(uc_info);