summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaynes Mathew George <hgeorge@codeaurora.org>2017-07-25 14:02:13 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-07-31 18:31:56 -0700
commitaa5d0fc24044bec2dadd0007fd881fd4a09f7f6a (patch)
treefc3ed873c09dd17f5fef05317420706fb9647c59
parent03f28c162d00d96731e730e0f171c3f0e182c44d (diff)
ASoC: msm: qdsp6v2: Open unique COPP port for concurrent ULL streams
Routing driver reuses the same adm for streams with the same app_type, sample_rate etc. This isn't allowed for ULL streams as per the DSP interface. We need to open a separate COPP port for concurrent ULL streams CRs-Fixed: 2083105 Change-Id: I569b32830145d6dae99449d0bc4148b2f60b101d Signed-off-by: Haynes Mathew George <hgeorge@codeaurora.org> Acked-by: Shiv Maliyappanahalli <smaliyap@codeaurora.org>
-rw-r--r--sound/soc/msm/qdsp6v2/q6adm.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/sound/soc/msm/qdsp6v2/q6adm.c b/sound/soc/msm/qdsp6v2/q6adm.c
index e1bfc950d0e3..018681309f2e 100644
--- a/sound/soc/msm/qdsp6v2/q6adm.c
+++ b/sound/soc/msm/qdsp6v2/q6adm.c
@@ -2364,7 +2364,8 @@ int adm_open(int port_id, int path, int rate, int channel_mode, int topology,
struct adm_cmd_device_open_v5 open;
struct adm_cmd_device_open_v6 open_v6;
int ret = 0;
- int port_idx, copp_idx, flags;
+ int port_idx, flags;
+ int copp_idx = -1;
int tmp_port = q6audio_get_port_id(port_id);
pr_debug("%s:port %#x path:%d rate:%d mode:%d perf_mode:%d,topo_id %d\n",
@@ -2418,8 +2419,17 @@ int adm_open(int port_id, int path, int rate, int channel_mode, int topology,
(topology == VPM_TX_DM_RFECNS_COPP_TOPOLOGY))
rate = 16000;
- copp_idx = adm_get_idx_if_copp_exists(port_idx, topology, perf_mode,
- rate, bit_width, app_type);
+ /*
+ * Routing driver reuses the same adm for streams with the same
+ * app_type, sample_rate etc.
+ * This isn't allowed for ULL streams as per the DSP interface
+ */
+ if (perf_mode != ULTRA_LOW_LATENCY_PCM_MODE)
+ copp_idx = adm_get_idx_if_copp_exists(port_idx, topology,
+ perf_mode,
+ rate, bit_width,
+ app_type);
+
if (copp_idx < 0) {
copp_idx = adm_get_next_available_copp(port_idx);
if (copp_idx >= MAX_COPPS_PER_PORT) {