hal: Fix mismatch in acdb configs for SWB

 For SWB, we prepare and open port as part
 of enable_snd_device, so make sure to set
 the correct acdb config before opening
 the port

Change-Id: Ia7e28278d5407946549528d0be905fe9a624df51
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index d0170db..0352523 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -256,6 +256,7 @@
 // --- external function dependency ---
 fp_platform_get_pcm_device_id_t fp_platform_get_pcm_device_id;
 fp_check_a2dp_restore_t fp_check_a2dp_restore_l;
+fp_platform_switch_voice_call_device_post_t fp_platform_switch_voice_call_device_post;
 
 /* PCM config for ABR Feedback hostless front end */
 static struct pcm_config pcm_config_abr = {
@@ -3020,6 +3021,8 @@
   fp_platform_get_pcm_device_id =
               init_config.fp_platform_get_pcm_device_id;
   fp_check_a2dp_restore_l = init_config.fp_check_a2dp_restore_l;
+  fp_platform_switch_voice_call_device_post =
+                init_config.fp_platform_switch_voice_call_device_post;
 
   reset_a2dp_enc_config_params();
   reset_a2dp_source_dec_config_params();
@@ -3197,6 +3200,12 @@
     ALOGD("sco_start_configuration start");
 
     if (!a2dp.swb_configured) {
+        /*Before starting sco config, we must ensure to set correct acdb id
+         because sco cofiguration will trigger port open which needs acdb_id*/
+         fp_platform_switch_voice_call_device_post(a2dp.adev->platform,
+                                            SND_DEVICE_OUT_BT_SCO_SWB,
+                                            SND_DEVICE_IN_BT_SCO_MIC_SWB);
+
         a2dp.bt_encoder_format = CODEC_TYPE_APTX_AD_SPEECH;
         /* Configure AFE codec*/
         if (configure_aptx_ad_speech_enc_fmt() &&
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index c3c80a0..0b8f3ec 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -4751,6 +4751,7 @@
         a2dp_offload_init_config_t a2dp_init_config;
         a2dp_init_config.fp_platform_get_pcm_device_id = platform_get_pcm_device_id;
         a2dp_init_config.fp_check_a2dp_restore_l = check_a2dp_restore_l;
+        a2dp_init_config.fp_platform_switch_voice_call_device_post = platform_switch_voice_call_device_post;
 
         a2dp_init(adev, a2dp_init_config);
     }
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 8820d01..54fe727 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -161,6 +161,9 @@
 typedef int (*fp_platform_send_audio_calibration_t)(void *, struct audio_usecase *,
                                                    int);
 typedef int (*fp_platform_get_pcm_device_id_t)(audio_usecase_t, int);
+typedef int (*fp_platform_switch_voice_call_device_post_t)(void *platform,
+                                           snd_device_t out_snd_device,
+                                           snd_device_t in_snd_device);
 typedef const char *(*fp_platform_get_snd_device_name_t)(snd_device_t);
 typedef int (*fp_platform_spkr_prot_is_wsa_analog_mode_t)(void *);
 typedef int (*fp_platform_get_snd_device_t)(snd_device_t);
@@ -338,6 +341,7 @@
 struct a2dp_offload_init_config {
     fp_platform_get_pcm_device_id_t fp_platform_get_pcm_device_id;
     fp_check_a2dp_restore_t fp_check_a2dp_restore_l;
+    fp_platform_switch_voice_call_device_post_t fp_platform_switch_voice_call_device_post;
 };
 typedef struct a2dp_offload_init_config a2dp_offload_init_config_t;
 // END: A2DP_OFFLOAD FEATURE ====================================================