hal: Notify amplifier of device enable/disable
Change-Id: Ice808c9b55a9e3bc8bafe5ca3ff555377d38dd8f
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index f322307..94864a7 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -283,6 +283,21 @@
return 0;
}
+static int amplifier_enable_devices(uint32_t devices, bool enable)
+{
+ amplifier_device_t *amp = get_amplifier_device();
+ bool is_output = devices > SND_DEVICE_OUT_BEGIN &&
+ devices < SND_DEVICE_OUT_END;
+
+ if (amp && amp->enable_output_devices && is_output)
+ return amp->enable_output_devices(amp, devices, enable);
+
+ if (amp && amp->enable_input_devices && !is_output)
+ return amp->enable_input_devices(amp, devices, enable);
+
+ return 0;
+}
+
static int amplifier_set_mode(audio_mode_t mode)
{
amplifier_device_t *amp = get_amplifier_device();
@@ -589,6 +604,7 @@
audio_extn_listen_update_status(snd_device,
LISTEN_EVENT_SND_DEVICE_BUSY);
+ amplifier_enable_devices(snd_device, true);
audio_route_apply_and_update_path(adev->audio_route, device_name);
}
return 0;
@@ -632,8 +648,10 @@
snd_device == SND_DEVICE_OUT_VOICE_SPEAKER) &&
audio_extn_spkr_prot_is_enabled()) {
audio_extn_spkr_prot_stop_processing();
- } else
+ } else {
audio_route_reset_and_update_path(adev->audio_route, device_name);
+ amplifier_enable_devices(snd_device, false);
+ }
audio_extn_listen_update_status(snd_device,
LISTEN_EVENT_SND_DEVICE_FREE);