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); }