Merge "dsp: q6adm: add ADM_AUDPROC_PERSISTENT cal type"

This commit is contained in:
qctecmdr
2020-05-05 23:55:58 -07:00
committed by Gerrit - the friendly Code Review server
3 changed files with 31 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/* /*
* Copyright (c) 2014-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
*/ */
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/fs.h> #include <linux/fs.h>
@@ -57,6 +57,7 @@ size_t get_cal_info_size(int32_t cal_type)
case ADM_AUDPROC_CAL_TYPE: case ADM_AUDPROC_CAL_TYPE:
case ADM_LSM_AUDPROC_CAL_TYPE: case ADM_LSM_AUDPROC_CAL_TYPE:
case ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE: case ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE:
case ADM_AUDPROC_PERSISTENT_CAL_TYPE:
size = sizeof(struct audio_cal_info_audproc); size = sizeof(struct audio_cal_info_audproc);
break; break;
case ADM_AUDVOL_CAL_TYPE: case ADM_AUDVOL_CAL_TYPE:
@@ -211,6 +212,7 @@ size_t get_user_cal_type_size(int32_t cal_type)
case ADM_AUDPROC_CAL_TYPE: case ADM_AUDPROC_CAL_TYPE:
case ADM_LSM_AUDPROC_CAL_TYPE: case ADM_LSM_AUDPROC_CAL_TYPE:
case ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE: case ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE:
case ADM_AUDPROC_PERSISTENT_CAL_TYPE:
size = sizeof(struct audio_cal_type_audproc); size = sizeof(struct audio_cal_type_audproc);
break; break;
case ADM_AUDVOL_CAL_TYPE: case ADM_AUDVOL_CAL_TYPE:

View File

@@ -2149,7 +2149,8 @@ static struct cal_block_data *adm_find_cal_by_path(int cal_index, int path)
if (cal_index == ADM_AUDPROC_CAL || 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) { cal_index == ADM_LSM_AUDPROC_PERSISTENT_CAL ||
cal_index == ADM_AUDPROC_PERSISTENT_CAL) {
audproc_cal_info = cal_block->cal_info; audproc_cal_info = cal_block->cal_info;
if ((audproc_cal_info->path == path) && if ((audproc_cal_info->path == path) &&
(cal_block->cal_data.size > 0)) (cal_block->cal_data.size > 0))
@@ -2187,7 +2188,8 @@ static struct cal_block_data *adm_find_cal_by_app_type(int cal_index, int path,
if (cal_index == ADM_AUDPROC_CAL || 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) { cal_index == ADM_LSM_AUDPROC_PERSISTENT_CAL ||
cal_index == ADM_AUDPROC_PERSISTENT_CAL) {
audproc_cal_info = cal_block->cal_info; audproc_cal_info = cal_block->cal_info;
if ((audproc_cal_info->path == path) && if ((audproc_cal_info->path == path) &&
(audproc_cal_info->app_type == app_type) && (audproc_cal_info->app_type == app_type) &&
@@ -2228,7 +2230,8 @@ static struct cal_block_data *adm_find_cal(int cal_index, int path,
if (cal_index == ADM_AUDPROC_CAL || 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) { cal_index == ADM_LSM_AUDPROC_PERSISTENT_CAL||
cal_index == ADM_AUDPROC_PERSISTENT_CAL) {
audproc_cal_info = cal_block->cal_info; audproc_cal_info = cal_block->cal_info;
if ((audproc_cal_info->path == path) && if ((audproc_cal_info->path == path) &&
(audproc_cal_info->app_type == app_type) && (audproc_cal_info->app_type == app_type) &&
@@ -2319,6 +2322,9 @@ static void send_adm_cal(int port_id, int copp_idx, int path, int perf_mode,
if (passthr_mode != LISTEN) { if (passthr_mode != LISTEN) {
send_adm_cal_type(ADM_AUDPROC_CAL, path, port_id, copp_idx, send_adm_cal_type(ADM_AUDPROC_CAL, path, port_id, copp_idx,
perf_mode, app_type, acdb_id, sample_rate); perf_mode, app_type, acdb_id, sample_rate);
send_adm_cal_type(ADM_AUDPROC_PERSISTENT_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, send_adm_cal_type(ADM_LSM_AUDPROC_CAL, path, port_id, copp_idx,
perf_mode, app_type, acdb_id, sample_rate); perf_mode, app_type, acdb_id, sample_rate);
@@ -4134,6 +4140,9 @@ static int get_cal_type_index(int32_t cal_type)
case ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE: case ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE:
ret = ADM_LSM_AUDPROC_PERSISTENT_CAL; ret = ADM_LSM_AUDPROC_PERSISTENT_CAL;
break; break;
case ADM_AUDPROC_PERSISTENT_CAL_TYPE:
ret = ADM_AUDPROC_PERSISTENT_CAL;
break;
default: default:
pr_err("%s: invalid cal type %d!\n", __func__, cal_type); pr_err("%s: invalid cal type %d!\n", __func__, cal_type);
} }
@@ -4361,6 +4370,12 @@ static int adm_init_cal_data(void)
adm_set_cal, NULL, NULL} }, adm_set_cal, NULL, NULL} },
{adm_map_cal_data, adm_unmap_cal_data, {adm_map_cal_data, adm_unmap_cal_data,
cal_utils_match_buf_num} }, cal_utils_match_buf_num} },
{{ADM_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__); pr_debug("%s:\n", __func__);
@@ -4922,7 +4937,15 @@ int adm_store_cal_data(int port_id, int copp_idx, int path, int perf_mode,
rc = -ENOMEM; rc = -ENOMEM;
goto unlock; goto unlock;
} }
} else if (cal_index == ADM_AUDVOL_CAL) { } else if (cal_index == ADM_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) { if (cal_block->cal_data.size > AUD_VOL_BLOCK_SIZE) {
pr_err("%s:aud_vol:invalid size exp/actual[%zd, %d]\n", pr_err("%s:aud_vol:invalid size exp/actual[%zd, %d]\n",
__func__, cal_block->cal_data.size, *size); __func__, cal_block->cal_data.size, *size);

View File

@@ -35,6 +35,7 @@ enum {
ADM_SRS_TRUMEDIA, ADM_SRS_TRUMEDIA,
ADM_RTAC_AUDVOL_CAL, ADM_RTAC_AUDVOL_CAL,
ADM_LSM_AUDPROC_PERSISTENT_CAL, ADM_LSM_AUDPROC_PERSISTENT_CAL,
ADM_AUDPROC_PERSISTENT_CAL,
ADM_MAX_CAL_TYPES ADM_MAX_CAL_TYPES
}; };