hal: add DSDA support on APQ targets
-This change adds DSDA support for APQ based targets
where external modem is used for voice calls.
-Add new CSD API to support local call hold.
Change-Id: I7743a1df43dc1abac4e325ff104ec1bb64c9e12b
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 52c6fec..9accd1b 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -23,6 +23,7 @@
#include <stdlib.h>
#include <dlfcn.h>
+#include <sys/ioctl.h>
#include <cutils/log.h>
#include <cutils/properties.h>
#include <cutils/str_parms.h>
@@ -563,6 +564,14 @@
__func__, dlerror());
goto error;
}
+ csd->set_lch = (set_lch_t)dlsym(csd->csd_client, "csd_client_set_lch");
+ if (csd->set_lch == NULL) {
+ ALOGE("%s: dlsym error %s for csd_client_set_lch",
+ __func__, dlerror());
+ /* Ignore the error as this is not mandatory function for
+ * basic voice call to work.
+ */
+ }
csd->start_record = (start_record_t)dlsym(csd->csd_client,
"csd_client_start_record");
if (csd->start_record == NULL) {
@@ -2044,6 +2053,20 @@
return ret;
}
+int platform_update_lch(void *platform, struct voice_session *session,
+ enum voice_lch_mode lch_mode)
+{
+ int ret = 0;
+ struct platform_data *my_data = (struct platform_data *)platform;
+
+ if ((my_data->csd != NULL) && (my_data->csd->set_lch != NULL))
+ ret = my_data->csd->set_lch(session->vsid, lch_mode);
+ else
+ ret = pcm_ioctl(session->pcm_tx, SNDRV_VOICE_IOCTL_LCH, &lch_mode);
+
+ return ret;
+}
+
void platform_get_parameters(void *platform,
struct str_parms *query,
struct str_parms *reply)
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 956e395..19f37c7 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -19,6 +19,7 @@
#ifndef QCOM_AUDIO_PLATFORM_H
#define QCOM_AUDIO_PLATFORM_H
+#include <sound/voice_params.h>
enum {
FLUENCE_NONE,
@@ -190,13 +191,15 @@
#define INCALL_MUSIC_UPLINK2_PCM_DEVICE 14
#elif PLATFORM_MSM8x26
#define INCALL_MUSIC_UPLINK2_PCM_DEVICE 16
+#elif PLATFORM_APQ8084
+#define INCALL_MUSIC_UPLINK2_PCM_DEVICE 34
#else
#define INCALL_MUSIC_UPLINK2_PCM_DEVICE 35
#endif
#define SPKR_PROT_CALIB_RX_PCM_DEVICE 5
#ifdef PLATFORM_APQ8084
-#define SPKR_PROT_CALIB_TX_PCM_DEVICE 33
+#define SPKR_PROT_CALIB_TX_PCM_DEVICE 35
#else
#define SPKR_PROT_CALIB_TX_PCM_DEVICE 25
#endif
@@ -302,6 +305,7 @@
typedef int (*stop_voice_t)(uint32_t);
typedef int (*start_playback_t)(uint32_t);
typedef int (*stop_playback_t)(uint32_t);
+typedef int (*set_lch_t)(uint32_t, enum voice_lch_mode);
typedef int (*start_record_t)(uint32_t, int);
typedef int (*stop_record_t)(uint32_t);
typedef int (*get_sample_rate_t)(uint32_t *);
@@ -320,6 +324,7 @@
stop_voice_t stop_voice;
start_playback_t start_playback;
stop_playback_t stop_playback;
+ set_lch_t set_lch;
start_record_t start_record;
stop_record_t stop_record;
get_sample_rate_t get_sample_rate;