Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa686232 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "dsp: q6adm: add ADM_LSM_AUDPROC_PERSISTENT cal type"

parents 08bac524 face276d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
/* 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 @@ size_t get_cal_info_size(int32_t cal_type)
		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 @@ size_t get_user_cal_type_size(int32_t cal_type)
		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:
+30 −5
Original line number Diff line number Diff line
@@ -2158,7 +2158,8 @@ static struct cal_block_data *adm_find_cal_by_path(int cal_index, int path)
			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 @@ static struct cal_block_data *adm_find_cal_by_app_type(int cal_index, int path,
			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 @@ static struct cal_block_data *adm_find_cal(int cal_index, int path,
			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 @@ static void send_adm_cal(int port_id, int copp_idx, int path, int perf_mode,
{
	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 @@ static int get_cal_type_index(int32_t cal_type)
	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 @@ static int adm_init_cal_data(void)
		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 @@ int adm_store_cal_data(int port_id, int copp_idx, int path, int perf_mode,
			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",
+2 −0
Original line number Diff line number Diff line
@@ -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 @@ enum {
	ADM_RTAC_APR_CAL,
	ADM_SRS_TRUMEDIA,
	ADM_RTAC_AUDVOL_CAL,
	ADM_LSM_AUDPROC_PERSISTENT_CAL,
	ADM_MAX_CAL_TYPES
};