Loading Android.mk +1 −1 Original line number Original line Diff line number Diff line ifneq ($(filter msm8960 msm8226 msm8x26 msm8974 msm8x74,$(TARGET_BOARD_PLATFORM)),) ifneq ($(filter msm8960 msm8226 msm8x26 msm8610 msm8974 msm8x74,$(TARGET_BOARD_PLATFORM)),) MY_LOCAL_PATH := $(call my-dir) MY_LOCAL_PATH := $(call my-dir) Loading hal/Android.mk +5 −2 Original line number Original line Diff line number Diff line Loading @@ -7,9 +7,12 @@ include $(CLEAR_VARS) LOCAL_ARM_MODE := arm LOCAL_ARM_MODE := arm AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM) AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM) ifneq ($(filter msm8974 msm8226,$(TARGET_BOARD_PLATFORM)),) ifneq ($(filter msm8974 msm8226 msm8610,$(TARGET_BOARD_PLATFORM)),) # B-family platform uses msm8974 code base # B-family platform uses msm8974 code base AUDIO_PLATFORM = msm8974 AUDIO_PLATFORM = msm8974 ifneq ($(filter msm8610,$(TARGET_BOARD_PLATFORM)),) LOCAL_CFLAGS := -DPLATFORM_MSM8610 endif endif endif LOCAL_SRC_FILES := \ LOCAL_SRC_FILES := \ Loading @@ -30,7 +33,7 @@ LOCAL_C_INCLUDES += \ $(call include-path-for, audio-effects) \ $(call include-path-for, audio-effects) \ $(LOCAL_PATH)/$(AUDIO_PLATFORM) $(LOCAL_PATH)/$(AUDIO_PLATFORM) LOCAL_MODULE := audio.primary.$(AUDIO_PLATFORM) LOCAL_MODULE := audio.primary.$(TARGET_BOARD_PLATFORM) LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw Loading hal/audio_hw.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,7 @@ /* Flags used to initialize acdb_settings variable that goes to ACDB library */ /* Flags used to initialize acdb_settings variable that goes to ACDB library */ #define DMIC_FLAG 0x00000002 #define DMIC_FLAG 0x00000002 #define QMIC_FLAG 0x00000004 #define TTY_MODE_OFF 0x00000010 #define TTY_MODE_OFF 0x00000010 #define TTY_MODE_FULL 0x00000020 #define TTY_MODE_FULL 0x00000020 #define TTY_MODE_VCO 0x00000040 #define TTY_MODE_VCO 0x00000040 Loading hal/msm8960/platform.c +46 −62 Original line number Original line Diff line number Diff line Loading @@ -29,10 +29,6 @@ #define LIB_ACDB_LOADER "libacdbloader.so" #define LIB_ACDB_LOADER "libacdbloader.so" #define LIB_CSD_CLIENT "libcsd-client.so" #define LIB_CSD_CLIENT "libcsd-client.so" #define DUALMIC_CONFIG_NONE 0 /* Target does not contain 2 mics */ #define DUALMIC_CONFIG_ENDFIRE 1 #define DUALMIC_CONFIG_BROADSIDE 2 /* /* * This is the sysfs path for the HDMI audio data block * This is the sysfs path for the HDMI audio data block */ */ Loading Loading @@ -80,6 +76,7 @@ struct platform_data { bool fluence_in_spkr_mode; bool fluence_in_spkr_mode; bool fluence_in_voice_call; bool fluence_in_voice_call; bool fluence_in_voice_rec; bool fluence_in_voice_rec; int fluence_type; int dualmic_config; int dualmic_config; void *acdb_handle; void *acdb_handle; Loading Loading @@ -140,19 +137,15 @@ static const char * const device_table[SND_DEVICE_MAX] = { [SND_DEVICE_IN_HDMI_MIC] = "hdmi-mic", [SND_DEVICE_IN_HDMI_MIC] = "hdmi-mic", [SND_DEVICE_IN_BT_SCO_MIC] = "bt-sco-mic", [SND_DEVICE_IN_BT_SCO_MIC] = "bt-sco-mic", [SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic", [SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic", [SND_DEVICE_IN_VOICE_DMIC_EF] = "voice-dmic-ef", [SND_DEVICE_IN_VOICE_DMIC] = "voice-dmic-ef", [SND_DEVICE_IN_VOICE_DMIC_BS] = "voice-dmic-bs", [SND_DEVICE_IN_VOICE_DMIC_TMUS] = "voice-dmic-ef-tmus", [SND_DEVICE_IN_VOICE_DMIC_EF_TMUS] = "voice-dmic-ef-tmus", [SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = "voice-speaker-dmic-ef", [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF] = "voice-speaker-dmic-ef", [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS] = "voice-speaker-dmic-bs", [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = "voice-tty-full-headset-mic", [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = "voice-tty-full-headset-mic", [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = "voice-tty-vco-handset-mic", [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = "voice-tty-vco-handset-mic", [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = "voice-tty-hco-headset-mic", [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = "voice-tty-hco-headset-mic", [SND_DEVICE_IN_VOICE_REC_MIC] = "voice-rec-mic", [SND_DEVICE_IN_VOICE_REC_MIC] = "voice-rec-mic", [SND_DEVICE_IN_VOICE_REC_DMIC_EF] = "voice-rec-dmic-ef", [SND_DEVICE_IN_VOICE_REC_DMIC] = "voice-rec-dmic-ef", [SND_DEVICE_IN_VOICE_REC_DMIC_BS] = "voice-rec-dmic-bs", [SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = "voice-rec-dmic-ef-fluence", [SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE] = "voice-rec-dmic-ef-fluence", [SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE] = "voice-rec-dmic-bs-fluence", }; }; /* ACDB IDs (audio DSP path configuration IDs) for each sound device */ /* ACDB IDs (audio DSP path configuration IDs) for each sound device */ Loading Loading @@ -184,20 +177,16 @@ static const int acdb_device_table[SND_DEVICE_MAX] = { [SND_DEVICE_IN_HDMI_MIC] = 4, [SND_DEVICE_IN_HDMI_MIC] = 4, [SND_DEVICE_IN_BT_SCO_MIC] = 21, [SND_DEVICE_IN_BT_SCO_MIC] = 21, [SND_DEVICE_IN_CAMCORDER_MIC] = 61, [SND_DEVICE_IN_CAMCORDER_MIC] = 61, [SND_DEVICE_IN_VOICE_DMIC_EF] = 6, [SND_DEVICE_IN_VOICE_DMIC] = 6, [SND_DEVICE_IN_VOICE_DMIC_BS] = 5, [SND_DEVICE_IN_VOICE_DMIC_TMUS] = 91, [SND_DEVICE_IN_VOICE_DMIC_EF_TMUS] = 91, [SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = 13, [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF] = 13, [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS] = 12, [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16, [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16, [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = 36, [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = 36, [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = 16, [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = 16, [SND_DEVICE_IN_VOICE_REC_MIC] = 62, [SND_DEVICE_IN_VOICE_REC_MIC] = 62, /* TODO: Update with proper acdb ids */ /* TODO: Update with proper acdb ids */ [SND_DEVICE_IN_VOICE_REC_DMIC_EF] = 62, [SND_DEVICE_IN_VOICE_REC_DMIC] = 62, [SND_DEVICE_IN_VOICE_REC_DMIC_BS] = 62, [SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = 6, [SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE] = 6, [SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE] = 5, }; }; static pthread_once_t check_op_once_ctl = PTHREAD_ONCE_INIT; static pthread_once_t check_op_once_ctl = PTHREAD_ONCE_INIT; Loading Loading @@ -265,33 +254,33 @@ void *platform_init(struct audio_device *adev) my_data = calloc(1, sizeof(struct platform_data)); my_data = calloc(1, sizeof(struct platform_data)); my_data->adev = adev; my_data->adev = adev; my_data->dualmic_config = DUALMIC_CONFIG_NONE; my_data->fluence_in_spkr_mode = false; my_data->fluence_in_spkr_mode = false; my_data->fluence_in_voice_call = false; my_data->fluence_in_voice_call = false; my_data->fluence_in_voice_rec = false; my_data->fluence_in_voice_rec = false; my_data->fluence_type = FLUENCE_NONE; property_get("persist.audio.dualmic.config",value,""); property_get("ro.qc.sdk.audio.fluencetype", value, ""); if (!strcmp("broadside", value)) { if (!strncmp("fluencepro", value, sizeof("fluencepro"))) { my_data->dualmic_config = DUALMIC_CONFIG_BROADSIDE; my_data->fluence_type = FLUENCE_QUAD_MIC; adev->acdb_settings |= DMIC_FLAG; } else if (!strncmp("fluence", value, sizeof("fluence"))) { } else if (!strcmp("endfire", value)) { my_data->fluence_type = FLUENCE_DUAL_MIC; my_data->dualmic_config = DUALMIC_CONFIG_ENDFIRE; } else { adev->acdb_settings |= DMIC_FLAG; my_data->fluence_type = FLUENCE_NONE; } } if (my_data->dualmic_config != DUALMIC_CONFIG_NONE) { if (my_data->fluence_type != FLUENCE_NONE) { property_get("persist.audio.fluence.voicecall",value,""); property_get("persist.audio.fluence.voicecall",value,""); if (!strcmp("true", value)) { if (!strncmp("true", value, sizeof("true"))) { my_data->fluence_in_voice_call = true; my_data->fluence_in_voice_call = true; } } property_get("persist.audio.fluence.voicerec",value,""); property_get("persist.audio.fluence.voicerec",value,""); if (!strcmp("true", value)) { if (!strncmp("true", value, sizeof("true"))) { my_data->fluence_in_voice_rec = true; my_data->fluence_in_voice_rec = true; } } property_get("persist.audio.fluence.speaker",value,""); property_get("persist.audio.fluence.speaker",value,""); if (!strcmp("true", value)) { if (!strncmp("true", value, sizeof("true"))) { my_data->fluence_in_spkr_mode = true; my_data->fluence_in_spkr_mode = true; } } } } Loading Loading @@ -683,30 +672,31 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d } } if (out_device & AUDIO_DEVICE_OUT_EARPIECE || if (out_device & AUDIO_DEVICE_OUT_EARPIECE || out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) { out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) { if (my_data->fluence_in_voice_call == false) { if (my_data->fluence_type == FLUENCE_NONE || my_data->fluence_in_voice_call == false) { snd_device = SND_DEVICE_IN_HANDSET_MIC; snd_device = SND_DEVICE_IN_HANDSET_MIC; } else { } else { if (my_data->dualmic_config == DUALMIC_CONFIG_ENDFIRE) { if (is_operator_tmus()) if (is_operator_tmus()) snd_device = SND_DEVICE_IN_VOICE_DMIC_EF_TMUS; snd_device = SND_DEVICE_IN_VOICE_DMIC_TMUS; else else snd_device = SND_DEVICE_IN_VOICE_DMIC_EF; snd_device = SND_DEVICE_IN_VOICE_DMIC; } else if(my_data->dualmic_config == DUALMIC_CONFIG_BROADSIDE) adev->acdb_settings |= DMIC_FLAG; snd_device = SND_DEVICE_IN_VOICE_DMIC_BS; else snd_device = SND_DEVICE_IN_HANDSET_MIC; } } } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) { } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_VOICE_HEADSET_MIC; snd_device = SND_DEVICE_IN_VOICE_HEADSET_MIC; } else if (out_device & AUDIO_DEVICE_OUT_ALL_SCO) { } else if (out_device & AUDIO_DEVICE_OUT_ALL_SCO) { snd_device = SND_DEVICE_IN_BT_SCO_MIC ; snd_device = SND_DEVICE_IN_BT_SCO_MIC ; } else if (out_device & AUDIO_DEVICE_OUT_SPEAKER) { } else if (out_device & AUDIO_DEVICE_OUT_SPEAKER) { if (my_data->fluence_in_voice_call && my_data->fluence_in_spkr_mode && if (my_data->fluence_type != FLUENCE_NONE && my_data->dualmic_config == DUALMIC_CONFIG_ENDFIRE) { my_data->fluence_in_voice_call && snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF; my_data->fluence_in_spkr_mode) { } else if (my_data->fluence_in_voice_call && my_data->fluence_in_spkr_mode && if(my_data->fluence_type == FLUENCE_DUAL_MIC) { my_data->dualmic_config == DUALMIC_CONFIG_BROADSIDE) { adev->acdb_settings |= DMIC_FLAG; snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS; snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC; } else { adev->acdb_settings |= QMIC_FLAG; snd_device = SND_DEVICE_IN_VOICE_SPEAKER_QMIC; } } else { } else { snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC; snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC; } } Loading @@ -718,21 +708,15 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d } } } else if (source == AUDIO_SOURCE_VOICE_RECOGNITION) { } else if (source == AUDIO_SOURCE_VOICE_RECOGNITION) { if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { if (my_data->dualmic_config == DUALMIC_CONFIG_ENDFIRE) { if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK) snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_EF; else if (my_data->fluence_in_voice_rec) snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE; } else if (my_data->dualmic_config == DUALMIC_CONFIG_BROADSIDE) { if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK) if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK) snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_BS; snd_device = SND_DEVICE_IN_VOICE_REC_DMIC; else if (my_data->fluence_in_voice_rec) else if (my_data->fluence_in_voice_rec) snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE; snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE; } if (snd_device == SND_DEVICE_NONE) { if (snd_device == SND_DEVICE_NONE) snd_device = SND_DEVICE_IN_VOICE_REC_MIC; snd_device = SND_DEVICE_IN_VOICE_REC_MIC; } else adev->acdb_settings |= DMIC_FLAG; } } } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) { } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) { if (out_device & AUDIO_DEVICE_OUT_SPEAKER) if (out_device & AUDIO_DEVICE_OUT_SPEAKER) Loading hal/msm8960/platform.h +12 −9 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,12 @@ #ifndef QCOM_AUDIO_PLATFORM_H #ifndef QCOM_AUDIO_PLATFORM_H #define QCOM_AUDIO_PLATFORM_H #define QCOM_AUDIO_PLATFORM_H enum { FLUENCE_NONE, FLUENCE_DUAL_MIC, FLUENCE_QUAD_MIC }; /* /* * Below are the devices for which is back end is same, SLIMBUS_0_RX. * Below are the devices for which is back end is same, SLIMBUS_0_RX. * All these devices are handled by the internal HW codec. We can * All these devices are handled by the internal HW codec. We can Loading Loading @@ -69,19 +75,16 @@ enum { SND_DEVICE_IN_HDMI_MIC, SND_DEVICE_IN_HDMI_MIC, SND_DEVICE_IN_BT_SCO_MIC, SND_DEVICE_IN_BT_SCO_MIC, SND_DEVICE_IN_CAMCORDER_MIC, SND_DEVICE_IN_CAMCORDER_MIC, SND_DEVICE_IN_VOICE_DMIC_EF, SND_DEVICE_IN_VOICE_DMIC, SND_DEVICE_IN_VOICE_DMIC_BS, SND_DEVICE_IN_VOICE_DMIC_TMUS, SND_DEVICE_IN_VOICE_DMIC_EF_TMUS, SND_DEVICE_IN_VOICE_SPEAKER_DMIC, SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF, SND_DEVICE_IN_VOICE_SPEAKER_QMIC, SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS, SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC, SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC, SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC, SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC, SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC, SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC, SND_DEVICE_IN_VOICE_REC_MIC, SND_DEVICE_IN_VOICE_REC_MIC, SND_DEVICE_IN_VOICE_REC_DMIC_EF, SND_DEVICE_IN_VOICE_REC_DMIC, SND_DEVICE_IN_VOICE_REC_DMIC_BS, SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE, SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE, SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE, SND_DEVICE_IN_END, SND_DEVICE_IN_END, SND_DEVICE_MAX = SND_DEVICE_IN_END, SND_DEVICE_MAX = SND_DEVICE_IN_END, Loading Loading
Android.mk +1 −1 Original line number Original line Diff line number Diff line ifneq ($(filter msm8960 msm8226 msm8x26 msm8974 msm8x74,$(TARGET_BOARD_PLATFORM)),) ifneq ($(filter msm8960 msm8226 msm8x26 msm8610 msm8974 msm8x74,$(TARGET_BOARD_PLATFORM)),) MY_LOCAL_PATH := $(call my-dir) MY_LOCAL_PATH := $(call my-dir) Loading
hal/Android.mk +5 −2 Original line number Original line Diff line number Diff line Loading @@ -7,9 +7,12 @@ include $(CLEAR_VARS) LOCAL_ARM_MODE := arm LOCAL_ARM_MODE := arm AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM) AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM) ifneq ($(filter msm8974 msm8226,$(TARGET_BOARD_PLATFORM)),) ifneq ($(filter msm8974 msm8226 msm8610,$(TARGET_BOARD_PLATFORM)),) # B-family platform uses msm8974 code base # B-family platform uses msm8974 code base AUDIO_PLATFORM = msm8974 AUDIO_PLATFORM = msm8974 ifneq ($(filter msm8610,$(TARGET_BOARD_PLATFORM)),) LOCAL_CFLAGS := -DPLATFORM_MSM8610 endif endif endif LOCAL_SRC_FILES := \ LOCAL_SRC_FILES := \ Loading @@ -30,7 +33,7 @@ LOCAL_C_INCLUDES += \ $(call include-path-for, audio-effects) \ $(call include-path-for, audio-effects) \ $(LOCAL_PATH)/$(AUDIO_PLATFORM) $(LOCAL_PATH)/$(AUDIO_PLATFORM) LOCAL_MODULE := audio.primary.$(AUDIO_PLATFORM) LOCAL_MODULE := audio.primary.$(TARGET_BOARD_PLATFORM) LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw Loading
hal/audio_hw.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,7 @@ /* Flags used to initialize acdb_settings variable that goes to ACDB library */ /* Flags used to initialize acdb_settings variable that goes to ACDB library */ #define DMIC_FLAG 0x00000002 #define DMIC_FLAG 0x00000002 #define QMIC_FLAG 0x00000004 #define TTY_MODE_OFF 0x00000010 #define TTY_MODE_OFF 0x00000010 #define TTY_MODE_FULL 0x00000020 #define TTY_MODE_FULL 0x00000020 #define TTY_MODE_VCO 0x00000040 #define TTY_MODE_VCO 0x00000040 Loading
hal/msm8960/platform.c +46 −62 Original line number Original line Diff line number Diff line Loading @@ -29,10 +29,6 @@ #define LIB_ACDB_LOADER "libacdbloader.so" #define LIB_ACDB_LOADER "libacdbloader.so" #define LIB_CSD_CLIENT "libcsd-client.so" #define LIB_CSD_CLIENT "libcsd-client.so" #define DUALMIC_CONFIG_NONE 0 /* Target does not contain 2 mics */ #define DUALMIC_CONFIG_ENDFIRE 1 #define DUALMIC_CONFIG_BROADSIDE 2 /* /* * This is the sysfs path for the HDMI audio data block * This is the sysfs path for the HDMI audio data block */ */ Loading Loading @@ -80,6 +76,7 @@ struct platform_data { bool fluence_in_spkr_mode; bool fluence_in_spkr_mode; bool fluence_in_voice_call; bool fluence_in_voice_call; bool fluence_in_voice_rec; bool fluence_in_voice_rec; int fluence_type; int dualmic_config; int dualmic_config; void *acdb_handle; void *acdb_handle; Loading Loading @@ -140,19 +137,15 @@ static const char * const device_table[SND_DEVICE_MAX] = { [SND_DEVICE_IN_HDMI_MIC] = "hdmi-mic", [SND_DEVICE_IN_HDMI_MIC] = "hdmi-mic", [SND_DEVICE_IN_BT_SCO_MIC] = "bt-sco-mic", [SND_DEVICE_IN_BT_SCO_MIC] = "bt-sco-mic", [SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic", [SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic", [SND_DEVICE_IN_VOICE_DMIC_EF] = "voice-dmic-ef", [SND_DEVICE_IN_VOICE_DMIC] = "voice-dmic-ef", [SND_DEVICE_IN_VOICE_DMIC_BS] = "voice-dmic-bs", [SND_DEVICE_IN_VOICE_DMIC_TMUS] = "voice-dmic-ef-tmus", [SND_DEVICE_IN_VOICE_DMIC_EF_TMUS] = "voice-dmic-ef-tmus", [SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = "voice-speaker-dmic-ef", [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF] = "voice-speaker-dmic-ef", [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS] = "voice-speaker-dmic-bs", [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = "voice-tty-full-headset-mic", [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = "voice-tty-full-headset-mic", [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = "voice-tty-vco-handset-mic", [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = "voice-tty-vco-handset-mic", [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = "voice-tty-hco-headset-mic", [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = "voice-tty-hco-headset-mic", [SND_DEVICE_IN_VOICE_REC_MIC] = "voice-rec-mic", [SND_DEVICE_IN_VOICE_REC_MIC] = "voice-rec-mic", [SND_DEVICE_IN_VOICE_REC_DMIC_EF] = "voice-rec-dmic-ef", [SND_DEVICE_IN_VOICE_REC_DMIC] = "voice-rec-dmic-ef", [SND_DEVICE_IN_VOICE_REC_DMIC_BS] = "voice-rec-dmic-bs", [SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = "voice-rec-dmic-ef-fluence", [SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE] = "voice-rec-dmic-ef-fluence", [SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE] = "voice-rec-dmic-bs-fluence", }; }; /* ACDB IDs (audio DSP path configuration IDs) for each sound device */ /* ACDB IDs (audio DSP path configuration IDs) for each sound device */ Loading Loading @@ -184,20 +177,16 @@ static const int acdb_device_table[SND_DEVICE_MAX] = { [SND_DEVICE_IN_HDMI_MIC] = 4, [SND_DEVICE_IN_HDMI_MIC] = 4, [SND_DEVICE_IN_BT_SCO_MIC] = 21, [SND_DEVICE_IN_BT_SCO_MIC] = 21, [SND_DEVICE_IN_CAMCORDER_MIC] = 61, [SND_DEVICE_IN_CAMCORDER_MIC] = 61, [SND_DEVICE_IN_VOICE_DMIC_EF] = 6, [SND_DEVICE_IN_VOICE_DMIC] = 6, [SND_DEVICE_IN_VOICE_DMIC_BS] = 5, [SND_DEVICE_IN_VOICE_DMIC_TMUS] = 91, [SND_DEVICE_IN_VOICE_DMIC_EF_TMUS] = 91, [SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = 13, [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF] = 13, [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS] = 12, [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16, [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16, [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = 36, [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = 36, [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = 16, [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = 16, [SND_DEVICE_IN_VOICE_REC_MIC] = 62, [SND_DEVICE_IN_VOICE_REC_MIC] = 62, /* TODO: Update with proper acdb ids */ /* TODO: Update with proper acdb ids */ [SND_DEVICE_IN_VOICE_REC_DMIC_EF] = 62, [SND_DEVICE_IN_VOICE_REC_DMIC] = 62, [SND_DEVICE_IN_VOICE_REC_DMIC_BS] = 62, [SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = 6, [SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE] = 6, [SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE] = 5, }; }; static pthread_once_t check_op_once_ctl = PTHREAD_ONCE_INIT; static pthread_once_t check_op_once_ctl = PTHREAD_ONCE_INIT; Loading Loading @@ -265,33 +254,33 @@ void *platform_init(struct audio_device *adev) my_data = calloc(1, sizeof(struct platform_data)); my_data = calloc(1, sizeof(struct platform_data)); my_data->adev = adev; my_data->adev = adev; my_data->dualmic_config = DUALMIC_CONFIG_NONE; my_data->fluence_in_spkr_mode = false; my_data->fluence_in_spkr_mode = false; my_data->fluence_in_voice_call = false; my_data->fluence_in_voice_call = false; my_data->fluence_in_voice_rec = false; my_data->fluence_in_voice_rec = false; my_data->fluence_type = FLUENCE_NONE; property_get("persist.audio.dualmic.config",value,""); property_get("ro.qc.sdk.audio.fluencetype", value, ""); if (!strcmp("broadside", value)) { if (!strncmp("fluencepro", value, sizeof("fluencepro"))) { my_data->dualmic_config = DUALMIC_CONFIG_BROADSIDE; my_data->fluence_type = FLUENCE_QUAD_MIC; adev->acdb_settings |= DMIC_FLAG; } else if (!strncmp("fluence", value, sizeof("fluence"))) { } else if (!strcmp("endfire", value)) { my_data->fluence_type = FLUENCE_DUAL_MIC; my_data->dualmic_config = DUALMIC_CONFIG_ENDFIRE; } else { adev->acdb_settings |= DMIC_FLAG; my_data->fluence_type = FLUENCE_NONE; } } if (my_data->dualmic_config != DUALMIC_CONFIG_NONE) { if (my_data->fluence_type != FLUENCE_NONE) { property_get("persist.audio.fluence.voicecall",value,""); property_get("persist.audio.fluence.voicecall",value,""); if (!strcmp("true", value)) { if (!strncmp("true", value, sizeof("true"))) { my_data->fluence_in_voice_call = true; my_data->fluence_in_voice_call = true; } } property_get("persist.audio.fluence.voicerec",value,""); property_get("persist.audio.fluence.voicerec",value,""); if (!strcmp("true", value)) { if (!strncmp("true", value, sizeof("true"))) { my_data->fluence_in_voice_rec = true; my_data->fluence_in_voice_rec = true; } } property_get("persist.audio.fluence.speaker",value,""); property_get("persist.audio.fluence.speaker",value,""); if (!strcmp("true", value)) { if (!strncmp("true", value, sizeof("true"))) { my_data->fluence_in_spkr_mode = true; my_data->fluence_in_spkr_mode = true; } } } } Loading Loading @@ -683,30 +672,31 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d } } if (out_device & AUDIO_DEVICE_OUT_EARPIECE || if (out_device & AUDIO_DEVICE_OUT_EARPIECE || out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) { out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) { if (my_data->fluence_in_voice_call == false) { if (my_data->fluence_type == FLUENCE_NONE || my_data->fluence_in_voice_call == false) { snd_device = SND_DEVICE_IN_HANDSET_MIC; snd_device = SND_DEVICE_IN_HANDSET_MIC; } else { } else { if (my_data->dualmic_config == DUALMIC_CONFIG_ENDFIRE) { if (is_operator_tmus()) if (is_operator_tmus()) snd_device = SND_DEVICE_IN_VOICE_DMIC_EF_TMUS; snd_device = SND_DEVICE_IN_VOICE_DMIC_TMUS; else else snd_device = SND_DEVICE_IN_VOICE_DMIC_EF; snd_device = SND_DEVICE_IN_VOICE_DMIC; } else if(my_data->dualmic_config == DUALMIC_CONFIG_BROADSIDE) adev->acdb_settings |= DMIC_FLAG; snd_device = SND_DEVICE_IN_VOICE_DMIC_BS; else snd_device = SND_DEVICE_IN_HANDSET_MIC; } } } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) { } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_VOICE_HEADSET_MIC; snd_device = SND_DEVICE_IN_VOICE_HEADSET_MIC; } else if (out_device & AUDIO_DEVICE_OUT_ALL_SCO) { } else if (out_device & AUDIO_DEVICE_OUT_ALL_SCO) { snd_device = SND_DEVICE_IN_BT_SCO_MIC ; snd_device = SND_DEVICE_IN_BT_SCO_MIC ; } else if (out_device & AUDIO_DEVICE_OUT_SPEAKER) { } else if (out_device & AUDIO_DEVICE_OUT_SPEAKER) { if (my_data->fluence_in_voice_call && my_data->fluence_in_spkr_mode && if (my_data->fluence_type != FLUENCE_NONE && my_data->dualmic_config == DUALMIC_CONFIG_ENDFIRE) { my_data->fluence_in_voice_call && snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF; my_data->fluence_in_spkr_mode) { } else if (my_data->fluence_in_voice_call && my_data->fluence_in_spkr_mode && if(my_data->fluence_type == FLUENCE_DUAL_MIC) { my_data->dualmic_config == DUALMIC_CONFIG_BROADSIDE) { adev->acdb_settings |= DMIC_FLAG; snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS; snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC; } else { adev->acdb_settings |= QMIC_FLAG; snd_device = SND_DEVICE_IN_VOICE_SPEAKER_QMIC; } } else { } else { snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC; snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC; } } Loading @@ -718,21 +708,15 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d } } } else if (source == AUDIO_SOURCE_VOICE_RECOGNITION) { } else if (source == AUDIO_SOURCE_VOICE_RECOGNITION) { if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { if (my_data->dualmic_config == DUALMIC_CONFIG_ENDFIRE) { if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK) snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_EF; else if (my_data->fluence_in_voice_rec) snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE; } else if (my_data->dualmic_config == DUALMIC_CONFIG_BROADSIDE) { if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK) if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK) snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_BS; snd_device = SND_DEVICE_IN_VOICE_REC_DMIC; else if (my_data->fluence_in_voice_rec) else if (my_data->fluence_in_voice_rec) snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE; snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE; } if (snd_device == SND_DEVICE_NONE) { if (snd_device == SND_DEVICE_NONE) snd_device = SND_DEVICE_IN_VOICE_REC_MIC; snd_device = SND_DEVICE_IN_VOICE_REC_MIC; } else adev->acdb_settings |= DMIC_FLAG; } } } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) { } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) { if (out_device & AUDIO_DEVICE_OUT_SPEAKER) if (out_device & AUDIO_DEVICE_OUT_SPEAKER) Loading
hal/msm8960/platform.h +12 −9 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,12 @@ #ifndef QCOM_AUDIO_PLATFORM_H #ifndef QCOM_AUDIO_PLATFORM_H #define QCOM_AUDIO_PLATFORM_H #define QCOM_AUDIO_PLATFORM_H enum { FLUENCE_NONE, FLUENCE_DUAL_MIC, FLUENCE_QUAD_MIC }; /* /* * Below are the devices for which is back end is same, SLIMBUS_0_RX. * Below are the devices for which is back end is same, SLIMBUS_0_RX. * All these devices are handled by the internal HW codec. We can * All these devices are handled by the internal HW codec. We can Loading Loading @@ -69,19 +75,16 @@ enum { SND_DEVICE_IN_HDMI_MIC, SND_DEVICE_IN_HDMI_MIC, SND_DEVICE_IN_BT_SCO_MIC, SND_DEVICE_IN_BT_SCO_MIC, SND_DEVICE_IN_CAMCORDER_MIC, SND_DEVICE_IN_CAMCORDER_MIC, SND_DEVICE_IN_VOICE_DMIC_EF, SND_DEVICE_IN_VOICE_DMIC, SND_DEVICE_IN_VOICE_DMIC_BS, SND_DEVICE_IN_VOICE_DMIC_TMUS, SND_DEVICE_IN_VOICE_DMIC_EF_TMUS, SND_DEVICE_IN_VOICE_SPEAKER_DMIC, SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF, SND_DEVICE_IN_VOICE_SPEAKER_QMIC, SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS, SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC, SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC, SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC, SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC, SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC, SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC, SND_DEVICE_IN_VOICE_REC_MIC, SND_DEVICE_IN_VOICE_REC_MIC, SND_DEVICE_IN_VOICE_REC_DMIC_EF, SND_DEVICE_IN_VOICE_REC_DMIC, SND_DEVICE_IN_VOICE_REC_DMIC_BS, SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE, SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE, SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE, SND_DEVICE_IN_END, SND_DEVICE_IN_END, SND_DEVICE_MAX = SND_DEVICE_IN_END, SND_DEVICE_MAX = SND_DEVICE_IN_END, Loading