From e9a44a2d55254c48aa50b062b691804c23f767e5 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Tue, 14 Feb 2017 13:00:48 +0100 Subject: [PATCH] audio: Restart the voice call on device change When we change the device during a phone call we need to completely restart it. This is required by the modem. Change-Id: I902c78bf50dfb5dc3da51fca0fb862f872df86ca --- audio/audio_hw.c | 10 +++++++++- audio/voice.c | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/audio/audio_hw.c b/audio/audio_hw.c index 90ed025b..076a4692 100644 --- a/audio/audio_hw.c +++ b/audio/audio_hw.c @@ -2777,9 +2777,17 @@ static int out_set_parameters(struct audio_stream *stream, const char *kvpairs) (out == adev->primary_output)) { /* Turn on bluetooth if needed */ if ((out->devices & AUDIO_DEVICE_OUT_ALL_SCO) && !bt_sco_active) { + select_devices(adev, USECASE_VOICE_CALL); start_voice_session_bt_sco(adev->voice.session); + } else { + /* + * When we select different devices we need to restart the + * voice call. The modem closes the stream on its end and + * we do not get any output. + */ + stop_voice_call(adev); + start_voice_call(adev); } - select_devices(adev, USECASE_VOICE_CALL); } } diff --git a/audio/voice.c b/audio/voice.c index ba7b45b8..6de05fa3 100644 --- a/audio/voice.c +++ b/audio/voice.c @@ -365,6 +365,10 @@ static void voice_session_wb_amr_callback(void *data, int wb_amr_type) /* TODO Handle wb_amr_type=2 */ + /* + * We need stop the PCM and start with the + * wide band pcm_config. + */ stop_voice_call(adev); start_voice_call(adev); }