diff options
author | Arne Coucheron <arco68@gmail.com> | 2016-06-13 00:08:34 +0200 |
---|---|---|
committer | Ethan Chen <intervigil@gmail.com> | 2016-06-22 09:33:32 -0700 |
commit | 5a076317564bb91bb22dae1b1d6b5e9d13fef4a1 (patch) | |
tree | 93c47a181f7406db5f2c431fbbcfd497bd8241d6 | |
parent | 36aec39a52e9bbf9100e909e2b8f5583d5adac3f (diff) | |
download | android_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.mk | 8 | ||||
-rw-r--r-- | hal/msm8960/platform.c | 54 | ||||
-rw-r--r-- | hal/msm8960/platform.h | 13 |
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; |