hal: Change FB speaker protection to use new cal driver

Change the FB speaker protection code to use the new
audio calibration driver.

Change-Id: Iab3695f993c6dcf8ac93776216d7f495823be0f9
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index ce673ea..690d893 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -44,7 +44,7 @@
 #include <math.h>
 #include <cutils/properties.h>
 #include "audio_extn.h"
-#include <linux/msm_audio_acdb.h>
+#include <linux/msm_audio_calibration.h>
 
 #ifdef SPKR_PROT_ENABLED
 
@@ -187,11 +187,87 @@
 }
 
 
+static int get_spkr_prot_cal(int cal_fd,
+				struct audio_cal_info_msm_spk_prot_status *status)
+{
+    int ret = 0;
+    struct audio_cal_fb_spk_prot_status    cal_data;
+
+    if (cal_fd < 0) {
+        ALOGE("%s: Error: cal_fd = %d", __func__, cal_fd);
+        ret = -EINVAL;
+        goto done;
+    }
+
+    if (status == NULL) {
+        ALOGE("%s: Error: status NULL", __func__);
+        ret = -EINVAL;
+        goto done;
+    }
+
+    cal_data.hdr.data_size = sizeof(cal_data);
+    cal_data.hdr.version = VERSION_0_0;
+    cal_data.hdr.cal_type = AFE_FB_SPKR_PROT_CAL_TYPE;
+    cal_data.hdr.cal_type_size = sizeof(cal_data.cal_type);
+    cal_data.cal_type.cal_hdr.version = VERSION_0_0;
+    cal_data.cal_type.cal_data.mem_handle = -1;
+
+    if (ioctl(cal_fd, AUDIO_GET_CALIBRATION, &cal_data)) {
+        ALOGE("%s: Error: AUDIO_GET_CALIBRATION failed!",
+            __func__);
+        ret = -ENODEV;
+        goto done;
+    }
+
+    status->r0 = cal_data.cal_type.cal_info.r0;
+    status->status = cal_data.cal_type.cal_info.status;
+done:
+    return ret;
+}
+
+static int set_spkr_prot_cal(int cal_fd,
+				struct audio_cal_info_spk_prot_cfg *protCfg)
+{
+    int ret = 0;
+    struct audio_cal_fb_spk_prot_cfg    cal_data;
+
+    if (cal_fd < 0) {
+        ALOGE("%s: Error: cal_fd = %d", __func__, cal_fd);
+        ret = -EINVAL;
+        goto done;
+    }
+
+    if (protCfg == NULL) {
+        ALOGE("%s: Error: status NULL", __func__);
+        ret = -EINVAL;
+        goto done;
+    }
+
+    cal_data.hdr.data_size = sizeof(cal_data);
+    cal_data.hdr.version = VERSION_0_0;
+    cal_data.hdr.cal_type = AFE_FB_SPKR_PROT_CAL_TYPE;
+    cal_data.hdr.cal_type_size = sizeof(cal_data.cal_type);
+    cal_data.cal_type.cal_hdr.version = VERSION_0_0;
+    cal_data.cal_type.cal_info.r0 = protCfg->r0;
+    cal_data.cal_type.cal_info.t0 = protCfg->t0;
+    cal_data.cal_type.cal_info.mode = protCfg->mode;
+    cal_data.cal_type.cal_data.mem_handle = -1;
+
+    if (ioctl(cal_fd, AUDIO_SET_CALIBRATION, &cal_data)) {
+        ALOGE("%s: Error: AUDIO_SET_CALIBRATION failed!",
+            __func__);
+        ret = -ENODEV;
+        goto done;
+    }
+done:
+    return ret;
+}
+
 static int spkr_calibrate(int t0)
 {
     struct audio_device *adev = handle.adev_handle;
-    struct msm_spk_prot_cfg protCfg;
-    struct msm_spk_prot_status status;
+    struct audio_cal_info_spk_prot_cfg protCfg;
+    struct audio_cal_info_msm_spk_prot_status status;
     bool cleanup = false, disable_rx = false, disable_tx = false;
     int acdb_fd = -1;
     struct audio_usecase *uc_info_rx = NULL, *uc_info_tx = NULL;
@@ -206,14 +282,14 @@
         ALOGD("%s: Usecase present retry speaker protection", __func__);
         return -EAGAIN;
     }
-    acdb_fd = open("/dev/msm_acdb",O_RDWR | O_NONBLOCK);
+    acdb_fd = open("/dev/msm_audio_cal",O_RDWR | O_NONBLOCK);
     if (acdb_fd < 0) {
         ALOGE("%s: spkr_prot_thread open msm_acdb failed", __func__);
         return -ENODEV;
     } else {
         protCfg.mode = MSM_SPKR_PROT_CALIBRATION_IN_PROGRESS;
         protCfg.t0 = t0;
-        if (ioctl(acdb_fd, AUDIO_SET_SPEAKER_PROT, &protCfg)) {
+        if (set_spkr_prot_cal(acdb_fd, &protCfg)) {
             ALOGE("%s: spkr_prot_thread set failed AUDIO_SET_SPEAKER_PROT",
             __func__);
             status.status = -ENODEV;
@@ -301,7 +377,7 @@
     }
     if (acdb_fd > 0) {
         status.status = -EINVAL;
-        while (!ioctl(acdb_fd, AUDIO_GET_SPEAKER_PROT,&status)) {
+        while (!get_spkr_prot_cal(acdb_fd, &status)) {
             /*sleep for 200 ms to check for status check*/
             if (!status.status) {
                 ALOGD("%s: spkr_prot_thread calib Success R0 %d",
@@ -348,14 +424,14 @@
         if (!status.status) {
             protCfg.mode = MSM_SPKR_PROT_CALIBRATED;
             protCfg.r0 = status.r0;
-            if (ioctl(acdb_fd, AUDIO_SET_SPEAKER_PROT, &protCfg))
+            if (set_spkr_prot_cal(acdb_fd, &protCfg))
                 ALOGE("%s: spkr_prot_thread disable calib mode", __func__);
             else
                 handle.spkr_prot_mode = MSM_SPKR_PROT_CALIBRATED;
         } else {
             protCfg.mode = MSM_SPKR_PROT_NOT_CALIBRATED;
             handle.spkr_prot_mode = MSM_SPKR_PROT_NOT_CALIBRATED;
-            if (ioctl(acdb_fd, AUDIO_SET_SPEAKER_PROT, &protCfg))
+            if (set_spkr_prot_cal(acdb_fd, &protCfg))
                 ALOGE("%s: spkr_prot_thread disable calib mode failed", __func__);
         }
         if (acdb_fd > 0)
@@ -377,18 +453,18 @@
     unsigned long sec = 0;
     int t0;
     bool goahead = false;
-    struct msm_spk_prot_cfg protCfg;
+    struct audio_cal_info_spk_prot_cfg protCfg;
     FILE *fp;
     int acdb_fd;
     struct audio_device *adev = handle.adev_handle;
 
     handle.speaker_prot_threadid = pthread_self();
     ALOGD("spkr_prot_thread enable prot Entry");
-    acdb_fd = open("/dev/msm_acdb",O_RDWR | O_NONBLOCK);
+    acdb_fd = open("/dev/msm_audio_cal",O_RDWR | O_NONBLOCK);
     if (acdb_fd > 0) {
         /*Set processing mode with t0/r0*/
         protCfg.mode = MSM_SPKR_PROT_NOT_CALIBRATED;
-        if (ioctl(acdb_fd, AUDIO_SET_SPEAKER_PROT, &protCfg)) {
+        if (set_spkr_prot_cal(acdb_fd, &protCfg)) {
             ALOGE("%s: spkr_prot_thread enable prot failed", __func__);
             handle.spkr_prot_mode = MSM_SPKR_PROT_DISABLED;
             close(acdb_fd);
@@ -419,7 +495,7 @@
             && protCfg.r0 < MAX_RESISTANCE_SPKR_Q24) {
             ALOGD("%s: Spkr calibrated", __func__);
             protCfg.mode = MSM_SPKR_PROT_CALIBRATED;
-            if (ioctl(acdb_fd, AUDIO_SET_SPEAKER_PROT, &protCfg)) {
+            if (set_spkr_prot_cal(acdb_fd, &protCfg)) {
                 ALOGE("%s: enable prot failed", __func__);
                 handle.spkr_prot_mode = MSM_SPKR_PROT_DISABLED;
             } else