Loading hal/msm8974/hw_info.c +14 −0 Original line number Diff line number Diff line Loading @@ -450,6 +450,17 @@ static void update_hardware_info_8226(struct hardware_info *hw_info, const char } } static void update_hardware_info_bear(struct hardware_info *hw_info, const char *snd_card_name) { if (!strcmp(snd_card_name, "sdm660-snd-card")) { strlcpy(hw_info->name, "sdm660", sizeof(hw_info->name)); } else if (!strcmp(snd_card_name, "sdm660-tavil-snd-card")) { strlcpy(hw_info->name, "sdm660", sizeof(hw_info->name)); } else { ALOGW("%s: Not an SDM device", __func__); } } void *hw_info_init(const char *snd_card_name) { struct hardware_info *hw_info; Loading Loading @@ -492,6 +503,9 @@ void *hw_info_init(const char *snd_card_name) } else if(strstr(snd_card_name, "sdm845")) { ALOGV("SDM845 - variant soundcard"); update_hardware_info_sdm845(hw_info, snd_card_name); } else if (strstr(snd_card_name, "sdm660")) { ALOGV("Bear - variant soundcard"); update_hardware_info_bear(hw_info, snd_card_name); } else { ALOGE("%s: Unsupported target %s:",__func__, snd_card_name); free(hw_info); Loading hal/msm8974/platform.c +123 −19 Original line number Diff line number Diff line Loading @@ -57,6 +57,8 @@ #ifdef LINUX_ENABLED #define MIXER_XML_BASE_STRING "/etc/mixer_paths" #define MIXER_XML_DEFAULT_PATH "/etc/mixer_paths.xml" #define PLATFORM_INFO_XML_PATH_INTCODEC "/etc/audio_platform_info_intcodec.xml" #define PLATFORM_INFO_XML_PATH_SKUSH "/etc/audio_platform_info_skush.xml" #define PLATFORM_INFO_XML_PATH "/etc/audio_platform_info.xml" #define MIXER_XML_PATH_AUXPCM "/etc/mixer_paths_auxpcm.xml" #define MIXER_XML_PATH_I2S "/etc/mixer_paths_i2s.xml" Loading @@ -64,6 +66,8 @@ #else #define MIXER_XML_BASE_STRING "/vendor/etc/mixer_paths" #define MIXER_XML_DEFAULT_PATH "/vendor/etc/mixer_paths.xml" #define PLATFORM_INFO_XML_PATH_INTCODEC "/vendor/etc/audio_platform_info_intcodec.xml" #define PLATFORM_INFO_XML_PATH_SKUSH "/vendor/etc/audio_platform_info_skush.xml" #define PLATFORM_INFO_XML_PATH "/vendor/etc/audio_platform_info.xml" #define MIXER_XML_PATH_AUXPCM "/vendor/etc/mixer_paths_auxpcm.xml" #define MIXER_XML_PATH_I2S "/vendor/etc/mixer_paths_i2s.xml" Loading @@ -81,7 +85,6 @@ #define COMPRESS_OFFLOAD_FRAGMENT_SIZE_FOR_AV_STREAMING (2 * 1024) #define COMPRESS_OFFLOAD_FRAGMENT_SIZE (32 * 1024) #define DEFAULT_RX_BACKEND "SLIMBUS_0_RX" /* * Offload buffer size for compress passthrough Loading Loading @@ -150,6 +153,7 @@ char cal_name_info[WCD9XXX_MAX_CAL][MAX_CAL_NAME] = { [WCD9XXX_MBHC_CAL] = "mbhc_cal", [WCD9XXX_VBAT_CAL] = "vbat_cal", }; static char *default_rx_backend = NULL; #define AUDIO_PARAMETER_IS_HW_DECODER_SESSION_ALLOWED "is_hw_dec_session_allowed" Loading Loading @@ -231,6 +235,8 @@ struct platform_data { /* Vbat monitor related flags */ bool is_vbat_speaker; bool gsm_mode_enabled; bool is_slimbus_interface; bool is_internal_codec; int mono_speaker; /* Audio calibration related functions */ void *acdb_handle; Loading Loading @@ -659,6 +665,7 @@ static struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = { {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET)}, {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_FULL_USB)}, {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_VCO_USB)}, {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TX)}, {TO_NAME_INDEX(SND_DEVICE_OUT_AFE_PROXY)}, {TO_NAME_INDEX(SND_DEVICE_OUT_USB_HEADSET)}, {TO_NAME_INDEX(SND_DEVICE_OUT_USB_HEADPHONES)}, Loading Loading @@ -718,6 +725,7 @@ static struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = { {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_REC_MIC_NS)}, {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_REC_DMIC_STEREO)}, {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE)}, {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_RX)}, {TO_NAME_INDEX(SND_DEVICE_IN_USB_HEADSET_MIC)}, {TO_NAME_INDEX(SND_DEVICE_IN_CAPTURE_FM)}, {TO_NAME_INDEX(SND_DEVICE_IN_AANC_HANDSET_MIC)}, Loading Loading @@ -910,6 +918,18 @@ static int msm_be_id_array_len = #define LOW_LATENCY_PLATFORM_DELAY (13*1000LL) #define ULL_PLATFORM_DELAY (6*1000LL) static void update_codec_type_and_interface(struct platform_data * my_data, const char *snd_card_name) { if (!strncmp(snd_card_name, "sdm660-snd-card-skush", sizeof("sdm660-snd-card-skush")) || !strncmp(snd_card_name, "sdm660-snd-card-skush", sizeof("sdm660-snd-card-mtp"))) { ALOGI("%s: snd_card_name: %s",__func__,snd_card_name); my_data->is_internal_codec = true; my_data->is_slimbus_interface = false; } } static bool can_enable_mbdrc_on_device(snd_device_t snd_device) { bool ret = false; Loading Loading @@ -1583,6 +1603,19 @@ static void audio_hwdep_send_cal(struct platform_data *plat_data) plat_data->hw_dep_fd = fd; } const char * get_snd_card_name_for_acdb_loader(const char *snd_card_name) { if(snd_card_name == NULL) return NULL; if(!strncmp(snd_card_name, "sdm660-tashalite-snd-card", sizeof("sdm660-tashalite-snd-card"))) { ALOGD("using tasha ACDB files for tasha-lite"); return "sdm660-tasha-snd-card"; } return snd_card_name; } static int platform_acdb_init(void *platform) { struct platform_data *my_data = (struct platform_data *)platform; Loading @@ -1602,6 +1635,8 @@ static int platform_acdb_init(void *platform) } snd_card_name = mixer_get_name(my_data->adev->mixer); snd_card_name = get_snd_card_name_for_acdb_loader(snd_card_name); if (my_data->acdb_init_v3) { result = my_data->acdb_init_v3(snd_card_name, cvd_version, &my_data->acdb_meta_key_list); Loading Loading @@ -1789,6 +1824,9 @@ void *platform_init(struct audio_device *adev) return NULL; } my_data->is_slimbus_interface = true; my_data->is_internal_codec = false; my_data->hw_info = hw_info_init(snd_card_name); if (!my_data->hw_info) { ALOGE("failed to init hw_info"); Loading Loading @@ -1851,6 +1889,7 @@ void *platform_init(struct audio_device *adev) MIXER_XML_PATH_AUXPCM) == -ENOSYS) adev->audio_route = audio_route_init(adev->snd_card, MIXER_XML_DEFAULT_PATH); update_codec_type_and_interface(my_data, snd_card_name); } } if (!adev->audio_route) { Loading Loading @@ -1940,6 +1979,11 @@ void *platform_init(struct audio_device *adev) /* Initialize ACDB ID's */ if (my_data->is_i2s_ext_modem) platform_info_init(PLATFORM_INFO_XML_PATH_I2S, my_data, PLATFORM); else if (my_data->is_internal_codec) platform_info_init(PLATFORM_INFO_XML_PATH_INTCODEC, my_data, PLATFORM); else if (!strncmp(snd_card_name, "sdm660-snd-card-skush", sizeof("sdm660-snd-card-skush"))) platform_info_init(PLATFORM_INFO_XML_PATH_SKUSH, my_data, PLATFORM); else platform_info_init(PLATFORM_INFO_XML_PATH, my_data, PLATFORM); Loading Loading @@ -2119,6 +2163,8 @@ acdb_init_fail: /* init audio device arbitration */ audio_extn_dev_arbi_init(); default_rx_backend = strdup("SLIMBUS_0_RX"); /* initialize backend config */ for (idx = 0; idx < MAX_CODEC_BACKENDS; idx++) { my_data->current_backend_cfg[idx].sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE; Loading Loading @@ -2148,6 +2194,43 @@ acdb_init_fail: my_data->current_backend_cfg[HEADPHONE_44_1_BACKEND].samplerate_mixer_ctl = strdup("SLIM_5_RX SampleRate"); if (!my_data->is_slimbus_interface) { if (!strncmp(snd_card_name, "sdm660", strlen("sdm660"))) { my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl = strdup("INT4_MI2S_RX Format"); my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl = strdup("INT4_MI2S_RX SampleRate"); my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].bitwidth_mixer_ctl = strdup("INT3_MI2S_TX Format"); my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl = strdup("INT3_MI2S_TX SampleRate"); if (default_rx_backend) free(default_rx_backend); default_rx_backend = strdup("INT4_MI2S_RX"); } else { my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl = strdup("MI2S_RX Format"); my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl = strdup("MI2S_RX SampleRate"); my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].channels_mixer_ctl = strdup("MI2S_RX Channels"); my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].bitwidth_mixer_ctl = strdup("MI2S_TX Format"); my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl = strdup("MI2S_TX SampleRate"); } my_data->current_backend_cfg[HEADPHONE_BACKEND].bitwidth_mixer_ctl = strdup("INT0_MI2S_RX Format"); my_data->current_backend_cfg[HEADPHONE_BACKEND].samplerate_mixer_ctl = strdup("INT0_MI2S_RX SampleRate"); } my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].bitwidth_mixer_ctl = strdup("SLIM_0_TX Format"); my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl = Loading Loading @@ -2232,6 +2315,8 @@ void platform_deinit(void *platform) close(my_data->hw_dep_fd); my_data->hw_dep_fd = -1; } if (default_rx_backend) free(default_rx_backend); hw_info_deinit(my_data->hw_info); close_csd_client(my_data->csd); Loading Loading @@ -2358,9 +2443,9 @@ bool platform_check_backends_match(snd_device_t snd_device1, snd_device_t snd_de if (NULL != be_itf1 && NULL != be_itf2) { if ((NULL == strstr(be_itf2, be_itf1)) && (NULL == strstr(be_itf1, be_itf2))) result = false; } else if (NULL == be_itf1 && NULL != be_itf2 && (NULL == strstr(be_itf2, DEFAULT_RX_BACKEND))) { } else if (NULL == be_itf1 && NULL != be_itf2 && (NULL == strstr(be_itf2, default_rx_backend))) { result = false; } else if (NULL != be_itf1 && NULL == be_itf2 && (NULL == strstr(be_itf1, DEFAULT_RX_BACKEND))) { } else if (NULL != be_itf1 && NULL == be_itf2 && (NULL == strstr(be_itf1, default_rx_backend))) { result = false; } Loading Loading @@ -2826,6 +2911,13 @@ int platform_send_audio_calibration(void *platform, struct audio_usecase *usecas for (i = 0; i < num_devices; i++) { acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(new_snd_device[i])]; // Do not use Rx path default app type for TX path if ((usecase->type == PCM_CAPTURE) && (app_type == DEFAULT_APP_TYPE_RX_PATH)) { ALOGD("Resetting app type for Tx path to default"); app_type = DEFAULT_APP_TYPE_TX_PATH; } if (acdb_dev_id < 0) { ALOGE("%s: Could not find acdb id for device(%d)", __func__, new_snd_device[i]); Loading Loading @@ -3304,7 +3396,7 @@ snd_device_t platform_get_output_snd_device(void *platform, struct stream_out *o if (is_active_voice_call) snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_ANC_HEADSET; else snd_device = SND_DEVICE_OUT_SPEAKER_AND_ANC_FB_HEADSET; snd_device = SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET; } } else if (my_data->external_spk_1) snd_device = SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_1; Loading Loading @@ -3627,6 +3719,7 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d platform_set_echo_reference(adev, true, out_device); } else { snd_device = SND_DEVICE_IN_VOICE_DMIC; adev->acdb_settings |= DMIC_FLAG; } } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_VOICE_HEADSET_MIC; Loading @@ -3651,8 +3744,10 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d my_data->fluence_in_spkr_mode) { if((my_data->fluence_type & FLUENCE_QUAD_MIC) && (my_data->source_mic_type & SOURCE_QUAD_MIC)) { adev->acdb_settings |= QMIC_FLAG; snd_device = SND_DEVICE_IN_VOICE_SPEAKER_QMIC; } else { adev->acdb_settings |= DMIC_FLAG; if (my_data->fluence_mode == FLUENCE_BROADSIDE) snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE; else Loading Loading @@ -3747,7 +3842,8 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC; } } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) { } else if ((source == AUDIO_SOURCE_VOICE_COMMUNICATION) || (mode == AUDIO_MODE_IN_COMMUNICATION)) { if (out_device & AUDIO_DEVICE_OUT_SPEAKER) in_device = AUDIO_DEVICE_IN_BACK_MIC; if (adev->active_input) { Loading @@ -3766,13 +3862,15 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d else snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS; } adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC_NS; } else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { if ((my_data->fluence_type & FLUENCE_DUAL_MIC) && (my_data->source_mic_type & SOURCE_DUAL_MIC)) (my_data->source_mic_type & SOURCE_DUAL_MIC)) { snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC_NS; else adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC_NS; } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE; Loading @@ -3792,13 +3890,15 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d else snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC; } adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC; } else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { if ((my_data->fluence_type & FLUENCE_DUAL_MIC) && (my_data->source_mic_type & SOURCE_DUAL_MIC)) (my_data->source_mic_type & SOURCE_DUAL_MIC)) { snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC; else adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC; } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE; Loading @@ -3818,13 +3918,15 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d else snd_device = SND_DEVICE_IN_SPEAKER_DMIC_NS; } adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_SPEAKER_MIC_NS; } else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { if ((my_data->fluence_type & FLUENCE_DUAL_MIC) && (my_data->source_mic_type & SOURCE_DUAL_MIC)) (my_data->source_mic_type & SOURCE_DUAL_MIC)) { snd_device = SND_DEVICE_IN_HANDSET_DMIC_NS; else adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_HANDSET_MIC_NS; } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE; Loading Loading @@ -5539,7 +5641,9 @@ static bool platform_check_capture_codec_backend_cfg(struct audio_device* adev, // For voice calls use default configuration i.e. 16b/48K, only applicable to // default backend // force routing is not required here, caller will do it anyway if (voice_is_in_call(adev) || adev->mode == AUDIO_MODE_IN_COMMUNICATION) { if ((voice_is_in_call(adev) || adev->mode == AUDIO_MODE_IN_COMMUNICATION) || (my_data->is_internal_codec)) { ALOGW("%s:txbecf: afe: Use default bw and sr for voice/voip calls and " "for unprocessed/camera source", __func__); bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH; Loading hal/msm8974/platform.h +17 −1 Original line number Diff line number Diff line Loading @@ -323,6 +323,8 @@ enum { #define INCALL_MUSIC_UPLINK2_PCM_DEVICE 14 #elif PLATFORM_MSM8x26 #define INCALL_MUSIC_UPLINK2_PCM_DEVICE 16 #elif PLATFORM_BEAR_FAMILY #define INCALL_MUSIC_UPLINK2_PCM_DEVICE 16 #elif PLATFORM_APQ8084 #define INCALL_MUSIC_UPLINK2_PCM_DEVICE 34 #else Loading @@ -334,6 +336,8 @@ enum { #define SPKR_PROT_CALIB_TX_PCM_DEVICE 35 #elif PLATFORM_MSM8996 #define SPKR_PROT_CALIB_TX_PCM_DEVICE 42 #elif PLATFORM_BEAR_FAMILY #define SPKR_PROT_CALIB_TX_PCM_DEVICE 26 #else #define SPKR_PROT_CALIB_TX_PCM_DEVICE 25 #endif Loading Loading @@ -368,10 +372,13 @@ enum { #ifdef PLATFORM_MSM8610 #define LOWLATENCY_PCM_DEVICE 12 #define EC_REF_RX "SEC_I2S_RX" #elif PLATFORM_BEAR_FAMILY #define EC_REF_RX "I2S_RX" #else #define LOWLATENCY_PCM_DEVICE 15 #define EC_REF_RX "SLIM_RX" #endif #ifdef PLATFORM_MSM8x26 #define COMPRESS_CAPTURE_DEVICE 20 #else Loading Loading @@ -408,6 +415,12 @@ enum { #define VOLTE_CALL_PCM_DEVICE 14 #define QCHAT_CALL_PCM_DEVICE 20 #define VOWLAN_CALL_PCM_DEVICE 33 #elif PLATFORM_BEAR_FAMILY #define VOICE_CALL_PCM_DEVICE 2 #define VOICE2_CALL_PCM_DEVICE 13 #define VOLTE_CALL_PCM_DEVICE 15 #define QCHAT_CALL_PCM_DEVICE 37 #define VOWLAN_CALL_PCM_DEVICE 16 #else #define VOICE_CALL_PCM_DEVICE 2 #define VOICE2_CALL_PCM_DEVICE 22 Loading @@ -430,6 +443,9 @@ enum { #ifdef PLATFORM_MSM8x26 #define HFP_SCO_RX 28 #define HFP_ASM_RX_TX 29 #elif PLATFORM_BEAR_FAMILY #define HFP_SCO_RX 17 #define HFP_ASM_RX_TX 18 #else #define HFP_SCO_RX 23 #define HFP_ASM_RX_TX 24 Loading @@ -441,7 +457,7 @@ enum { #define FM_RX_VOLUME "PRI MI2S LOOPBACK Volume" #elif PLATFORM_MSM8996 #define FM_RX_VOLUME "Tert MI2S LOOPBACK Volume" #elif defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) #elif defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_MSMFALCON) #define FM_RX_VOLUME "SLIMBUS_8 LOOPBACK Volume" #else #define FM_RX_VOLUME "Internal FM RX Volume" Loading Loading
hal/msm8974/hw_info.c +14 −0 Original line number Diff line number Diff line Loading @@ -450,6 +450,17 @@ static void update_hardware_info_8226(struct hardware_info *hw_info, const char } } static void update_hardware_info_bear(struct hardware_info *hw_info, const char *snd_card_name) { if (!strcmp(snd_card_name, "sdm660-snd-card")) { strlcpy(hw_info->name, "sdm660", sizeof(hw_info->name)); } else if (!strcmp(snd_card_name, "sdm660-tavil-snd-card")) { strlcpy(hw_info->name, "sdm660", sizeof(hw_info->name)); } else { ALOGW("%s: Not an SDM device", __func__); } } void *hw_info_init(const char *snd_card_name) { struct hardware_info *hw_info; Loading Loading @@ -492,6 +503,9 @@ void *hw_info_init(const char *snd_card_name) } else if(strstr(snd_card_name, "sdm845")) { ALOGV("SDM845 - variant soundcard"); update_hardware_info_sdm845(hw_info, snd_card_name); } else if (strstr(snd_card_name, "sdm660")) { ALOGV("Bear - variant soundcard"); update_hardware_info_bear(hw_info, snd_card_name); } else { ALOGE("%s: Unsupported target %s:",__func__, snd_card_name); free(hw_info); Loading
hal/msm8974/platform.c +123 −19 Original line number Diff line number Diff line Loading @@ -57,6 +57,8 @@ #ifdef LINUX_ENABLED #define MIXER_XML_BASE_STRING "/etc/mixer_paths" #define MIXER_XML_DEFAULT_PATH "/etc/mixer_paths.xml" #define PLATFORM_INFO_XML_PATH_INTCODEC "/etc/audio_platform_info_intcodec.xml" #define PLATFORM_INFO_XML_PATH_SKUSH "/etc/audio_platform_info_skush.xml" #define PLATFORM_INFO_XML_PATH "/etc/audio_platform_info.xml" #define MIXER_XML_PATH_AUXPCM "/etc/mixer_paths_auxpcm.xml" #define MIXER_XML_PATH_I2S "/etc/mixer_paths_i2s.xml" Loading @@ -64,6 +66,8 @@ #else #define MIXER_XML_BASE_STRING "/vendor/etc/mixer_paths" #define MIXER_XML_DEFAULT_PATH "/vendor/etc/mixer_paths.xml" #define PLATFORM_INFO_XML_PATH_INTCODEC "/vendor/etc/audio_platform_info_intcodec.xml" #define PLATFORM_INFO_XML_PATH_SKUSH "/vendor/etc/audio_platform_info_skush.xml" #define PLATFORM_INFO_XML_PATH "/vendor/etc/audio_platform_info.xml" #define MIXER_XML_PATH_AUXPCM "/vendor/etc/mixer_paths_auxpcm.xml" #define MIXER_XML_PATH_I2S "/vendor/etc/mixer_paths_i2s.xml" Loading @@ -81,7 +85,6 @@ #define COMPRESS_OFFLOAD_FRAGMENT_SIZE_FOR_AV_STREAMING (2 * 1024) #define COMPRESS_OFFLOAD_FRAGMENT_SIZE (32 * 1024) #define DEFAULT_RX_BACKEND "SLIMBUS_0_RX" /* * Offload buffer size for compress passthrough Loading Loading @@ -150,6 +153,7 @@ char cal_name_info[WCD9XXX_MAX_CAL][MAX_CAL_NAME] = { [WCD9XXX_MBHC_CAL] = "mbhc_cal", [WCD9XXX_VBAT_CAL] = "vbat_cal", }; static char *default_rx_backend = NULL; #define AUDIO_PARAMETER_IS_HW_DECODER_SESSION_ALLOWED "is_hw_dec_session_allowed" Loading Loading @@ -231,6 +235,8 @@ struct platform_data { /* Vbat monitor related flags */ bool is_vbat_speaker; bool gsm_mode_enabled; bool is_slimbus_interface; bool is_internal_codec; int mono_speaker; /* Audio calibration related functions */ void *acdb_handle; Loading Loading @@ -659,6 +665,7 @@ static struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = { {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET)}, {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_FULL_USB)}, {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_VCO_USB)}, {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TX)}, {TO_NAME_INDEX(SND_DEVICE_OUT_AFE_PROXY)}, {TO_NAME_INDEX(SND_DEVICE_OUT_USB_HEADSET)}, {TO_NAME_INDEX(SND_DEVICE_OUT_USB_HEADPHONES)}, Loading Loading @@ -718,6 +725,7 @@ static struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = { {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_REC_MIC_NS)}, {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_REC_DMIC_STEREO)}, {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE)}, {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_RX)}, {TO_NAME_INDEX(SND_DEVICE_IN_USB_HEADSET_MIC)}, {TO_NAME_INDEX(SND_DEVICE_IN_CAPTURE_FM)}, {TO_NAME_INDEX(SND_DEVICE_IN_AANC_HANDSET_MIC)}, Loading Loading @@ -910,6 +918,18 @@ static int msm_be_id_array_len = #define LOW_LATENCY_PLATFORM_DELAY (13*1000LL) #define ULL_PLATFORM_DELAY (6*1000LL) static void update_codec_type_and_interface(struct platform_data * my_data, const char *snd_card_name) { if (!strncmp(snd_card_name, "sdm660-snd-card-skush", sizeof("sdm660-snd-card-skush")) || !strncmp(snd_card_name, "sdm660-snd-card-skush", sizeof("sdm660-snd-card-mtp"))) { ALOGI("%s: snd_card_name: %s",__func__,snd_card_name); my_data->is_internal_codec = true; my_data->is_slimbus_interface = false; } } static bool can_enable_mbdrc_on_device(snd_device_t snd_device) { bool ret = false; Loading Loading @@ -1583,6 +1603,19 @@ static void audio_hwdep_send_cal(struct platform_data *plat_data) plat_data->hw_dep_fd = fd; } const char * get_snd_card_name_for_acdb_loader(const char *snd_card_name) { if(snd_card_name == NULL) return NULL; if(!strncmp(snd_card_name, "sdm660-tashalite-snd-card", sizeof("sdm660-tashalite-snd-card"))) { ALOGD("using tasha ACDB files for tasha-lite"); return "sdm660-tasha-snd-card"; } return snd_card_name; } static int platform_acdb_init(void *platform) { struct platform_data *my_data = (struct platform_data *)platform; Loading @@ -1602,6 +1635,8 @@ static int platform_acdb_init(void *platform) } snd_card_name = mixer_get_name(my_data->adev->mixer); snd_card_name = get_snd_card_name_for_acdb_loader(snd_card_name); if (my_data->acdb_init_v3) { result = my_data->acdb_init_v3(snd_card_name, cvd_version, &my_data->acdb_meta_key_list); Loading Loading @@ -1789,6 +1824,9 @@ void *platform_init(struct audio_device *adev) return NULL; } my_data->is_slimbus_interface = true; my_data->is_internal_codec = false; my_data->hw_info = hw_info_init(snd_card_name); if (!my_data->hw_info) { ALOGE("failed to init hw_info"); Loading Loading @@ -1851,6 +1889,7 @@ void *platform_init(struct audio_device *adev) MIXER_XML_PATH_AUXPCM) == -ENOSYS) adev->audio_route = audio_route_init(adev->snd_card, MIXER_XML_DEFAULT_PATH); update_codec_type_and_interface(my_data, snd_card_name); } } if (!adev->audio_route) { Loading Loading @@ -1940,6 +1979,11 @@ void *platform_init(struct audio_device *adev) /* Initialize ACDB ID's */ if (my_data->is_i2s_ext_modem) platform_info_init(PLATFORM_INFO_XML_PATH_I2S, my_data, PLATFORM); else if (my_data->is_internal_codec) platform_info_init(PLATFORM_INFO_XML_PATH_INTCODEC, my_data, PLATFORM); else if (!strncmp(snd_card_name, "sdm660-snd-card-skush", sizeof("sdm660-snd-card-skush"))) platform_info_init(PLATFORM_INFO_XML_PATH_SKUSH, my_data, PLATFORM); else platform_info_init(PLATFORM_INFO_XML_PATH, my_data, PLATFORM); Loading Loading @@ -2119,6 +2163,8 @@ acdb_init_fail: /* init audio device arbitration */ audio_extn_dev_arbi_init(); default_rx_backend = strdup("SLIMBUS_0_RX"); /* initialize backend config */ for (idx = 0; idx < MAX_CODEC_BACKENDS; idx++) { my_data->current_backend_cfg[idx].sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE; Loading Loading @@ -2148,6 +2194,43 @@ acdb_init_fail: my_data->current_backend_cfg[HEADPHONE_44_1_BACKEND].samplerate_mixer_ctl = strdup("SLIM_5_RX SampleRate"); if (!my_data->is_slimbus_interface) { if (!strncmp(snd_card_name, "sdm660", strlen("sdm660"))) { my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl = strdup("INT4_MI2S_RX Format"); my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl = strdup("INT4_MI2S_RX SampleRate"); my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].bitwidth_mixer_ctl = strdup("INT3_MI2S_TX Format"); my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl = strdup("INT3_MI2S_TX SampleRate"); if (default_rx_backend) free(default_rx_backend); default_rx_backend = strdup("INT4_MI2S_RX"); } else { my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl = strdup("MI2S_RX Format"); my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl = strdup("MI2S_RX SampleRate"); my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].channels_mixer_ctl = strdup("MI2S_RX Channels"); my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].bitwidth_mixer_ctl = strdup("MI2S_TX Format"); my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl = strdup("MI2S_TX SampleRate"); } my_data->current_backend_cfg[HEADPHONE_BACKEND].bitwidth_mixer_ctl = strdup("INT0_MI2S_RX Format"); my_data->current_backend_cfg[HEADPHONE_BACKEND].samplerate_mixer_ctl = strdup("INT0_MI2S_RX SampleRate"); } my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].bitwidth_mixer_ctl = strdup("SLIM_0_TX Format"); my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl = Loading Loading @@ -2232,6 +2315,8 @@ void platform_deinit(void *platform) close(my_data->hw_dep_fd); my_data->hw_dep_fd = -1; } if (default_rx_backend) free(default_rx_backend); hw_info_deinit(my_data->hw_info); close_csd_client(my_data->csd); Loading Loading @@ -2358,9 +2443,9 @@ bool platform_check_backends_match(snd_device_t snd_device1, snd_device_t snd_de if (NULL != be_itf1 && NULL != be_itf2) { if ((NULL == strstr(be_itf2, be_itf1)) && (NULL == strstr(be_itf1, be_itf2))) result = false; } else if (NULL == be_itf1 && NULL != be_itf2 && (NULL == strstr(be_itf2, DEFAULT_RX_BACKEND))) { } else if (NULL == be_itf1 && NULL != be_itf2 && (NULL == strstr(be_itf2, default_rx_backend))) { result = false; } else if (NULL != be_itf1 && NULL == be_itf2 && (NULL == strstr(be_itf1, DEFAULT_RX_BACKEND))) { } else if (NULL != be_itf1 && NULL == be_itf2 && (NULL == strstr(be_itf1, default_rx_backend))) { result = false; } Loading Loading @@ -2826,6 +2911,13 @@ int platform_send_audio_calibration(void *platform, struct audio_usecase *usecas for (i = 0; i < num_devices; i++) { acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(new_snd_device[i])]; // Do not use Rx path default app type for TX path if ((usecase->type == PCM_CAPTURE) && (app_type == DEFAULT_APP_TYPE_RX_PATH)) { ALOGD("Resetting app type for Tx path to default"); app_type = DEFAULT_APP_TYPE_TX_PATH; } if (acdb_dev_id < 0) { ALOGE("%s: Could not find acdb id for device(%d)", __func__, new_snd_device[i]); Loading Loading @@ -3304,7 +3396,7 @@ snd_device_t platform_get_output_snd_device(void *platform, struct stream_out *o if (is_active_voice_call) snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_ANC_HEADSET; else snd_device = SND_DEVICE_OUT_SPEAKER_AND_ANC_FB_HEADSET; snd_device = SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET; } } else if (my_data->external_spk_1) snd_device = SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_1; Loading Loading @@ -3627,6 +3719,7 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d platform_set_echo_reference(adev, true, out_device); } else { snd_device = SND_DEVICE_IN_VOICE_DMIC; adev->acdb_settings |= DMIC_FLAG; } } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_VOICE_HEADSET_MIC; Loading @@ -3651,8 +3744,10 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d my_data->fluence_in_spkr_mode) { if((my_data->fluence_type & FLUENCE_QUAD_MIC) && (my_data->source_mic_type & SOURCE_QUAD_MIC)) { adev->acdb_settings |= QMIC_FLAG; snd_device = SND_DEVICE_IN_VOICE_SPEAKER_QMIC; } else { adev->acdb_settings |= DMIC_FLAG; if (my_data->fluence_mode == FLUENCE_BROADSIDE) snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE; else Loading Loading @@ -3747,7 +3842,8 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC; } } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) { } else if ((source == AUDIO_SOURCE_VOICE_COMMUNICATION) || (mode == AUDIO_MODE_IN_COMMUNICATION)) { if (out_device & AUDIO_DEVICE_OUT_SPEAKER) in_device = AUDIO_DEVICE_IN_BACK_MIC; if (adev->active_input) { Loading @@ -3766,13 +3862,15 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d else snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS; } adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC_NS; } else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { if ((my_data->fluence_type & FLUENCE_DUAL_MIC) && (my_data->source_mic_type & SOURCE_DUAL_MIC)) (my_data->source_mic_type & SOURCE_DUAL_MIC)) { snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC_NS; else adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC_NS; } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE; Loading @@ -3792,13 +3890,15 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d else snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC; } adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC; } else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { if ((my_data->fluence_type & FLUENCE_DUAL_MIC) && (my_data->source_mic_type & SOURCE_DUAL_MIC)) (my_data->source_mic_type & SOURCE_DUAL_MIC)) { snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC; else adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC; } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE; Loading @@ -3818,13 +3918,15 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d else snd_device = SND_DEVICE_IN_SPEAKER_DMIC_NS; } adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_SPEAKER_MIC_NS; } else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { if ((my_data->fluence_type & FLUENCE_DUAL_MIC) && (my_data->source_mic_type & SOURCE_DUAL_MIC)) (my_data->source_mic_type & SOURCE_DUAL_MIC)) { snd_device = SND_DEVICE_IN_HANDSET_DMIC_NS; else adev->acdb_settings |= DMIC_FLAG; } else snd_device = SND_DEVICE_IN_HANDSET_MIC_NS; } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_HEADSET_MIC_FLUENCE; Loading Loading @@ -5539,7 +5641,9 @@ static bool platform_check_capture_codec_backend_cfg(struct audio_device* adev, // For voice calls use default configuration i.e. 16b/48K, only applicable to // default backend // force routing is not required here, caller will do it anyway if (voice_is_in_call(adev) || adev->mode == AUDIO_MODE_IN_COMMUNICATION) { if ((voice_is_in_call(adev) || adev->mode == AUDIO_MODE_IN_COMMUNICATION) || (my_data->is_internal_codec)) { ALOGW("%s:txbecf: afe: Use default bw and sr for voice/voip calls and " "for unprocessed/camera source", __func__); bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH; Loading
hal/msm8974/platform.h +17 −1 Original line number Diff line number Diff line Loading @@ -323,6 +323,8 @@ enum { #define INCALL_MUSIC_UPLINK2_PCM_DEVICE 14 #elif PLATFORM_MSM8x26 #define INCALL_MUSIC_UPLINK2_PCM_DEVICE 16 #elif PLATFORM_BEAR_FAMILY #define INCALL_MUSIC_UPLINK2_PCM_DEVICE 16 #elif PLATFORM_APQ8084 #define INCALL_MUSIC_UPLINK2_PCM_DEVICE 34 #else Loading @@ -334,6 +336,8 @@ enum { #define SPKR_PROT_CALIB_TX_PCM_DEVICE 35 #elif PLATFORM_MSM8996 #define SPKR_PROT_CALIB_TX_PCM_DEVICE 42 #elif PLATFORM_BEAR_FAMILY #define SPKR_PROT_CALIB_TX_PCM_DEVICE 26 #else #define SPKR_PROT_CALIB_TX_PCM_DEVICE 25 #endif Loading Loading @@ -368,10 +372,13 @@ enum { #ifdef PLATFORM_MSM8610 #define LOWLATENCY_PCM_DEVICE 12 #define EC_REF_RX "SEC_I2S_RX" #elif PLATFORM_BEAR_FAMILY #define EC_REF_RX "I2S_RX" #else #define LOWLATENCY_PCM_DEVICE 15 #define EC_REF_RX "SLIM_RX" #endif #ifdef PLATFORM_MSM8x26 #define COMPRESS_CAPTURE_DEVICE 20 #else Loading Loading @@ -408,6 +415,12 @@ enum { #define VOLTE_CALL_PCM_DEVICE 14 #define QCHAT_CALL_PCM_DEVICE 20 #define VOWLAN_CALL_PCM_DEVICE 33 #elif PLATFORM_BEAR_FAMILY #define VOICE_CALL_PCM_DEVICE 2 #define VOICE2_CALL_PCM_DEVICE 13 #define VOLTE_CALL_PCM_DEVICE 15 #define QCHAT_CALL_PCM_DEVICE 37 #define VOWLAN_CALL_PCM_DEVICE 16 #else #define VOICE_CALL_PCM_DEVICE 2 #define VOICE2_CALL_PCM_DEVICE 22 Loading @@ -430,6 +443,9 @@ enum { #ifdef PLATFORM_MSM8x26 #define HFP_SCO_RX 28 #define HFP_ASM_RX_TX 29 #elif PLATFORM_BEAR_FAMILY #define HFP_SCO_RX 17 #define HFP_ASM_RX_TX 18 #else #define HFP_SCO_RX 23 #define HFP_ASM_RX_TX 24 Loading @@ -441,7 +457,7 @@ enum { #define FM_RX_VOLUME "PRI MI2S LOOPBACK Volume" #elif PLATFORM_MSM8996 #define FM_RX_VOLUME "Tert MI2S LOOPBACK Volume" #elif defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) #elif defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_MSMFALCON) #define FM_RX_VOLUME "SLIMBUS_8 LOOPBACK Volume" #else #define FM_RX_VOLUME "Internal FM RX Volume" Loading