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/msm8916/platform.c b/hal/msm8916/platform.c
index 6e52779..5bd37ee 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/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>
@@ -551,6 +552,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) {
@@ -1853,6 +1862,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)