From 26038b858afd7fa82d983159b49a5c60f4630050 Mon Sep 17 00:00:00 2001 From: UK KIM Date: Wed, 13 Jul 2011 02:04:04 -0700 Subject: audio: change time and method to change clock and audio path 1. clock sync: after AP (mcbsp2) is enabled 2. audio path: according to AP's output device Change-Id: I5e0214bea31a722ce43fe92fb1d54bffb291cae9 --- audio/audio_hw.c | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) (limited to 'audio') diff --git a/audio/audio_hw.c b/audio/audio_hw.c index 22d1420..7ba91b0 100644 --- a/audio/audio_hw.c +++ b/audio/audio_hw.c @@ -423,9 +423,6 @@ static int start_call(struct tuna_audio_device *adev) } } - ril_set_call_clock_sync(&adev->ril, SOUND_CLOCK_START); - ril_set_call_audio_path(&adev->ril, SOUND_AUDIO_PATH_HANDSET); - pcm_start(adev->pcm_modem_dl); pcm_start(adev->pcm_modem_ul); @@ -451,12 +448,44 @@ static void end_call(struct tuna_audio_device *adev) adev->pcm_modem_ul = NULL; } +static void set_incall_device(struct tuna_audio_device *adev) +{ + int device_type; + + switch(adev->devices & AUDIO_DEVICE_OUT_ALL) { + case AUDIO_DEVICE_OUT_EARPIECE: + device_type = SOUND_AUDIO_PATH_HANDSET; + break; + case AUDIO_DEVICE_OUT_SPEAKER: + device_type = SOUND_AUDIO_PATH_SPEAKER; + break; + case AUDIO_DEVICE_OUT_WIRED_HEADSET: + device_type = SOUND_AUDIO_PATH_HEADSET; + break; + case AUDIO_DEVICE_OUT_WIRED_HEADPHONE: + device_type = SOUND_AUDIO_PATH_HEADPHONE; + break; + case AUDIO_DEVICE_OUT_BLUETOOTH_SCO: + case AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET: + case AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT: + device_type = SOUND_AUDIO_PATH_BLUETOOTH; + break; + default: + device_type = SOUND_AUDIO_PATH_HANDSET; + break; + } + + /* if output device isn't supported, open modem side to handset by default */ + ril_set_call_audio_path(&adev->ril, device_type); +} + static void select_mode(struct tuna_audio_device *adev) { if (adev->mode == AUDIO_MODE_IN_CALL) { if (!adev->in_call) { select_output_device(adev); start_call(adev); + ril_set_call_clock_sync(&adev->ril, SOUND_CLOCK_START); adev_set_voice_volume(&adev->hw_device, adev->voice_volume); adev->in_call = 1; } @@ -571,6 +600,8 @@ static void select_output_device(struct tuna_audio_device *adev) mixer_ctl_set_enum_by_string(adev->mixer_ctls.right_capture, speaker_on ? MIXER_SUB_MIC : "Off"); } + + set_incall_device(adev); } if (adev->in_call) start_call(adev); -- cgit v1.1