Merge "dsp: q6adm: add ADM_LSM_AUDPROC_PERSISTENT cal type"
diff --git a/dsp/audio_cal_utils.c b/dsp/audio_cal_utils.c
index ad1dc3d..c6449dd 100644
--- a/dsp/audio_cal_utils.c
+++ b/dsp/audio_cal_utils.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -63,6 +63,7 @@
break;
case ADM_AUDPROC_CAL_TYPE:
case ADM_LSM_AUDPROC_CAL_TYPE:
+ case ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE:
size = sizeof(struct audio_cal_info_audproc);
break;
case ADM_AUDVOL_CAL_TYPE:
@@ -213,6 +214,7 @@
break;
case ADM_AUDPROC_CAL_TYPE:
case ADM_LSM_AUDPROC_CAL_TYPE:
+ case ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE:
size = sizeof(struct audio_cal_type_audproc);
break;
case ADM_AUDVOL_CAL_TYPE:
diff --git a/dsp/q6adm.c b/dsp/q6adm.c
index 790cd56..ce297e1 100644
--- a/dsp/q6adm.c
+++ b/dsp/q6adm.c
@@ -2158,7 +2158,8 @@
struct cal_block_data, list);
if (cal_index == ADM_AUDPROC_CAL ||
- cal_index == ADM_LSM_AUDPROC_CAL) {
+ cal_index == ADM_LSM_AUDPROC_CAL ||
+ cal_index == ADM_LSM_AUDPROC_PERSISTENT_CAL) {
audproc_cal_info = cal_block->cal_info;
if ((audproc_cal_info->path == path) &&
(cal_block->cal_data.size > 0))
@@ -2192,7 +2193,8 @@
struct cal_block_data, list);
if (cal_index == ADM_AUDPROC_CAL ||
- cal_index == ADM_LSM_AUDPROC_CAL) {
+ cal_index == ADM_LSM_AUDPROC_CAL ||
+ cal_index == ADM_LSM_AUDPROC_PERSISTENT_CAL) {
audproc_cal_info = cal_block->cal_info;
if ((audproc_cal_info->path == path) &&
(audproc_cal_info->app_type == app_type) &&
@@ -2230,7 +2232,8 @@
struct cal_block_data, list);
if (cal_index == ADM_AUDPROC_CAL ||
- cal_index == ADM_LSM_AUDPROC_CAL) {
+ cal_index == ADM_LSM_AUDPROC_CAL ||
+ cal_index == ADM_LSM_AUDPROC_PERSISTENT_CAL) {
audproc_cal_info = cal_block->cal_info;
if ((audproc_cal_info->path == path) &&
(audproc_cal_info->app_type == app_type) &&
@@ -2317,12 +2320,18 @@
{
pr_debug("%s: port id 0x%x copp_idx %d\n", __func__, port_id, copp_idx);
- if (passthr_mode != LISTEN)
+ if (passthr_mode != LISTEN) {
send_adm_cal_type(ADM_AUDPROC_CAL, path, port_id, copp_idx,
perf_mode, app_type, acdb_id, sample_rate);
- else
+ } else {
send_adm_cal_type(ADM_LSM_AUDPROC_CAL, path, port_id, copp_idx,
perf_mode, app_type, acdb_id, sample_rate);
+
+ send_adm_cal_type(ADM_LSM_AUDPROC_PERSISTENT_CAL, path,
+ port_id, copp_idx, perf_mode, app_type,
+ acdb_id, sample_rate);
+ }
+
send_adm_cal_type(ADM_AUDVOL_CAL, path, port_id, copp_idx, perf_mode,
app_type, acdb_id, sample_rate);
}
@@ -3493,6 +3502,9 @@
case ADM_RTAC_AUDVOL_CAL_TYPE:
ret = ADM_RTAC_AUDVOL_CAL;
break;
+ case ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE:
+ ret = ADM_LSM_AUDPROC_PERSISTENT_CAL;
+ break;
default:
pr_err("%s: invalid cal type %d!\n", __func__, cal_type);
}
@@ -3714,6 +3726,12 @@
adm_set_cal, NULL, NULL} },
{adm_map_cal_data, adm_unmap_cal_data,
cal_utils_match_buf_num} },
+
+ {{ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE,
+ {adm_alloc_cal, adm_dealloc_cal, NULL,
+ adm_set_cal, NULL, NULL} },
+ {adm_map_cal_data, adm_unmap_cal_data,
+ cal_utils_match_buf_num} },
};
pr_debug("%s:\n", __func__);
@@ -4504,6 +4522,13 @@
rc = -ENOMEM;
goto unlock;
}
+ } else if (cal_index == ADM_LSM_AUDPROC_PERSISTENT_CAL) {
+ if (cal_block->cal_data.size > AUD_PROC_PERSIST_BLOCK_SIZE) {
+ pr_err("%s:persist invalid size exp/actual[%zd, %d]\n",
+ __func__, cal_block->cal_data.size, *size);
+ rc = -ENOMEM;
+ goto unlock;
+ }
} else if (cal_index == ADM_AUDVOL_CAL) {
if (cal_block->cal_data.size > AUD_VOL_BLOCK_SIZE) {
pr_err("%s:aud_vol:invalid size exp/actual[%zd, %d]\n",
diff --git a/include/dsp/q6adm-v2.h b/include/dsp/q6adm-v2.h
index e8000ab..79bda97 100644
--- a/include/dsp/q6adm-v2.h
+++ b/include/dsp/q6adm-v2.h
@@ -27,6 +27,7 @@
((MAX_MODULES_IN_TOPO + 1) * sizeof(uint32_t))
#define AUD_PROC_BLOCK_SIZE 4096
#define AUD_VOL_BLOCK_SIZE 4096
+#define AUD_PROC_PERSIST_BLOCK_SIZE (2 * 1024 * 1020)
#define AUDIO_RX_CALIBRATION_SIZE (AUD_PROC_BLOCK_SIZE + \
AUD_VOL_BLOCK_SIZE)
enum {
@@ -38,6 +39,7 @@
ADM_RTAC_APR_CAL,
ADM_SRS_TRUMEDIA,
ADM_RTAC_AUDVOL_CAL,
+ ADM_LSM_AUDPROC_PERSISTENT_CAL,
ADM_MAX_CAL_TYPES
};