audio: introduce dedicated adev->cal_lock for gef interfaces
Audio device lock is not suitable for GEF operations, so add a dedicated
calibration lock for GEF.
CRs-Fixed: 2413132
Change-Id: Ic1e840c02e9d7f1bce5d3cb12702366af1c07f01
diff --git a/hal/audio_extn/gef.c b/hal/audio_extn/gef.c
index 7f82a8a..cfed6b3 100644
--- a/hal/audio_extn/gef.c
+++ b/hal/audio_extn/gef.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -113,6 +113,7 @@
ALOGV("%s: Enter with error", __func__);
+ pthread_mutex_init(&adev->cal_lock, (const pthread_mutexattr_t *) NULL);
memset(&gef_hal_handle, 0, sizeof(gef_data));
//: check error for dlopen
@@ -186,8 +187,8 @@
ALOGV("%s: Enter", __func__);
memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
- //lock adev
- pthread_mutex_lock(&adev->lock);
+ //lock adev->cal_lock
+ pthread_mutex_lock(&adev->cal_lock);
//pack cal
platform_make_cal_cfg(&cal, acdb_dev_id,
@@ -196,7 +197,7 @@
ret = platform_send_audio_cal(adev->platform, &cal, data, length, persist);
- pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&adev->cal_lock);
ALOGV("%s: Exit with error %d", __func__, ret);
@@ -218,8 +219,8 @@
ALOGV("%s: Enter", __func__);
memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
- //lock adev
- pthread_mutex_lock(&adev->lock);
+ //lock adev->cal_lock
+ pthread_mutex_lock(&adev->cal_lock);
//pack cal
platform_make_cal_cfg(&cal, acdb_dev_id,
@@ -228,7 +229,7 @@
ret = platform_get_audio_cal(adev->platform, &cal, data, length, persist);
- pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&adev->cal_lock);
ALOGV("%s: Exit with error %d", __func__, ret);
@@ -250,8 +251,8 @@
ALOGV("%s: Enter", __func__);
memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
- //lock adev
- pthread_mutex_lock(&adev->lock);
+ //lock adev->cal_lock
+ pthread_mutex_lock(&adev->cal_lock);
//pack cal
platform_make_cal_cfg(&cal, acdb_dev_id,
@@ -260,7 +261,7 @@
ret = platform_store_audio_cal(adev->platform, &cal, data, length);
- pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&adev->cal_lock);
ALOGV("%s: Exit with error %d", __func__, ret);
@@ -281,8 +282,8 @@
ALOGV("%s: Enter", __func__);
memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
- //lock adev
- pthread_mutex_lock(&adev->lock);
+ //lock adev->cal_lock
+ pthread_mutex_lock(&adev->cal_lock);
//pack cal
platform_make_cal_cfg(&cal, acdb_dev_id,
@@ -291,7 +292,7 @@
ret = platform_retrieve_audio_cal(adev->platform, &cal, data, length);
- pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&adev->cal_lock);
ALOGV("%s: Exit with error %d", __func__, ret);
@@ -313,8 +314,8 @@
ALOGV("%s: Enter", __func__);
memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
- //lock adev
- pthread_mutex_lock(&adev->lock);
+ //lock adev->cal_lock
+ pthread_mutex_lock(&adev->cal_lock);
//pack cal
platform_make_cal_cfg(&cal, acdb_dev_id,
@@ -323,7 +324,7 @@
ret = platform_send_audio_cal(adev->platform, &cal, data, length, persist);
- pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&adev->cal_lock);
ALOGV("%s: Exit with error %d", __func__, ret);
@@ -345,8 +346,8 @@
ALOGV("%s: Enter", __func__);
memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
- //lock adev
- pthread_mutex_lock(&adev->lock);
+ //lock adev->cal_lock
+ pthread_mutex_lock(&adev->cal_lock);
//pack cal
platform_make_cal_cfg(&cal, acdb_dev_id,
@@ -355,7 +356,7 @@
ret = platform_get_audio_cal(adev->platform, &cal, data, length, persist);
- pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&adev->cal_lock);
ALOGV("%s: Exit with error %d", __func__, ret);
@@ -376,8 +377,8 @@
ALOGV("%s: Enter", __func__);
memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
- //lock adev
- pthread_mutex_lock(&adev->lock);
+ //lock adev->cal_lock
+ pthread_mutex_lock(&adev->cal_lock);
//pack cal
platform_make_cal_cfg(&cal, acdb_dev_id,
@@ -386,7 +387,7 @@
ret = platform_store_audio_cal(adev->platform, &cal, data, length);
- pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&adev->cal_lock);
ALOGV("%s: Exit with error %d", __func__, ret);
@@ -407,8 +408,8 @@
ALOGV("%s: Enter", __func__);
memset(&cal, 0, sizeof(acdb_audio_cal_cfg_t));
- //lock adev
- pthread_mutex_lock(&adev->lock);
+ //lock adev->cal_lock
+ pthread_mutex_lock(&adev->cal_lock);
//pack cal
platform_make_cal_cfg(&cal, acdb_dev_id,
@@ -417,7 +418,7 @@
ret = platform_retrieve_audio_cal(adev->platform, &cal, data, length);
- pthread_mutex_unlock(&adev->lock);
+ pthread_mutex_unlock(&adev->cal_lock);
ALOGV("%s: Exit with error %d", __func__, ret);
@@ -442,7 +443,7 @@
return;
}
-void audio_extn_gef_deinit()
+void audio_extn_gef_deinit(struct audio_device *adev)
{
ALOGV("%s: Enter", __func__);
@@ -452,6 +453,7 @@
dlclose(gef_hal_handle.handle);
}
+ pthread_mutex_destroy(&adev->cal_lock);
memset(&gef_hal_handle, 0, sizeof(gef_data));
ALOGV("%s: Exit", __func__);