Loading asoc/msm-pcm-loopback-v2.c +17 −10 Original line number Diff line number Diff line // 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> Loading Loading @@ -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]; Loading @@ -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) Loading Loading @@ -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; Loading @@ -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]; Loading @@ -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) Loading Loading @@ -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; } Loading asoc/msm-pcm-q6-v2.c +17 −10 Original line number Diff line number Diff line // 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. */ Loading Loading @@ -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]; Loading @@ -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) Loading Loading @@ -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; } Loading @@ -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]; Loading @@ -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) Loading Loading @@ -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; } Loading asoc/msm-pcm-routing-v2.c 100755 → 100644 +50 −14 Original line number Diff line number Diff line // 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> Loading Loading @@ -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 Loading Loading @@ -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", Loading Loading @@ -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; } Loading Loading @@ -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, Loading Loading @@ -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); Loading @@ -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) || Loading Loading @@ -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 */ Loading Loading @@ -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) Loading @@ -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, Loading @@ -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) || Loading Loading @@ -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 */ Loading Loading @@ -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, Loading Loading @@ -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); Loading Loading @@ -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) Loading @@ -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) || Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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) Loading @@ -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) || asoc/msm-pcm-routing-v2.h +4 −0 Original line number Diff line number Diff line /* 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 Loading Loading @@ -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, Loading Loading @@ -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 Loading
asoc/msm-pcm-loopback-v2.c +17 −10 Original line number Diff line number Diff line // 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> Loading Loading @@ -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]; Loading @@ -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) Loading Loading @@ -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; Loading @@ -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]; Loading @@ -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) Loading Loading @@ -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; } Loading
asoc/msm-pcm-q6-v2.c +17 −10 Original line number Diff line number Diff line // 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. */ Loading Loading @@ -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]; Loading @@ -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) Loading Loading @@ -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; } Loading @@ -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]; Loading @@ -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) Loading Loading @@ -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; } Loading
asoc/msm-pcm-routing-v2.c 100755 → 100644 +50 −14 Original line number Diff line number Diff line // 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> Loading Loading @@ -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 Loading Loading @@ -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", Loading Loading @@ -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; } Loading Loading @@ -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, Loading Loading @@ -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); Loading @@ -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) || Loading Loading @@ -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 */ Loading Loading @@ -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) Loading @@ -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, Loading @@ -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) || Loading Loading @@ -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 */ Loading Loading @@ -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, Loading Loading @@ -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); Loading Loading @@ -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) Loading @@ -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) || Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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) Loading @@ -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) ||
asoc/msm-pcm-routing-v2.h +4 −0 Original line number Diff line number Diff line /* 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 Loading Loading @@ -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, Loading Loading @@ -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