summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne Coucheron <arco68@gmail.com>2016-06-13 00:08:34 +0200
committerEthan Chen <intervigil@gmail.com>2016-06-22 09:33:32 -0700
commit5a076317564bb91bb22dae1b1d6b5e9d13fef4a1 (patch)
tree93c47a181f7406db5f2c431fbbcfd497bd8241d6
parent36aec39a52e9bbf9100e909e2b8f5583d5adac3f (diff)
downloadandroid_hardware_qcom_audio-5a076317564bb91bb22dae1b1d6b5e9d13fef4a1.tar.gz
android_hardware_qcom_audio-5a076317564bb91bb22dae1b1d6b5e9d13fef4a1.tar.bz2
android_hardware_qcom_audio-5a076317564bb91bb22dae1b1d6b5e9d13fef4a1.zip
hal: Support old CSD API and add support for Samsung CSD client
* Make the new API opt-in, as most A family devices uses the old one. * Also add support for Samsung's non-standard function names. Change-Id: Id8fccb123af1b2d08bcf4433fd165050286d95a1
-rw-r--r--hal/Android.mk8
-rw-r--r--hal/msm8960/platform.c54
-rw-r--r--hal/msm8960/platform.h13
3 files changed, 73 insertions, 2 deletions
diff --git a/hal/Android.mk b/hal/Android.mk
index 1394a337..1e78b8fa 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -128,6 +128,14 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_LOW_LATENCY_CAPTURE)),true)
LOCAL_CFLAGS += -DLOW_LATENCY_CAPTURE_USE_CASE=1
endif
+ifeq ($(strip $(BOARD_HAVE_NEW_QCOM_CSDCLIENT)),true)
+ LOCAL_CFLAGS += -DNEW_CSDCLIENT
+endif
+
+ifeq ($(strip $(BOARD_HAVE_SAMSUNG_CSDCLIENT)),true)
+ LOCAL_CFLAGS += -DSAMSUNG_CSDCLIENT
+endif
+
LOCAL_SHARED_LIBRARIES := \
liblog \
libcutils \
diff --git a/hal/msm8960/platform.c b/hal/msm8960/platform.c
index 4002d829..d8596050 100644
--- a/hal/msm8960/platform.c
+++ b/hal/msm8960/platform.c
@@ -38,6 +38,8 @@
#include "sound/msmcal-hwdep.h"
#endif
+#define UNUSED(a) ((void)(a))
+
#define SOUND_TRIGGER_DEVICE_HANDSET_MONO_LOW_POWER_ACDB_ID (100)
#define MIXER_XML_PATH "/system/etc/mixer_paths.xml"
@@ -611,14 +613,24 @@ static struct csd_data *open_csd_client()
goto error;
}
csd->start_voice = (start_voice_t)dlsym(csd->csd_client,
- "csd_client_start_voice");
+#ifdef SAMSUNG_CSDCLIENT
+ "csd_client_start_voice_og"
+#else
+ "csd_client_start_voice"
+#endif
+ );
if (csd->start_voice == NULL) {
ALOGE("%s: dlsym error %s for csd_client_start_voice",
__func__, dlerror());
goto error;
}
csd->stop_voice = (stop_voice_t)dlsym(csd->csd_client,
- "csd_client_stop_voice");
+#ifdef SAMSUNG_CSDCLIENT
+ "csd_client_stop_voice_og"
+#else
+ "csd_client_stop_voice"
+#endif
+ );
if (csd->stop_voice == NULL) {
ALOGE("%s: dlsym error %s for csd_client_stop_voice",
__func__, dlerror());
@@ -1183,7 +1195,12 @@ int platform_start_voice_call(void *platform, uint32_t vsid)
int ret = 0;
if (my_data->csd != NULL) {
+#ifdef NEW_CSDCLIENT
ret = my_data->csd->start_voice(vsid);
+#else
+ UNUSED(vsid);
+ ret = my_data->csd->start_voice();
+#endif
if (ret < 0) {
ALOGE("%s: csd_start_voice error %d\n", __func__, ret);
}
@@ -1197,7 +1214,12 @@ int platform_stop_voice_call(void *platform, uint32_t vsid)
int ret = 0;
if (my_data->csd != NULL) {
+#ifdef NEW_CSDCLIENT
ret = my_data->csd->stop_voice(vsid);
+#else
+ UNUSED(vsid);
+ ret = my_data->csd->stop_voice();
+#endif
if (ret < 0) {
ALOGE("%s: csd_stop_voice error %d\n", __func__, ret);
}
@@ -1228,7 +1250,11 @@ int platform_set_voice_volume(void *platform, int volume)
mixer_ctl_set_value(ctl, 0, vol_index);
if (my_data->csd != NULL) {
+#ifdef NEW_CSDCLIENT
ret = my_data->csd->volume(ALL_SESSION_VSID, volume);
+#else
+ ret = my_data->csd->volume(volume);
+#endif
if (ret < 0) {
ALOGE("%s: csd_volume error %d", __func__, ret);
}
@@ -1254,7 +1280,11 @@ int platform_set_mic_mute(void *platform, bool state)
mixer_ctl_set_value(ctl, 0, state);
if (my_data->csd != NULL) {
+#ifdef NEW_CSDCLIENT
ret = my_data->csd->mic_mute(ALL_SESSION_VSID, state);
+#else
+ ret = my_data->csd->mic_mute(state);
+#endif
if (ret < 0) {
ALOGE("%s: csd_mic_mute error %d", __func__, ret);
}
@@ -1819,7 +1849,11 @@ static int platform_set_slowtalk(struct platform_data *my_data, bool state)
}
if (my_data->csd != NULL) {
+#ifdef NEW_CSDCLIENT
ret = my_data->csd->slow_talk(ALL_SESSION_VSID, state);
+#else
+ ret = my_data->csd->slow_talk(state);
+#endif
if (ret < 0) {
ALOGE("%s: csd_client_disable_device, failed, error %d",
__func__, ret);
@@ -1894,7 +1928,11 @@ int platform_set_incall_recording_session_id(void *platform,
struct platform_data *my_data = (struct platform_data *)platform;
if (my_data->csd != NULL) {
+#ifdef NEW_CSDCLIENT
ret = my_data->csd->start_record(ALL_SESSION_VSID, rec_mode);
+#else
+ ret = my_data->csd->start_record(rec_mode);
+#endif
if (ret < 0) {
ALOGE("%s: csd_client_start_record failed, error %d",
__func__, ret);
@@ -1910,7 +1948,11 @@ int platform_stop_incall_recording_usecase(void *platform)
struct platform_data *my_data = (struct platform_data *)platform;
if (my_data->csd != NULL) {
+#ifdef NEW_CSDCLIENT
ret = my_data->csd->stop_record(ALL_SESSION_VSID);
+#else
+ ret = my_data->csd->stop_record();
+#endif
if (ret < 0) {
ALOGE("%s: csd_client_stop_record failed, error %d",
__func__, ret);
@@ -1926,7 +1968,11 @@ int platform_start_incall_music_usecase(void *platform)
struct platform_data *my_data = (struct platform_data *)platform;
if (my_data->csd != NULL) {
+#ifdef NEW_CSDCLIENT
ret = my_data->csd->start_playback(ALL_SESSION_VSID);
+#else
+ ret = my_data->csd->start_playback();
+#endif
if (ret < 0) {
ALOGE("%s: csd_client_start_playback failed, error %d",
__func__, ret);
@@ -1942,7 +1988,11 @@ int platform_stop_incall_music_usecase(void *platform)
struct platform_data *my_data = (struct platform_data *)platform;
if (my_data->csd != NULL) {
+#ifdef NEW_CSDCLIENT
ret = my_data->csd->stop_playback(ALL_SESSION_VSID);
+#else
+ ret = my_data->csd->stop_playback();
+#endif
if (ret < 0) {
ALOGE("%s: csd_client_stop_playback failed, error %d",
__func__, ret);
diff --git a/hal/msm8960/platform.h b/hal/msm8960/platform.h
index 2102be11..d4d7aa74 100644
--- a/hal/msm8960/platform.h
+++ b/hal/msm8960/platform.h
@@ -256,6 +256,7 @@ typedef int (*init_t)();
typedef int (*deinit_t)();
typedef int (*disable_device_t)();
typedef int (*enable_device_t)(int, int, uint32_t);
+#ifdef NEW_CSDCLIENT
typedef int (*volume_t)(uint32_t, int);
typedef int (*mic_mute_t)(uint32_t, int);
typedef int (*slow_talk_t)(uint32_t, uint8_t);
@@ -265,6 +266,18 @@ typedef int (*start_playback_t)(uint32_t);
typedef int (*stop_playback_t)(uint32_t);
typedef int (*start_record_t)(uint32_t, int);
typedef int (*stop_record_t)(uint32_t);
+#else
+typedef int (*volume_t)(int);
+typedef int (*mic_mute_t)(int);
+typedef int (*slow_talk_t)(uint8_t);
+typedef int (*start_voice_t)();
+typedef int (*stop_voice_t)();
+typedef int (*start_playback_t)();
+typedef int (*stop_playback_t)();
+typedef int (*start_record_t)(int);
+typedef int (*stop_record_t)();
+#endif
+
/* CSD Client structure */
struct csd_data {
void *csd_client;