From fb65fc8a29c7eb9e3ede46168df60c55943821b5 Mon Sep 17 00:00:00 2001 From: Ajay Dudani Date: Mon, 20 Aug 2012 18:48:13 -0700 Subject: hardware/alsa_sound: Change the device disable sequence Before tearing down codec, disable the MDM device first so that slimbus channel is disconnected from MDM to avoid overflow on codec slimbus interface Change-Id: I20ef6fe97b3e72b6fe17243a55e4e20ed30df93c --- alsa_sound/alsa_default.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/alsa_sound/alsa_default.cpp b/alsa_sound/alsa_default.cpp index d589f5c1..ff065d54 100644 --- a/alsa_sound/alsa_default.cpp +++ b/alsa_sound/alsa_default.cpp @@ -431,6 +431,17 @@ void switchDevice(alsa_handle_t *handle, uint32_t devices, uint32_t mode) (strncmp(txDevice, curTxUCMDevice, MAX_STR_LEN))) && (mode == AudioSystem::MODE_IN_CALL)) inCallDevSwitch = true; } + +#ifdef QCOM_CSDCLIENT_ENABLED + if (mode == AudioSystem::MODE_IN_CALL && platform_is_Fusion3() && (inCallDevSwitch == true)) { + err = csd_client_disable_device(); + if (err < 0) + { + ALOGE("csd_client_disable_device, failed, error %d", err); + } + } +#endif + snd_use_case_get(handle->ucMgr, "_verb", (const char **)&use_case); mods_size = snd_use_case_get_list(handle->ucMgr, "_enamods", &mods_list); if (rxDevice != NULL) { @@ -488,15 +499,6 @@ void switchDevice(alsa_handle_t *handle, uint32_t devices, uint32_t mode) } } ALOGV("%s,rxDev:%s, txDev:%s, curRxDev:%s, curTxDev:%s\n", __FUNCTION__, rxDevice, txDevice, curRxUCMDevice, curTxUCMDevice); -#ifdef QCOM_CSDCLIENT_ENABLED - if (mode == AudioSystem::MODE_IN_CALL && platform_is_Fusion3() && (inCallDevSwitch == true)) { - err = csd_client_disable_device(); - if (err < 0) - { - ALOGE("csd_client_disable_device, failed, error %d", err); - } - } -#endif if (rxDevice != NULL) { snd_use_case_set(handle->ucMgr, "_enadev", rxDevice); -- cgit v1.2.3 From 15defbaaf797973200e6156a0d00982aa039da4e Mon Sep 17 00:00:00 2001 From: "ehgrace.kim" Date: Sun, 12 Aug 2012 20:40:32 -0700 Subject: audio: add the headset tx Change-Id: If15ef8362dd2800c41fb945b96488844db29e5db --- alsa_sound/alsa_default.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/alsa_sound/alsa_default.cpp b/alsa_sound/alsa_default.cpp index ff065d54..41aae711 100644 --- a/alsa_sound/alsa_default.cpp +++ b/alsa_sound/alsa_default.cpp @@ -1409,10 +1409,11 @@ char *getUCMDevice(uint32_t devices, int input, char *rxDevice) } else if (devices & AudioSystem::DEVICE_IN_AUX_DIGITAL) { return strdup(SND_USE_CASE_DEV_HDMI_TX); /* HDMI TX */ #ifdef QCOM_ANC_HEADSET_ENABLED - } else if ((devices & AudioSystem::DEVICE_IN_WIRED_HEADSET) || - (devices & AudioSystem::DEVICE_IN_ANC_HEADSET)) { + } else if (devices & AudioSystem::DEVICE_IN_ANC_HEADSET) { return strdup(SND_USE_CASE_DEV_HEADSET); /* HEADSET TX */ #endif + } else if (devices & AudioSystem::DEVICE_IN_WIRED_HEADSET) { + return strdup(SND_USE_CASE_DEV_HEADSET); /* HEADSET TX */ } else if (devices & AudioSystem::DEVICE_IN_BLUETOOTH_SCO_HEADSET) { if (btsco_samplerate == BTSCO_RATE_16KHZ) return strdup(SND_USE_CASE_DEV_BTSCO_WB_TX); /* BTSCO TX*/ -- cgit v1.2.3 From 453d78c3bd4bd706bf381a82788e0ed88d2f96d0 Mon Sep 17 00:00:00 2001 From: SathishKumar Mani Date: Fri, 21 Sep 2012 20:12:08 -0700 Subject: alsa_sound: fix for output device routing during video chat Bug: 7163358 - Output device for MODE_IN_COMMUNICATION could be earpiece or speaker, do not update output device in switchDevice() if input device is BUILTIN_MIC Change-Id: I2a97a63f4cb57ef114695d3fd917282612b7a346 Signed-off-by: Iliyan Malchev --- alsa_sound/alsa_default.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/alsa_sound/alsa_default.cpp b/alsa_sound/alsa_default.cpp index 32c7bace..ea8ad2f0 100644 --- a/alsa_sound/alsa_default.cpp +++ b/alsa_sound/alsa_default.cpp @@ -376,10 +376,12 @@ void switchDevice(alsa_handle_t *handle, uint32_t devices, uint32_t mode) } else if (devices & AudioSystem::DEVICE_OUT_WIRED_HEADPHONE) { devices = devices | (AudioSystem::DEVICE_OUT_WIRED_HEADPHONE | AudioSystem::DEVICE_IN_BUILTIN_MIC); - } else if ((devices & AudioSystem::DEVICE_OUT_EARPIECE) || - (devices & AudioSystem::DEVICE_IN_BUILTIN_MIC)) { - devices = devices | (AudioSystem::DEVICE_IN_BUILTIN_MIC | - AudioSystem::DEVICE_OUT_EARPIECE); + } else if (devices & AudioSystem::DEVICE_IN_BUILTIN_MIC) { + if (mode == AudioSystem::MODE_IN_CALL) { + devices |= AudioSystem::DEVICE_OUT_EARPIECE; + } + } else if (devices & AudioSystem::DEVICE_OUT_EARPIECE) { + devices = devices | AudioSystem::DEVICE_IN_BUILTIN_MIC; } else if (devices & AudioSystem::DEVICE_OUT_SPEAKER) { devices = devices | (AudioSystem::DEVICE_IN_BACK_MIC | AudioSystem::DEVICE_OUT_SPEAKER); @@ -423,12 +425,14 @@ void switchDevice(alsa_handle_t *handle, uint32_t devices, uint32_t mode) if ((rxDevice != NULL) && (txDevice != NULL)) { if (((strncmp(rxDevice, curRxUCMDevice, MAX_STR_LEN)) || - (strncmp(txDevice, curTxUCMDevice, MAX_STR_LEN))) && (mode == AudioSystem::MODE_IN_CALL)) + (strncmp(txDevice, curTxUCMDevice, MAX_STR_LEN))) && + ((mode == AudioSystem::MODE_IN_CALL) || + (mode == AudioSystem::MODE_IN_COMMUNICATION))) inCallDevSwitch = true; } #ifdef QCOM_CSDCLIENT_ENABLED - if (mode == AudioSystem::MODE_IN_CALL && platform_is_Fusion3() && (inCallDevSwitch == true)) { + if (platform_is_Fusion3() && (inCallDevSwitch == true)) { if (csd_disable_device == NULL) { ALOGE("dlsym:Error:%s Loading csd_client_disable_device", dlerror()); } else { @@ -528,7 +532,7 @@ void switchDevice(alsa_handle_t *handle, uint32_t devices, uint32_t mode) } ALOGD("switchDevice: curTxUCMDevivce %s curRxDevDevice %s", curTxUCMDevice, curRxUCMDevice); - if (mode == AudioSystem::MODE_IN_CALL && platform_is_Fusion3() && (inCallDevSwitch == true)) { + if (platform_is_Fusion3() && (inCallDevSwitch == true)) { /* get tx acdb id */ memset(&ident,0,sizeof(ident)); strlcpy(ident, "ACDBID/", sizeof(ident)); -- cgit v1.2.3 From 5481e7629e04e4d50ac5b471d0dafd720c0a5241 Mon Sep 17 00:00:00 2001 From: SathishKumar Mani Date: Wed, 26 Sep 2012 20:23:34 -0700 Subject: alsa_sound: fix for SIP call mute issue. -Mute VOIP through audio path is not supported by kernel, so calling setVoipMicMute() to disable ""Voip Tx Mute"" fails -Mute VOIP by cleanning buffers read if setMicMute is set -Remove mVoipMicMute and use mMicMute for voice and VOIP Bug: 7213748 Change-Id: Ie2a200470c16da2e4ae991c0814ec8dfb4666833 Signed-off-by: Iliyan Malchev --- alsa_sound/ALSAStreamOps.cpp | 2 -- alsa_sound/AudioHardwareALSA.cpp | 36 +++++++----------------------------- alsa_sound/AudioHardwareALSA.h | 1 - alsa_sound/AudioStreamInALSA.cpp | 5 ++++- alsa_sound/AudioStreamOutALSA.cpp | 1 - 5 files changed, 11 insertions(+), 34 deletions(-) diff --git a/alsa_sound/ALSAStreamOps.cpp b/alsa_sound/ALSAStreamOps.cpp index bb3dfe64..0ce9494c 100644 --- a/alsa_sound/ALSAStreamOps.cpp +++ b/alsa_sound/ALSAStreamOps.cpp @@ -61,7 +61,6 @@ ALSAStreamOps::~ALSAStreamOps() } } mParent->mVoipStreamCount = 0; - mParent->mVoipMicMute = 0; mParent->mVoipBitRate = 0; } close(); @@ -348,7 +347,6 @@ void ALSAStreamOps::close() ALOGD("close"); if((!strncmp(mHandle->useCase, SND_USE_CASE_VERB_IP_VOICECALL, strlen(SND_USE_CASE_VERB_IP_VOICECALL))) || (!strncmp(mHandle->useCase, SND_USE_CASE_MOD_PLAY_VOIP, strlen(SND_USE_CASE_MOD_PLAY_VOIP)))) { - mParent->mVoipMicMute = false; mParent->mVoipBitRate = 0; mParent->mVoipStreamCount = 0; } diff --git a/alsa_sound/AudioHardwareALSA.cpp b/alsa_sound/AudioHardwareALSA.cpp index ed82f527..8613cd0a 100644 --- a/alsa_sound/AudioHardwareALSA.cpp +++ b/alsa_sound/AudioHardwareALSA.cpp @@ -71,7 +71,7 @@ AudioHardwareInterface *AudioHardwareALSA::create() { } AudioHardwareALSA::AudioHardwareALSA() : - mALSADevice(0),mVoipStreamCount(0),mVoipMicMute(false),mVoipBitRate(0) + mALSADevice(0),mVoipStreamCount(0),mVoipBitRate(0) ,mCallState(0),mAcdbHandle(NULL),mCsdHandle(NULL) { FILE *fp; @@ -737,7 +737,6 @@ AudioHardwareALSA::openOutputStream(uint32_t devices, } if(voipstream_active == false) { mVoipStreamCount = 0; - mVoipMicMute = false; alsa_handle_t alsa_handle; unsigned long bufferSize; if(*sampleRate == VOIP_SAMPLING_RATE_8K) { @@ -1032,7 +1031,6 @@ AudioHardwareALSA::openInputStream(uint32_t devices, } if(voipstream_active == false) { mVoipStreamCount = 0; - mVoipMicMute = false; alsa_handle_t alsa_handle; unsigned long bufferSize; if(*sampleRate == VOIP_SAMPLING_RATE_8K) { @@ -1291,26 +1289,11 @@ AudioHardwareALSA::closeInputStream(AudioStreamIn* in) status_t AudioHardwareALSA::setMicMute(bool state) { - int newMode = mode(); - ALOGD("setMicMute newMode %d",newMode); - if(newMode == AudioSystem::MODE_IN_COMMUNICATION) { - if (mVoipMicMute != state) { - mVoipMicMute = state; - ALOGD("setMicMute: mVoipMicMute %d", mVoipMicMute); - if(mALSADevice) { - mALSADevice->setVoipMicMute(state); - } - } - } else { - if (mMicMute != state) { - mMicMute = state; - ALOGD("setMicMute: mMicMute %d", mMicMute); - if(mALSADevice) { - if(mCSCallActive == CS_ACTIVE) - mALSADevice->setMicMute(state); - if(mVolteCallActive == IMS_ACTIVE) - mALSADevice->setVoLTEMicMute(state); - } + if (mMicMute != state) { + mMicMute = state; + ALOGD("setMicMute: mMicMute %d", mMicMute); + if(mALSADevice) { + mALSADevice->setMicMute(state); } } return NO_ERROR; @@ -1318,12 +1301,7 @@ status_t AudioHardwareALSA::setMicMute(bool state) status_t AudioHardwareALSA::getMicMute(bool *state) { - int newMode = mode(); - if(newMode == AudioSystem::MODE_IN_COMMUNICATION) { - *state = mVoipMicMute; - } else { - *state = mMicMute; - } + *state = mMicMute; return NO_ERROR; } diff --git a/alsa_sound/AudioHardwareALSA.h b/alsa_sound/AudioHardwareALSA.h index 3d952a43..957bf75e 100644 --- a/alsa_sound/AudioHardwareALSA.h +++ b/alsa_sound/AudioHardwareALSA.h @@ -566,7 +566,6 @@ protected: * Settings and Qualcomm Settings applications */ uint32_t mDevSettingsFlag; uint32_t mVoipStreamCount; - bool mVoipMicMute; uint32_t mVoipBitRate; uint32_t mIncallMode; diff --git a/alsa_sound/AudioStreamInALSA.cpp b/alsa_sound/AudioStreamInALSA.cpp index 30de979e..031d4771 100644 --- a/alsa_sound/AudioStreamInALSA.cpp +++ b/alsa_sound/AudioStreamInALSA.cpp @@ -445,6 +445,10 @@ ssize_t AudioStreamInALSA::read(void *buffer, ssize_t bytes) else { read += static_cast((period_size)); read_pending -= period_size; + //Set mute by cleanning buffers read + if (mParent->mMicMute) { + memset(buffer, 0, period_size); + } buffer = ((uint8_t *)buffer) + period_size; } @@ -491,7 +495,6 @@ status_t AudioStreamInALSA::close() return NO_ERROR; } mParent->mVoipStreamCount = 0; - mParent->mVoipMicMute = 0; #ifdef QCOM_USBAUDIO_ENABLED } else { ALOGD("Deregistering REC bit, musbRecordingState:%d", mParent->musbRecordingState); diff --git a/alsa_sound/AudioStreamOutALSA.cpp b/alsa_sound/AudioStreamOutALSA.cpp index be6951ea..c9ea6b54 100644 --- a/alsa_sound/AudioStreamOutALSA.cpp +++ b/alsa_sound/AudioStreamOutALSA.cpp @@ -299,7 +299,6 @@ status_t AudioStreamOutALSA::close() return NO_ERROR; } mParent->mVoipStreamCount = 0; - mParent->mVoipMicMute = 0; } #ifdef QCOM_USBAUDIO_ENABLED else if((!strcmp(mHandle->useCase, SND_USE_CASE_VERB_HIFI_LOW_POWER)) || -- cgit v1.2.3 From 604ccc983c49e360ab60427a65d507fbc7672300 Mon Sep 17 00:00:00 2001 From: Iliyan Malchev Date: Thu, 27 Sep 2012 21:29:09 -0700 Subject: Revert "alsa_sound: fix for SIP call mute issue." This reverts commit f859d3e80b790d4b525515918f1c6889383cc495. bug: 7250052 reopens-bug: 7213748 Change-Id: I33312c0be196b327887edc93c0b766bcf86a94bc Signed-off-by: Iliyan Malchev --- alsa_sound/ALSAStreamOps.cpp | 2 ++ alsa_sound/AudioHardwareALSA.cpp | 36 +++++++++++++++++++++++++++++------- alsa_sound/AudioHardwareALSA.h | 1 + alsa_sound/AudioStreamInALSA.cpp | 5 +---- alsa_sound/AudioStreamOutALSA.cpp | 1 + 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/alsa_sound/ALSAStreamOps.cpp b/alsa_sound/ALSAStreamOps.cpp index 0ce9494c..bb3dfe64 100644 --- a/alsa_sound/ALSAStreamOps.cpp +++ b/alsa_sound/ALSAStreamOps.cpp @@ -61,6 +61,7 @@ ALSAStreamOps::~ALSAStreamOps() } } mParent->mVoipStreamCount = 0; + mParent->mVoipMicMute = 0; mParent->mVoipBitRate = 0; } close(); @@ -347,6 +348,7 @@ void ALSAStreamOps::close() ALOGD("close"); if((!strncmp(mHandle->useCase, SND_USE_CASE_VERB_IP_VOICECALL, strlen(SND_USE_CASE_VERB_IP_VOICECALL))) || (!strncmp(mHandle->useCase, SND_USE_CASE_MOD_PLAY_VOIP, strlen(SND_USE_CASE_MOD_PLAY_VOIP)))) { + mParent->mVoipMicMute = false; mParent->mVoipBitRate = 0; mParent->mVoipStreamCount = 0; } diff --git a/alsa_sound/AudioHardwareALSA.cpp b/alsa_sound/AudioHardwareALSA.cpp index 8613cd0a..ed82f527 100644 --- a/alsa_sound/AudioHardwareALSA.cpp +++ b/alsa_sound/AudioHardwareALSA.cpp @@ -71,7 +71,7 @@ AudioHardwareInterface *AudioHardwareALSA::create() { } AudioHardwareALSA::AudioHardwareALSA() : - mALSADevice(0),mVoipStreamCount(0),mVoipBitRate(0) + mALSADevice(0),mVoipStreamCount(0),mVoipMicMute(false),mVoipBitRate(0) ,mCallState(0),mAcdbHandle(NULL),mCsdHandle(NULL) { FILE *fp; @@ -737,6 +737,7 @@ AudioHardwareALSA::openOutputStream(uint32_t devices, } if(voipstream_active == false) { mVoipStreamCount = 0; + mVoipMicMute = false; alsa_handle_t alsa_handle; unsigned long bufferSize; if(*sampleRate == VOIP_SAMPLING_RATE_8K) { @@ -1031,6 +1032,7 @@ AudioHardwareALSA::openInputStream(uint32_t devices, } if(voipstream_active == false) { mVoipStreamCount = 0; + mVoipMicMute = false; alsa_handle_t alsa_handle; unsigned long bufferSize; if(*sampleRate == VOIP_SAMPLING_RATE_8K) { @@ -1289,11 +1291,26 @@ AudioHardwareALSA::closeInputStream(AudioStreamIn* in) status_t AudioHardwareALSA::setMicMute(bool state) { - if (mMicMute != state) { - mMicMute = state; - ALOGD("setMicMute: mMicMute %d", mMicMute); - if(mALSADevice) { - mALSADevice->setMicMute(state); + int newMode = mode(); + ALOGD("setMicMute newMode %d",newMode); + if(newMode == AudioSystem::MODE_IN_COMMUNICATION) { + if (mVoipMicMute != state) { + mVoipMicMute = state; + ALOGD("setMicMute: mVoipMicMute %d", mVoipMicMute); + if(mALSADevice) { + mALSADevice->setVoipMicMute(state); + } + } + } else { + if (mMicMute != state) { + mMicMute = state; + ALOGD("setMicMute: mMicMute %d", mMicMute); + if(mALSADevice) { + if(mCSCallActive == CS_ACTIVE) + mALSADevice->setMicMute(state); + if(mVolteCallActive == IMS_ACTIVE) + mALSADevice->setVoLTEMicMute(state); + } } } return NO_ERROR; @@ -1301,7 +1318,12 @@ status_t AudioHardwareALSA::setMicMute(bool state) status_t AudioHardwareALSA::getMicMute(bool *state) { - *state = mMicMute; + int newMode = mode(); + if(newMode == AudioSystem::MODE_IN_COMMUNICATION) { + *state = mVoipMicMute; + } else { + *state = mMicMute; + } return NO_ERROR; } diff --git a/alsa_sound/AudioHardwareALSA.h b/alsa_sound/AudioHardwareALSA.h index 957bf75e..3d952a43 100644 --- a/alsa_sound/AudioHardwareALSA.h +++ b/alsa_sound/AudioHardwareALSA.h @@ -566,6 +566,7 @@ protected: * Settings and Qualcomm Settings applications */ uint32_t mDevSettingsFlag; uint32_t mVoipStreamCount; + bool mVoipMicMute; uint32_t mVoipBitRate; uint32_t mIncallMode; diff --git a/alsa_sound/AudioStreamInALSA.cpp b/alsa_sound/AudioStreamInALSA.cpp index 031d4771..30de979e 100644 --- a/alsa_sound/AudioStreamInALSA.cpp +++ b/alsa_sound/AudioStreamInALSA.cpp @@ -445,10 +445,6 @@ ssize_t AudioStreamInALSA::read(void *buffer, ssize_t bytes) else { read += static_cast((period_size)); read_pending -= period_size; - //Set mute by cleanning buffers read - if (mParent->mMicMute) { - memset(buffer, 0, period_size); - } buffer = ((uint8_t *)buffer) + period_size; } @@ -495,6 +491,7 @@ status_t AudioStreamInALSA::close() return NO_ERROR; } mParent->mVoipStreamCount = 0; + mParent->mVoipMicMute = 0; #ifdef QCOM_USBAUDIO_ENABLED } else { ALOGD("Deregistering REC bit, musbRecordingState:%d", mParent->musbRecordingState); diff --git a/alsa_sound/AudioStreamOutALSA.cpp b/alsa_sound/AudioStreamOutALSA.cpp index c9ea6b54..be6951ea 100644 --- a/alsa_sound/AudioStreamOutALSA.cpp +++ b/alsa_sound/AudioStreamOutALSA.cpp @@ -299,6 +299,7 @@ status_t AudioStreamOutALSA::close() return NO_ERROR; } mParent->mVoipStreamCount = 0; + mParent->mVoipMicMute = 0; } #ifdef QCOM_USBAUDIO_ENABLED else if((!strcmp(mHandle->useCase, SND_USE_CASE_VERB_HIFI_LOW_POWER)) || -- cgit v1.2.3