mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
ASoC: msm: extend app type cfg mixer command with copp mode
ADM can be opened with different perf mode with ASM Change-Id: I22c50ae57c1e1f9ee9a0b080a20bde5b4f50d06c Signed-off-by: Hongtao Peng <quic_hongtaop@quicinc.com>
This commit is contained in:
parent
3f10f8fe5f
commit
5e85dafc9c
4 changed files with 88 additions and 34 deletions
|
|
@ -1,5 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/* Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
|
|
@ -683,7 +684,7 @@ static int msm_pcm_playback_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol,
|
|||
u64 fe_id = kcontrol->private_value;
|
||||
int session_type = SESSION_TYPE_RX;
|
||||
int be_id = ucontrol->value.integer.value[3];
|
||||
struct msm_pcm_stream_app_type_cfg cfg_data = {0, 0, 48000, 0, 0};
|
||||
struct msm_pcm_stream_app_type_cfg cfg_data = {0, 0, 48000, 0, 0, 0};
|
||||
int ret = 0;
|
||||
|
||||
cfg_data.app_type = ucontrol->value.integer.value[0];
|
||||
|
|
@ -694,10 +695,12 @@ static int msm_pcm_playback_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol,
|
|||
cfg_data.copp_token = ucontrol->value.integer.value[4];
|
||||
if (ucontrol->value.integer.value[5] != 0)
|
||||
cfg_data.bit_width = ucontrol->value.integer.value[5];
|
||||
if (ucontrol->value.integer.value[6] != 0)
|
||||
cfg_data.copp_perf_mode = ucontrol->value.integer.value[6];
|
||||
pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d"
|
||||
"sample_rate- %d copp_token- %d bit_width- %d\n",
|
||||
"sample_rate- %d copp_token- %d bit_width- %d copp_perf_mode- %d\n",
|
||||
__func__, fe_id, session_type, be_id, cfg_data.app_type, cfg_data.acdb_dev_id,
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width);
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width, cfg_data.copp_perf_mode);
|
||||
ret = msm_pcm_routing_reg_stream_app_type_cfg(fe_id, session_type,
|
||||
be_id, &cfg_data);
|
||||
if (ret < 0)
|
||||
|
|
@ -730,11 +733,12 @@ static int msm_pcm_playback_app_type_cfg_ctl_get(struct snd_kcontrol *kcontrol,
|
|||
ucontrol->value.integer.value[3] = be_id;
|
||||
ucontrol->value.integer.value[4] = cfg_data.copp_token;
|
||||
ucontrol->value.integer.value[5] = cfg_data.bit_width;
|
||||
ucontrol->value.integer.value[6] = cfg_data.copp_perf_mode;
|
||||
pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d"
|
||||
"sample_rate- %d copp_token- %d bit_width- %d\n",
|
||||
"sample_rate- %d copp_token- %d bit_width- %d copp_perf_mode- %d\n",
|
||||
__func__, fe_id, session_type, be_id,
|
||||
cfg_data.app_type, cfg_data.acdb_dev_id, cfg_data.sample_rate,
|
||||
cfg_data.copp_token, cfg_data.bit_width);
|
||||
cfg_data.copp_token, cfg_data.bit_width, cfg_data.copp_perf_mode);
|
||||
|
||||
done:
|
||||
return ret;
|
||||
|
|
@ -746,7 +750,7 @@ static int msm_pcm_capture_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol,
|
|||
u64 fe_id = kcontrol->private_value;
|
||||
int session_type = SESSION_TYPE_TX;
|
||||
int be_id = ucontrol->value.integer.value[3];
|
||||
struct msm_pcm_stream_app_type_cfg cfg_data = {0, 0, 48000, 0, 0};
|
||||
struct msm_pcm_stream_app_type_cfg cfg_data = {0, 0, 48000, 0, 0, 0};
|
||||
int ret = 0;
|
||||
|
||||
cfg_data.app_type = ucontrol->value.integer.value[0];
|
||||
|
|
@ -757,10 +761,12 @@ static int msm_pcm_capture_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol,
|
|||
cfg_data.copp_token = ucontrol->value.integer.value[4];
|
||||
if (ucontrol->value.integer.value[5] != 0)
|
||||
cfg_data.bit_width = ucontrol->value.integer.value[5];
|
||||
if (ucontrol->value.integer.value[6] != 0)
|
||||
cfg_data.copp_perf_mode = ucontrol->value.integer.value[6];
|
||||
pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d"
|
||||
"sample_rate- %d copp_token- %d bit_width- %d\n",
|
||||
"sample_rate- %d copp_token- %d bit_width- %d copp_perf_mode- %d\n",
|
||||
__func__, fe_id, session_type, be_id, cfg_data.app_type, cfg_data.acdb_dev_id,
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width);
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width, cfg_data.copp_perf_mode);
|
||||
ret = msm_pcm_routing_reg_stream_app_type_cfg(fe_id, session_type,
|
||||
be_id, &cfg_data);
|
||||
if (ret < 0)
|
||||
|
|
@ -793,11 +799,12 @@ static int msm_pcm_capture_app_type_cfg_ctl_get(struct snd_kcontrol *kcontrol,
|
|||
ucontrol->value.integer.value[3] = be_id;
|
||||
ucontrol->value.integer.value[4] = cfg_data.copp_token;
|
||||
ucontrol->value.integer.value[5] = cfg_data.bit_width;
|
||||
ucontrol->value.integer.value[6] = cfg_data.copp_perf_mode;
|
||||
pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d"
|
||||
"sample_rate- %d copp_token- %d bit_width- %d\n",
|
||||
"sample_rate- %d copp_token- %d bit_width- %d copp_perf_mode- %d\n",
|
||||
__func__, fe_id, session_type, be_id,
|
||||
cfg_data.app_type, cfg_data.acdb_dev_id, cfg_data.sample_rate,
|
||||
cfg_data.copp_token, cfg_data.bit_width);
|
||||
cfg_data.copp_token, cfg_data.bit_width, cfg_data.copp_perf_mode);
|
||||
done:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -2091,7 +2092,7 @@ static int msm_pcm_playback_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol,
|
|||
u64 fe_id = kcontrol->private_value;
|
||||
int session_type = SESSION_TYPE_RX;
|
||||
int be_id = ucontrol->value.integer.value[3];
|
||||
struct msm_pcm_stream_app_type_cfg cfg_data = {0, 0, 48000, 0, 0};
|
||||
struct msm_pcm_stream_app_type_cfg cfg_data = {0, 0, 48000, 0, 0, 0};
|
||||
int ret = 0;
|
||||
|
||||
cfg_data.app_type = ucontrol->value.integer.value[0];
|
||||
|
|
@ -2102,10 +2103,12 @@ static int msm_pcm_playback_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol,
|
|||
cfg_data.copp_token = ucontrol->value.integer.value[4];
|
||||
if (ucontrol->value.integer.value[5] != 0)
|
||||
cfg_data.bit_width = ucontrol->value.integer.value[5];
|
||||
if (ucontrol->value.integer.value[6] != 0)
|
||||
cfg_data.copp_perf_mode = ucontrol->value.integer.value[6];
|
||||
pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d"
|
||||
"sample_rate- %d copp_token- %d bit_width- %d\n",
|
||||
"sample_rate- %d copp_token- %d bit_width- %d copp_perf_mode- %d\n",
|
||||
__func__, fe_id, session_type, be_id, cfg_data.app_type, cfg_data.acdb_dev_id,
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width);
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width, cfg_data.copp_perf_mode);
|
||||
ret = msm_pcm_routing_reg_stream_app_type_cfg(fe_id, session_type,
|
||||
be_id, &cfg_data);
|
||||
if (ret < 0)
|
||||
|
|
@ -2138,10 +2141,11 @@ static int msm_pcm_playback_app_type_cfg_ctl_get(struct snd_kcontrol *kcontrol,
|
|||
ucontrol->value.integer.value[3] = be_id;
|
||||
ucontrol->value.integer.value[4] = cfg_data.copp_token;
|
||||
ucontrol->value.integer.value[5] = cfg_data.bit_width;
|
||||
ucontrol->value.integer.value[6] = cfg_data.copp_perf_mode;
|
||||
pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d"
|
||||
"sample_rate- %d copp_token- %d bit_width- %d\n",
|
||||
"sample_rate- %d copp_token- %d bit_width- %d copp_perf_mode- %d\n",
|
||||
__func__, fe_id, session_type, be_id, cfg_data.app_type, cfg_data.acdb_dev_id,
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width);
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width, cfg_data.copp_perf_mode);
|
||||
done:
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -2152,7 +2156,7 @@ static int msm_pcm_capture_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol,
|
|||
u64 fe_id = kcontrol->private_value;
|
||||
int session_type = SESSION_TYPE_TX;
|
||||
int be_id = ucontrol->value.integer.value[3];
|
||||
struct msm_pcm_stream_app_type_cfg cfg_data = {0, 0, 48000, 0, 0};
|
||||
struct msm_pcm_stream_app_type_cfg cfg_data = {0, 0, 48000, 0, 0, 0};
|
||||
int ret = 0;
|
||||
|
||||
cfg_data.app_type = ucontrol->value.integer.value[0];
|
||||
|
|
@ -2163,10 +2167,12 @@ static int msm_pcm_capture_app_type_cfg_ctl_put(struct snd_kcontrol *kcontrol,
|
|||
cfg_data.copp_token = ucontrol->value.integer.value[4];
|
||||
if (ucontrol->value.integer.value[5] != 0)
|
||||
cfg_data.bit_width = ucontrol->value.integer.value[5];
|
||||
if (ucontrol->value.integer.value[6] != 0)
|
||||
cfg_data.copp_perf_mode = ucontrol->value.integer.value[6];
|
||||
pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d"
|
||||
"sample_rate- %d copp_token- %d bit_width- %d\n",
|
||||
"sample_rate- %d copp_token- %d bit_width- %d copp_perf_mode- %d\n",
|
||||
__func__, fe_id, session_type, be_id, cfg_data.app_type, cfg_data.acdb_dev_id,
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width);
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width, cfg_data.copp_perf_mode);
|
||||
ret = msm_pcm_routing_reg_stream_app_type_cfg(fe_id, session_type,
|
||||
be_id, &cfg_data);
|
||||
if (ret < 0)
|
||||
|
|
@ -2199,10 +2205,11 @@ static int msm_pcm_capture_app_type_cfg_ctl_get(struct snd_kcontrol *kcontrol,
|
|||
ucontrol->value.integer.value[3] = be_id;
|
||||
ucontrol->value.integer.value[4] = cfg_data.copp_token;
|
||||
ucontrol->value.integer.value[5] = cfg_data.bit_width;
|
||||
ucontrol->value.integer.value[6] = cfg_data.copp_perf_mode;
|
||||
pr_debug("%s: fe_id- %llu session_type- %d be_id- %d app_type- %d acdb_dev_id- %d"
|
||||
"sample_rate- %d copp_token- %d bit_width- %d\n",
|
||||
"sample_rate- %d copp_token- %d bit_width- %d copp_perf_mode- %d\n",
|
||||
__func__, fe_id, session_type, be_id, cfg_data.app_type, cfg_data.acdb_dev_id,
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width);
|
||||
cfg_data.sample_rate, cfg_data.copp_token, cfg_data.bit_width, cfg_data.copp_perf_mode);
|
||||
done:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
64
asoc/msm-pcm-routing-v2.c
Executable file → Normal file
64
asoc/msm-pcm-routing-v2.c
Executable file → Normal file
|
|
@ -1,5 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
|
|
@ -1283,6 +1284,30 @@ static bool is_mm_lsm_fe_id(int fe_id)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int get_copp_perf_mode(int fe_id, int sess_type, int port)
|
||||
{
|
||||
int fdai_mode, copp_perf_mode, flag, value;
|
||||
int rc = 0;
|
||||
|
||||
if ((fe_id < 0) || (fe_id >= MSM_FRONTEND_DAI_MAX) ||
|
||||
(port < 0) || (port >= MSM_BACKEND_DAI_MAX) ||
|
||||
(sess_type != SESSION_TYPE_RX && sess_type != SESSION_TYPE_TX)) {
|
||||
pr_err("%s: Input out of bounds\n", __func__);
|
||||
return rc;
|
||||
}
|
||||
fdai_mode = fe_dai_map[fe_id][sess_type].perf_mode;
|
||||
copp_perf_mode = fe_dai_app_type_cfg[fe_id][sess_type][port].copp_perf_mode;
|
||||
flag = (copp_perf_mode & PP_PERF_MODE_FLAG_MASK);
|
||||
value = (copp_perf_mode & PP_PERF_MODE_VALUE_MASK);
|
||||
rc = fdai_mode;
|
||||
if ((flag != 0) && (value >= LEGACY_PCM_MODE) &&
|
||||
(value <= ULL_POST_PROCESSING_PCM_MODE)) {
|
||||
rc = value;
|
||||
}
|
||||
pr_debug("%s: Get copp_perf_mode = %d", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* msm_pcm_routing_send_chmix_cfg:
|
||||
* send the channel mixer command to mix the input channels
|
||||
|
|
@ -1476,11 +1501,11 @@ int msm_pcm_routing_reg_stream_app_type_cfg(
|
|||
}
|
||||
|
||||
pr_debug("%s: fedai_id %d, session_type %d, be_id %d, app_type %d, acdb_dev_id %d,"
|
||||
"sample_rate %d, copp_token %d, bit_width %d\n",
|
||||
"sample_rate %d, copp_token %d, bit_width %d, copp_perf_mode %d\n",
|
||||
__func__, fedai_id, session_type, be_id,
|
||||
cfg_data->app_type, cfg_data->acdb_dev_id,
|
||||
cfg_data->sample_rate, cfg_data->copp_token,
|
||||
cfg_data->bit_width);
|
||||
cfg_data->bit_width, cfg_data->copp_perf_mode);
|
||||
|
||||
if (!is_mm_lsm_fe_id(fedai_id)) {
|
||||
pr_err("%s: Invalid machine driver ID %d\n",
|
||||
|
|
@ -1564,11 +1589,11 @@ int msm_pcm_routing_get_stream_app_type_cfg(
|
|||
*bedai_id = be_id;
|
||||
*cfg_data = fe_dai_app_type_cfg[fedai_id][session_type][be_id];
|
||||
pr_debug("%s: fedai_id %d, session_type %d, be_id %d, app_type %d, acdb_dev_id %d,"
|
||||
"sample_rate %d, copp_token %d, bit_width %d\n",
|
||||
"sample_rate %d, copp_token %d, bit_width %d, copp_perf_mode %d\n",
|
||||
__func__, fedai_id, session_type, *bedai_id,
|
||||
cfg_data->app_type, cfg_data->acdb_dev_id,
|
||||
cfg_data->sample_rate, cfg_data->copp_token,
|
||||
cfg_data->bit_width);
|
||||
cfg_data->bit_width, cfg_data->copp_perf_mode);
|
||||
done:
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1906,6 +1931,7 @@ int msm_pcm_routing_reg_phy_compr_stream(int fe_id, int perf_mode,
|
|||
u16 bit_width = 16, be_bit_width;
|
||||
bool is_lsm;
|
||||
uint32_t copp_token = 0;
|
||||
int copp_perf_mode = 0;
|
||||
|
||||
pr_debug("%s:fe_id[%d] perf_mode[%d] id[%d] stream_type[%d] passt[%d]",
|
||||
__func__, fe_id, perf_mode, dspst_id,
|
||||
|
|
@ -1999,6 +2025,7 @@ int msm_pcm_routing_reg_phy_compr_stream(int fe_id, int perf_mode,
|
|||
}
|
||||
acdb_dev_id =
|
||||
fe_dai_app_type_cfg[fe_id][session_type][i].acdb_dev_id;
|
||||
copp_perf_mode = get_copp_perf_mode(fe_id, session_type, i);
|
||||
topology = msm_routing_get_adm_topology(fe_id,
|
||||
session_type,
|
||||
i);
|
||||
|
|
@ -2020,7 +2047,7 @@ int msm_pcm_routing_reg_phy_compr_stream(int fe_id, int perf_mode,
|
|||
SNDRV_PCM_FORMAT_S32_LE);
|
||||
copp_idx =
|
||||
adm_open(port_id, path_type, sample_rate,
|
||||
channels, topology, perf_mode,
|
||||
channels, topology, copp_perf_mode,
|
||||
bit_width, app_type, acdb_dev_id,
|
||||
session_type, passthr_mode, copp_token);
|
||||
if ((copp_idx < 0) ||
|
||||
|
|
@ -2308,6 +2335,7 @@ int msm_pcm_routing_reg_phy_stream(int fedai_id, int perf_mode,
|
|||
uint32_t passthr_mode = LEGACY_PCM;
|
||||
int ret = 0;
|
||||
uint32_t copp_token = 0;
|
||||
int copp_perf_mode = 0;
|
||||
|
||||
if (fedai_id >= MSM_FRONTEND_DAI_MM_MAX_ID) {
|
||||
/* bad ID assigned in machine driver */
|
||||
|
|
@ -2380,7 +2408,7 @@ int msm_pcm_routing_reg_phy_stream(int fedai_id, int perf_mode,
|
|||
i);
|
||||
be_bit_width = msm_routing_get_bit_width(
|
||||
msm_bedais[i].format);
|
||||
|
||||
copp_perf_mode = get_copp_perf_mode(fedai_id, session_type, i);
|
||||
if (hifi_filter_enabled && (msm_bedais[i].sample_rate ==
|
||||
384000 ||msm_bedais[i].sample_rate == 352800)
|
||||
&& be_bit_width == 32)
|
||||
|
|
@ -2403,7 +2431,7 @@ int msm_pcm_routing_reg_phy_stream(int fedai_id, int perf_mode,
|
|||
|
||||
copp_idx = adm_open_v2(port_id, path_type,
|
||||
sample_rate, channels, topology,
|
||||
perf_mode, bits_per_sample,
|
||||
copp_perf_mode, bits_per_sample,
|
||||
app_type, acdb_dev_id,
|
||||
session_type, passthr_mode,
|
||||
copp_token,
|
||||
|
|
@ -2414,7 +2442,7 @@ int msm_pcm_routing_reg_phy_stream(int fedai_id, int perf_mode,
|
|||
} else
|
||||
copp_idx = adm_open(port_id, path_type,
|
||||
sample_rate, channels, topology,
|
||||
perf_mode, bits_per_sample,
|
||||
copp_perf_mode, bits_per_sample,
|
||||
app_type, acdb_dev_id,
|
||||
session_type, passthr_mode, copp_token);
|
||||
if ((copp_idx < 0) ||
|
||||
|
|
@ -2495,6 +2523,7 @@ void msm_pcm_routing_dereg_phy_stream(int fedai_id, int stream_type)
|
|||
{
|
||||
int i, port_type, session_type, path_type, topology, port_id;
|
||||
struct msm_pcm_routing_fdai_data *fdai;
|
||||
int copp_perf_mode;
|
||||
|
||||
if (!is_mm_lsm_fe_id(fedai_id)) {
|
||||
/* bad ID assigned in machine driver */
|
||||
|
|
@ -2536,7 +2565,8 @@ void msm_pcm_routing_dereg_phy_stream(int fedai_id, int stream_type)
|
|||
topology = adm_get_topology_for_port_copp_idx(
|
||||
port_id, idx);
|
||||
msm_routing_unload_topology(topology);
|
||||
adm_close(port_id, fdai->perf_mode, idx);
|
||||
copp_perf_mode = get_copp_perf_mode(fedai_id, session_type, i);
|
||||
adm_close(port_id, copp_perf_mode, idx);
|
||||
pr_debug("%s:copp:%ld,idx bit fe:%d,type:%d,be:%d\n",
|
||||
__func__, copp, fedai_id, session_type, i);
|
||||
clear_bit(idx,
|
||||
|
|
@ -2580,6 +2610,7 @@ static void msm_pcm_routing_process_audio(u16 reg, u16 val, int set)
|
|||
uint32_t passthr_mode;
|
||||
bool is_lsm;
|
||||
uint32_t copp_token = 0;
|
||||
int copp_perf_mode = 0;
|
||||
|
||||
pr_debug("%s: reg %x val %x set %x\n", __func__, reg, val, set);
|
||||
|
||||
|
|
@ -2694,6 +2725,7 @@ static void msm_pcm_routing_process_audio(u16 reg, u16 val, int set)
|
|||
|
||||
be_bit_width = msm_routing_get_bit_width(
|
||||
msm_bedais[reg].format);
|
||||
copp_perf_mode = get_copp_perf_mode(val, session_type, reg);
|
||||
if (hifi_filter_enabled && (msm_bedais[reg].sample_rate
|
||||
== 384000 ||msm_bedais[reg].sample_rate ==
|
||||
352800) && be_bit_width == 32)
|
||||
|
|
@ -2701,7 +2733,7 @@ static void msm_pcm_routing_process_audio(u16 reg, u16 val, int set)
|
|||
SNDRV_PCM_FORMAT_S32_LE);
|
||||
copp_idx = adm_open(port_id, path_type,
|
||||
sample_rate, channels, topology,
|
||||
fdai->perf_mode, bits_per_sample,
|
||||
copp_perf_mode, bits_per_sample,
|
||||
app_type, acdb_dev_id,
|
||||
session_type, passthr_mode, copp_token);
|
||||
if ((copp_idx < 0) ||
|
||||
|
|
@ -2762,7 +2794,8 @@ static void msm_pcm_routing_process_audio(u16 reg, u16 val, int set)
|
|||
topology = adm_get_topology_for_port_copp_idx(port_id,
|
||||
idx);
|
||||
msm_routing_unload_topology(topology);
|
||||
adm_close(port_id, fdai->perf_mode, idx);
|
||||
copp_perf_mode = get_copp_perf_mode(val, session_type, reg);
|
||||
adm_close(port_id, copp_perf_mode, idx);
|
||||
pr_debug("%s: copp: %ld, reset idx bit fe:%d, type: %d, be:%d topology=0x%x\n",
|
||||
__func__, copp, val, session_type, reg,
|
||||
topology);
|
||||
|
|
@ -41329,6 +41362,7 @@ static int msm_pcm_routing_close(struct snd_pcm_substream *substream)
|
|||
int i, session_type, path_type, topology;
|
||||
struct msm_pcm_routing_bdai_data *bedai;
|
||||
struct msm_pcm_routing_fdai_data *fdai;
|
||||
int copp_perf_mode;
|
||||
|
||||
pr_debug("%s: substream->pcm->id:%s\n",
|
||||
__func__, substream->pcm->id);
|
||||
|
|
@ -41370,7 +41404,8 @@ static int msm_pcm_routing_close(struct snd_pcm_substream *substream)
|
|||
topology = adm_get_topology_for_port_copp_idx(port_id,
|
||||
idx);
|
||||
msm_routing_unload_topology(topology);
|
||||
adm_close(port_id, fdai->perf_mode, idx);
|
||||
copp_perf_mode = get_copp_perf_mode(i, session_type, be_id);
|
||||
adm_close(port_id, copp_perf_mode, idx);
|
||||
pr_debug("%s: copp:%ld,idx bit fe:%d, type:%d,be:%d topology=0x%x\n",
|
||||
__func__, copp, i, session_type, be_id,
|
||||
topology);
|
||||
|
|
@ -41405,6 +41440,7 @@ static int msm_pcm_routing_prepare(struct snd_pcm_substream *substream)
|
|||
struct media_format_info voc_be_media_format;
|
||||
bool is_lsm;
|
||||
uint32_t copp_token = 0;
|
||||
int copp_perf_mode = 0;
|
||||
|
||||
pr_debug("%s: substream->pcm->id:%s\n",
|
||||
__func__, substream->pcm->id);
|
||||
|
|
@ -41515,7 +41551,7 @@ static int msm_pcm_routing_prepare(struct snd_pcm_substream *substream)
|
|||
|
||||
be_bit_width = msm_routing_get_bit_width(
|
||||
bedai->format);
|
||||
|
||||
copp_perf_mode = get_copp_perf_mode(i, session_type, be_id);
|
||||
if (hifi_filter_enabled && (bedai->sample_rate == 384000
|
||||
|| bedai->sample_rate == 352800) &&
|
||||
be_bit_width == 32)
|
||||
|
|
@ -41523,7 +41559,7 @@ static int msm_pcm_routing_prepare(struct snd_pcm_substream *substream)
|
|||
SNDRV_PCM_FORMAT_S32_LE);
|
||||
copp_idx = adm_open(port_id, path_type,
|
||||
sample_rate, channels, topology,
|
||||
fdai->perf_mode, bits_per_sample,
|
||||
copp_perf_mode, bits_per_sample,
|
||||
app_type, acdb_dev_id,
|
||||
session_type, fdai->passthr_mode, copp_token);
|
||||
if ((copp_idx < 0) ||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#ifndef _MSM_PCM_ROUTING_H
|
||||
#define _MSM_PCM_ROUTING_H
|
||||
|
|
@ -688,6 +689,8 @@ enum {
|
|||
#define STREAM_TYPE_ASM 0
|
||||
#define STREAM_TYPE_LSM 1
|
||||
|
||||
#define PP_PERF_MODE_FLAG_MASK 0x10000
|
||||
#define PP_PERF_MODE_VALUE_MASK 0xF
|
||||
enum {
|
||||
ADM_TOPOLOGY_CAL_TYPE_IDX = 0,
|
||||
ADM_LSM_TOPOLOGY_CAL_TYPE_IDX,
|
||||
|
|
@ -743,6 +746,7 @@ struct msm_pcm_stream_app_type_cfg {
|
|||
int sample_rate;
|
||||
uint32_t copp_token;
|
||||
int bit_width;
|
||||
int copp_perf_mode;
|
||||
};
|
||||
|
||||
/* dai_id: front-end ID,
|
||||
|
|
|
|||
Loading…
Reference in a new issue