Loading hal/audio_extn/Android.mk +4 −0 Original line number Diff line number Diff line Loading @@ -476,6 +476,10 @@ ifneq ($(filter sdm845 sdm710 sdmshrike msmnile kona lito bengal atoll sdm660 ms MULTIPLE_HW_VARIANTS_ENABLED := true endif ifeq ($(TARGET_BOARD_AUTO),true) LOCAL_CFLAGS += -DPLATFORM_AUTO endif LOCAL_SRC_FILES:= \ hfp.c Loading hal/audio_extn/audio_extn.c +38 −1 Original line number Diff line number Diff line Loading @@ -4511,6 +4511,10 @@ int hfp_feature_init(bool is_feature_enabled) init_config.fp_disable_audio_route = disable_audio_route; init_config.fp_disable_snd_device = disable_snd_device; init_config.fp_voice_get_mic_mute = voice_get_mic_mute; init_config.fp_audio_extn_auto_hal_start_hfp_downlink = audio_extn_auto_hal_start_hfp_downlink; init_config.fp_audio_extn_auto_hal_stop_hfp_downlink = audio_extn_auto_hal_stop_hfp_downlink; hfp_init(init_config); ALOGD("%s:: ---- Feature HFP is Enabled ----", __func__); Loading Loading @@ -5479,6 +5483,14 @@ typedef void (*auto_hal_set_parameters_t)(struct audio_device*, struct str_parms*); static auto_hal_set_parameters_t auto_hal_set_parameters; typedef int (*auto_hal_start_hfp_downlink_t)(struct audio_device*, struct audio_usecase*); static auto_hal_start_hfp_downlink_t auto_hal_start_hfp_downlink; typedef int (*auto_hal_stop_hfp_downlink_t)(struct audio_device*, struct audio_usecase*); static auto_hal_stop_hfp_downlink_t auto_hal_stop_hfp_downlink; int auto_hal_feature_init(bool is_feature_enabled) { ALOGD("%s: Called with feature %s", __func__, Loading Loading @@ -5522,7 +5534,13 @@ int auto_hal_feature_init(bool is_feature_enabled) auto_hal_lib_handle, "auto_hal_set_audio_port_config")) || !(auto_hal_set_parameters = (auto_hal_set_parameters_t)dlsym( auto_hal_lib_handle, "auto_hal_set_parameters"))) { auto_hal_lib_handle, "auto_hal_set_parameters")) || !(auto_hal_start_hfp_downlink = (auto_hal_start_hfp_downlink_t)dlsym( auto_hal_lib_handle, "auto_hal_start_hfp_downlink")) || !(auto_hal_stop_hfp_downlink = (auto_hal_stop_hfp_downlink_t)dlsym( auto_hal_lib_handle, "auto_hal_stop_hfp_downlink"))) { ALOGE("%s: dlsym failed", __func__); goto feature_disabled; } Loading @@ -5547,6 +5565,8 @@ feature_disabled: auto_hal_get_audio_port = NULL; auto_hal_set_audio_port_config = NULL; auto_hal_set_parameters = NULL; auto_hal_start_hfp_downlink = NULL; auto_hal_stop_hfp_downlink = NULL; ALOGW(":: %s: ---- Feature AUTO_HAL is disabled ----", __func__); return -ENOSYS; Loading @@ -5563,6 +5583,9 @@ int audio_extn_auto_hal_init(struct audio_device *adev) auto_hal_init_config.fp_get_usecase_from_list = get_usecase_from_list; auto_hal_init_config.fp_get_output_period_size = get_output_period_size; auto_hal_init_config.fp_audio_extn_ext_hw_plugin_set_audio_gain = audio_extn_ext_hw_plugin_set_audio_gain; auto_hal_init_config.fp_select_devices = select_devices; auto_hal_init_config.fp_disable_audio_route = disable_audio_route; auto_hal_init_config.fp_disable_snd_device = disable_snd_device; return auto_hal_init(adev, auto_hal_init_config); } else Loading Loading @@ -5642,6 +5665,20 @@ void audio_extn_auto_hal_set_parameters(struct audio_device *adev, if (auto_hal_set_parameters) auto_hal_set_parameters(adev, parms); } int audio_extn_auto_hal_start_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info) { return ((auto_hal_start_hfp_downlink) ? auto_hal_start_hfp_downlink(adev, uc_info): 0); } int audio_extn_auto_hal_stop_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info) { return ((auto_hal_stop_hfp_downlink) ? auto_hal_stop_hfp_downlink(adev, uc_info): 0); } // END: AUTO_HAL =================================================================== void audio_extn_feature_init() Loading hal/audio_extn/audio_extn.h +13 −0 Original line number Diff line number Diff line Loading @@ -682,6 +682,10 @@ typedef int (*fp_disable_audio_route_t)(struct audio_device *, struct audio_usecase *); typedef int (*fp_disable_snd_device_t)(struct audio_device *, snd_device_t); typedef bool (*fp_voice_get_mic_mute_t)(struct audio_device *); typedef int (*fp_audio_extn_auto_hal_start_hfp_downlink_t)(struct audio_device *, struct audio_usecase *); typedef int (*fp_audio_extn_auto_hal_stop_hfp_downlink_t)(struct audio_device *, struct audio_usecase *); typedef struct hfp_init_config { fp_platform_set_mic_mute_t fp_platform_set_mic_mute; Loading @@ -694,6 +698,8 @@ typedef struct hfp_init_config { fp_disable_audio_route_t fp_disable_audio_route; fp_disable_snd_device_t fp_disable_snd_device; fp_voice_get_mic_mute_t fp_voice_get_mic_mute; fp_audio_extn_auto_hal_start_hfp_downlink_t fp_audio_extn_auto_hal_start_hfp_downlink; fp_audio_extn_auto_hal_stop_hfp_downlink_t fp_audio_extn_auto_hal_stop_hfp_downlink; } hfp_init_config_t; Loading Loading @@ -1316,6 +1322,10 @@ int audio_extn_auto_hal_set_audio_port_config(struct audio_hw_device *dev, const struct audio_port_config *config); void audio_extn_auto_hal_set_parameters(struct audio_device *adev, struct str_parms *parms); int audio_extn_auto_hal_start_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info); int audio_extn_auto_hal_stop_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info); typedef streams_input_ctxt_t* (*fp_in_get_stream_t)(struct audio_device*, audio_io_handle_t); typedef streams_output_ctxt_t* (*fp_out_get_stream_t)(struct audio_device*, audio_io_handle_t); Loading @@ -1330,6 +1340,9 @@ typedef struct auto_hal_init_config { fp_get_usecase_from_list_t fp_get_usecase_from_list; fp_get_output_period_size_t fp_get_output_period_size; fp_audio_extn_ext_hw_plugin_set_audio_gain_t fp_audio_extn_ext_hw_plugin_set_audio_gain; fp_select_devices_t fp_select_devices; fp_disable_audio_route_t fp_disable_audio_route; fp_disable_snd_device_t fp_disable_snd_device; } auto_hal_init_config_t; // END: AUTO_HAL FEATURE ================================================== Loading hal/audio_extn/auto_hal.c +99 −0 Original line number Diff line number Diff line Loading @@ -54,12 +54,17 @@ static fp_audio_extn_ext_hw_plugin_usecase_stop_t fp_audio_extn_ext_hw_plugin_ static fp_get_usecase_from_list_t fp_get_usecase_from_list; static fp_get_output_period_size_t fp_get_output_period_size; static fp_audio_extn_ext_hw_plugin_set_audio_gain_t fp_audio_extn_ext_hw_plugin_set_audio_gain; static fp_select_devices_t fp_select_devices; static fp_disable_audio_route_t fp_disable_audio_route; static fp_disable_snd_device_t fp_disable_snd_device; /* Auto hal module struct */ static struct auto_hal_module *auto_hal = NULL; int auto_hal_release_audio_patch(struct audio_hw_device *dev, audio_patch_handle_t handle); int auto_hal_stop_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info); static struct audio_patch_record *get_patch_from_list(struct audio_device *adev, audio_patch_handle_t patch_id) Loading Loading @@ -687,6 +692,97 @@ void auto_hal_set_parameters(struct audio_device *adev __unused, ALOGV("%s: exit", __func__); } int auto_hal_start_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info) { int32_t ret = 0; struct audio_usecase *uc_downlink_info; ALOGD("%s: enter", __func__); uc_downlink_info = (struct audio_usecase *)calloc(1, sizeof(struct audio_usecase)); if (!uc_downlink_info) return -ENOMEM; uc_downlink_info->type = PCM_HFP_CALL; uc_downlink_info->stream.out = adev->primary_output; uc_downlink_info->devices = adev->primary_output->devices; uc_downlink_info->in_snd_device = SND_DEVICE_NONE; uc_downlink_info->out_snd_device = SND_DEVICE_NONE; switch (uc_info->id) { case USECASE_AUDIO_HFP_SCO: uc_downlink_info->id = USECASE_AUDIO_HFP_SCO_DOWNLINK; break; case USECASE_AUDIO_HFP_SCO_WB: uc_downlink_info->id = USECASE_AUDIO_HFP_SCO_WB_DOWNLINK; break; default: ALOGE("%s: Invalid usecase %d", __func__, uc_info->id); free(uc_downlink_info); return -EINVAL; } list_add_tail(&adev->usecase_list, &uc_downlink_info->list); ret = fp_select_devices(adev, uc_downlink_info->id); if (ret) { ALOGE("%s: Select devices failed %d", __func__, ret); goto exit; } ALOGD("%s: exit: status(%d)", __func__, ret); return 0; exit: auto_hal_stop_hfp_downlink(adev, uc_info); ALOGE("%s: Problem in start hfp downlink: status(%d)", __func__, ret); return ret; } int auto_hal_stop_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info) { int32_t ret = 0; struct audio_usecase *uc_downlink_info; audio_usecase_t ucid; ALOGD("%s: enter", __func__); switch (uc_info->id) { case USECASE_AUDIO_HFP_SCO: ucid = USECASE_AUDIO_HFP_SCO_DOWNLINK; break; case USECASE_AUDIO_HFP_SCO_WB: ucid = USECASE_AUDIO_HFP_SCO_WB_DOWNLINK; break; default: ALOGE("%s: Invalid usecase %d", __func__, uc_info->id); return -EINVAL; } uc_downlink_info = fp_get_usecase_from_list(adev, ucid); if (uc_downlink_info == NULL) { ALOGE("%s: Could not find the usecase (%d) in the list", __func__, ucid); return -EINVAL; } /* Get and set stream specific mixer controls */ fp_disable_audio_route(adev, uc_downlink_info); /* Disable the rx and tx devices */ fp_disable_snd_device(adev, uc_downlink_info->out_snd_device); fp_disable_snd_device(adev, uc_downlink_info->in_snd_device); list_remove(&uc_downlink_info->list); free(uc_downlink_info); ALOGD("%s: exit: status(%d)", __func__, ret); return ret; } int auto_hal_init(struct audio_device *adev, auto_hal_init_config_t init_config) { int ret = 0; Loading Loading @@ -714,6 +810,9 @@ int auto_hal_init(struct audio_device *adev, auto_hal_init_config_t init_config) fp_get_usecase_from_list = init_config.fp_get_usecase_from_list; fp_get_output_period_size = init_config.fp_get_output_period_size; fp_audio_extn_ext_hw_plugin_set_audio_gain = init_config.fp_audio_extn_ext_hw_plugin_set_audio_gain; fp_select_devices = init_config.fp_select_devices; fp_disable_audio_route = init_config.fp_disable_audio_route; fp_disable_snd_device = init_config.fp_disable_snd_device; return ret; } Loading hal/audio_extn/ext_hw_plugin.c +2 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,8 @@ static int32_t ext_hw_plugin_check_plugin_usecase(audio_usecase_t hal_usecase, break; case USECASE_AUDIO_HFP_SCO: case USECASE_AUDIO_HFP_SCO_WB: case USECASE_AUDIO_HFP_SCO_DOWNLINK: case USECASE_AUDIO_HFP_SCO_WB_DOWNLINK: *plugin_usecase = AUDIO_HAL_PLUGIN_USECASE_HFP_VOICE_CALL; break; case USECASE_VOICE_CALL: Loading Loading
hal/audio_extn/Android.mk +4 −0 Original line number Diff line number Diff line Loading @@ -476,6 +476,10 @@ ifneq ($(filter sdm845 sdm710 sdmshrike msmnile kona lito bengal atoll sdm660 ms MULTIPLE_HW_VARIANTS_ENABLED := true endif ifeq ($(TARGET_BOARD_AUTO),true) LOCAL_CFLAGS += -DPLATFORM_AUTO endif LOCAL_SRC_FILES:= \ hfp.c Loading
hal/audio_extn/audio_extn.c +38 −1 Original line number Diff line number Diff line Loading @@ -4511,6 +4511,10 @@ int hfp_feature_init(bool is_feature_enabled) init_config.fp_disable_audio_route = disable_audio_route; init_config.fp_disable_snd_device = disable_snd_device; init_config.fp_voice_get_mic_mute = voice_get_mic_mute; init_config.fp_audio_extn_auto_hal_start_hfp_downlink = audio_extn_auto_hal_start_hfp_downlink; init_config.fp_audio_extn_auto_hal_stop_hfp_downlink = audio_extn_auto_hal_stop_hfp_downlink; hfp_init(init_config); ALOGD("%s:: ---- Feature HFP is Enabled ----", __func__); Loading Loading @@ -5479,6 +5483,14 @@ typedef void (*auto_hal_set_parameters_t)(struct audio_device*, struct str_parms*); static auto_hal_set_parameters_t auto_hal_set_parameters; typedef int (*auto_hal_start_hfp_downlink_t)(struct audio_device*, struct audio_usecase*); static auto_hal_start_hfp_downlink_t auto_hal_start_hfp_downlink; typedef int (*auto_hal_stop_hfp_downlink_t)(struct audio_device*, struct audio_usecase*); static auto_hal_stop_hfp_downlink_t auto_hal_stop_hfp_downlink; int auto_hal_feature_init(bool is_feature_enabled) { ALOGD("%s: Called with feature %s", __func__, Loading Loading @@ -5522,7 +5534,13 @@ int auto_hal_feature_init(bool is_feature_enabled) auto_hal_lib_handle, "auto_hal_set_audio_port_config")) || !(auto_hal_set_parameters = (auto_hal_set_parameters_t)dlsym( auto_hal_lib_handle, "auto_hal_set_parameters"))) { auto_hal_lib_handle, "auto_hal_set_parameters")) || !(auto_hal_start_hfp_downlink = (auto_hal_start_hfp_downlink_t)dlsym( auto_hal_lib_handle, "auto_hal_start_hfp_downlink")) || !(auto_hal_stop_hfp_downlink = (auto_hal_stop_hfp_downlink_t)dlsym( auto_hal_lib_handle, "auto_hal_stop_hfp_downlink"))) { ALOGE("%s: dlsym failed", __func__); goto feature_disabled; } Loading @@ -5547,6 +5565,8 @@ feature_disabled: auto_hal_get_audio_port = NULL; auto_hal_set_audio_port_config = NULL; auto_hal_set_parameters = NULL; auto_hal_start_hfp_downlink = NULL; auto_hal_stop_hfp_downlink = NULL; ALOGW(":: %s: ---- Feature AUTO_HAL is disabled ----", __func__); return -ENOSYS; Loading @@ -5563,6 +5583,9 @@ int audio_extn_auto_hal_init(struct audio_device *adev) auto_hal_init_config.fp_get_usecase_from_list = get_usecase_from_list; auto_hal_init_config.fp_get_output_period_size = get_output_period_size; auto_hal_init_config.fp_audio_extn_ext_hw_plugin_set_audio_gain = audio_extn_ext_hw_plugin_set_audio_gain; auto_hal_init_config.fp_select_devices = select_devices; auto_hal_init_config.fp_disable_audio_route = disable_audio_route; auto_hal_init_config.fp_disable_snd_device = disable_snd_device; return auto_hal_init(adev, auto_hal_init_config); } else Loading Loading @@ -5642,6 +5665,20 @@ void audio_extn_auto_hal_set_parameters(struct audio_device *adev, if (auto_hal_set_parameters) auto_hal_set_parameters(adev, parms); } int audio_extn_auto_hal_start_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info) { return ((auto_hal_start_hfp_downlink) ? auto_hal_start_hfp_downlink(adev, uc_info): 0); } int audio_extn_auto_hal_stop_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info) { return ((auto_hal_stop_hfp_downlink) ? auto_hal_stop_hfp_downlink(adev, uc_info): 0); } // END: AUTO_HAL =================================================================== void audio_extn_feature_init() Loading
hal/audio_extn/audio_extn.h +13 −0 Original line number Diff line number Diff line Loading @@ -682,6 +682,10 @@ typedef int (*fp_disable_audio_route_t)(struct audio_device *, struct audio_usecase *); typedef int (*fp_disable_snd_device_t)(struct audio_device *, snd_device_t); typedef bool (*fp_voice_get_mic_mute_t)(struct audio_device *); typedef int (*fp_audio_extn_auto_hal_start_hfp_downlink_t)(struct audio_device *, struct audio_usecase *); typedef int (*fp_audio_extn_auto_hal_stop_hfp_downlink_t)(struct audio_device *, struct audio_usecase *); typedef struct hfp_init_config { fp_platform_set_mic_mute_t fp_platform_set_mic_mute; Loading @@ -694,6 +698,8 @@ typedef struct hfp_init_config { fp_disable_audio_route_t fp_disable_audio_route; fp_disable_snd_device_t fp_disable_snd_device; fp_voice_get_mic_mute_t fp_voice_get_mic_mute; fp_audio_extn_auto_hal_start_hfp_downlink_t fp_audio_extn_auto_hal_start_hfp_downlink; fp_audio_extn_auto_hal_stop_hfp_downlink_t fp_audio_extn_auto_hal_stop_hfp_downlink; } hfp_init_config_t; Loading Loading @@ -1316,6 +1322,10 @@ int audio_extn_auto_hal_set_audio_port_config(struct audio_hw_device *dev, const struct audio_port_config *config); void audio_extn_auto_hal_set_parameters(struct audio_device *adev, struct str_parms *parms); int audio_extn_auto_hal_start_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info); int audio_extn_auto_hal_stop_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info); typedef streams_input_ctxt_t* (*fp_in_get_stream_t)(struct audio_device*, audio_io_handle_t); typedef streams_output_ctxt_t* (*fp_out_get_stream_t)(struct audio_device*, audio_io_handle_t); Loading @@ -1330,6 +1340,9 @@ typedef struct auto_hal_init_config { fp_get_usecase_from_list_t fp_get_usecase_from_list; fp_get_output_period_size_t fp_get_output_period_size; fp_audio_extn_ext_hw_plugin_set_audio_gain_t fp_audio_extn_ext_hw_plugin_set_audio_gain; fp_select_devices_t fp_select_devices; fp_disable_audio_route_t fp_disable_audio_route; fp_disable_snd_device_t fp_disable_snd_device; } auto_hal_init_config_t; // END: AUTO_HAL FEATURE ================================================== Loading
hal/audio_extn/auto_hal.c +99 −0 Original line number Diff line number Diff line Loading @@ -54,12 +54,17 @@ static fp_audio_extn_ext_hw_plugin_usecase_stop_t fp_audio_extn_ext_hw_plugin_ static fp_get_usecase_from_list_t fp_get_usecase_from_list; static fp_get_output_period_size_t fp_get_output_period_size; static fp_audio_extn_ext_hw_plugin_set_audio_gain_t fp_audio_extn_ext_hw_plugin_set_audio_gain; static fp_select_devices_t fp_select_devices; static fp_disable_audio_route_t fp_disable_audio_route; static fp_disable_snd_device_t fp_disable_snd_device; /* Auto hal module struct */ static struct auto_hal_module *auto_hal = NULL; int auto_hal_release_audio_patch(struct audio_hw_device *dev, audio_patch_handle_t handle); int auto_hal_stop_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info); static struct audio_patch_record *get_patch_from_list(struct audio_device *adev, audio_patch_handle_t patch_id) Loading Loading @@ -687,6 +692,97 @@ void auto_hal_set_parameters(struct audio_device *adev __unused, ALOGV("%s: exit", __func__); } int auto_hal_start_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info) { int32_t ret = 0; struct audio_usecase *uc_downlink_info; ALOGD("%s: enter", __func__); uc_downlink_info = (struct audio_usecase *)calloc(1, sizeof(struct audio_usecase)); if (!uc_downlink_info) return -ENOMEM; uc_downlink_info->type = PCM_HFP_CALL; uc_downlink_info->stream.out = adev->primary_output; uc_downlink_info->devices = adev->primary_output->devices; uc_downlink_info->in_snd_device = SND_DEVICE_NONE; uc_downlink_info->out_snd_device = SND_DEVICE_NONE; switch (uc_info->id) { case USECASE_AUDIO_HFP_SCO: uc_downlink_info->id = USECASE_AUDIO_HFP_SCO_DOWNLINK; break; case USECASE_AUDIO_HFP_SCO_WB: uc_downlink_info->id = USECASE_AUDIO_HFP_SCO_WB_DOWNLINK; break; default: ALOGE("%s: Invalid usecase %d", __func__, uc_info->id); free(uc_downlink_info); return -EINVAL; } list_add_tail(&adev->usecase_list, &uc_downlink_info->list); ret = fp_select_devices(adev, uc_downlink_info->id); if (ret) { ALOGE("%s: Select devices failed %d", __func__, ret); goto exit; } ALOGD("%s: exit: status(%d)", __func__, ret); return 0; exit: auto_hal_stop_hfp_downlink(adev, uc_info); ALOGE("%s: Problem in start hfp downlink: status(%d)", __func__, ret); return ret; } int auto_hal_stop_hfp_downlink(struct audio_device *adev, struct audio_usecase *uc_info) { int32_t ret = 0; struct audio_usecase *uc_downlink_info; audio_usecase_t ucid; ALOGD("%s: enter", __func__); switch (uc_info->id) { case USECASE_AUDIO_HFP_SCO: ucid = USECASE_AUDIO_HFP_SCO_DOWNLINK; break; case USECASE_AUDIO_HFP_SCO_WB: ucid = USECASE_AUDIO_HFP_SCO_WB_DOWNLINK; break; default: ALOGE("%s: Invalid usecase %d", __func__, uc_info->id); return -EINVAL; } uc_downlink_info = fp_get_usecase_from_list(adev, ucid); if (uc_downlink_info == NULL) { ALOGE("%s: Could not find the usecase (%d) in the list", __func__, ucid); return -EINVAL; } /* Get and set stream specific mixer controls */ fp_disable_audio_route(adev, uc_downlink_info); /* Disable the rx and tx devices */ fp_disable_snd_device(adev, uc_downlink_info->out_snd_device); fp_disable_snd_device(adev, uc_downlink_info->in_snd_device); list_remove(&uc_downlink_info->list); free(uc_downlink_info); ALOGD("%s: exit: status(%d)", __func__, ret); return ret; } int auto_hal_init(struct audio_device *adev, auto_hal_init_config_t init_config) { int ret = 0; Loading Loading @@ -714,6 +810,9 @@ int auto_hal_init(struct audio_device *adev, auto_hal_init_config_t init_config) fp_get_usecase_from_list = init_config.fp_get_usecase_from_list; fp_get_output_period_size = init_config.fp_get_output_period_size; fp_audio_extn_ext_hw_plugin_set_audio_gain = init_config.fp_audio_extn_ext_hw_plugin_set_audio_gain; fp_select_devices = init_config.fp_select_devices; fp_disable_audio_route = init_config.fp_disable_audio_route; fp_disable_snd_device = init_config.fp_disable_snd_device; return ret; } Loading
hal/audio_extn/ext_hw_plugin.c +2 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,8 @@ static int32_t ext_hw_plugin_check_plugin_usecase(audio_usecase_t hal_usecase, break; case USECASE_AUDIO_HFP_SCO: case USECASE_AUDIO_HFP_SCO_WB: case USECASE_AUDIO_HFP_SCO_DOWNLINK: case USECASE_AUDIO_HFP_SCO_WB_DOWNLINK: *plugin_usecase = AUDIO_HAL_PLUGIN_USECASE_HFP_VOICE_CALL; break; case USECASE_VOICE_CALL: Loading